LowEndBox - Cheap VPS, Hosting and Dedicated Server Deals

Setup Detachable and Reattachable Terminal Sessions With tmux on your VPS

Tags: , , , Date/Time: August 31, 2020 @ 12:00 am, by raindog308

Detachable and Reattachable Terminal Sessions with tmuxtmux (Terminal Multiplexer) is a program that you can use to have a detachable terminal session on your VPS. This means you can login, execute some commands, and then disconnect, returning hours or days later and connecting to the same session.  This is different than just logging out.

You’re probably familiar with running commands in the background, such as this:

# some-long-process &

If you’re a little more sophisticated, you might try this:

# nohup some-long-process &

That way your background process won’t be terminated if you disconnect. ‘nohup’ means ‘Ignore the HUP signal’, which is what is typically generated by your shell disconnecting.

But what if you have a complex session going with many windows? Maybe you’re deep into some project and have a half-dozen files you’re editing, some status output flowing, and another window with an error message you’re looking at. Or what if you simply want the convenience of picking up a session exactly where you left off? Enter tmux.

Installing tmux

Getting tmux installed on Debian is as easy as

apt-get install tmux

Using tmux

You could just type “tmux” to start a session, but it’s helpful to give them some kind of label. Let’s call our first session something clever like…”first”:

tmux new -s first

You’ll see a screen like this:

Let’s fire up a command that will generate some output.

while [ 1 ] ; do date ; sleep 30 ; done

Now we’ll detach from the session. To do this, we need an out-of-band command, one that isn’t interpreted by the shell. By default this is Control-b, followed by the letter d. Hit control-b and then hit d, and you’ll be back at your original shell, with the message:

[detached (from session first)]

Now let’s start a second session:

tmux new -s editing

I’ll start editing a document in vim:

Now detach (control-b, d). You can even logoff and login again if you want.

At this point you have two sessions running. You can list your tmux sessions with the tmux ‘ls’ command:

root@debian1:~# tmux ls
editing: 1 windows (created Fri May 8 23:13:02 2020) [113x39]
first: 1 windows (created Fri May 8 22:58:13 2020) [113x39]

Let’s reattach to our first session. We do this by:

tmux attach -t first

And we see it’s still running:

control-b, d to detach, and then go look at your other session:

tmux attach -t editing

And I’m right back where I was, editing.

How do you get rid of sessions? You can enter ‘exit’ in a session (for example, I could quit or save-quit my vim session, and then type exit). If you want to kill a session without returning to it, use tmux’s kill-session command:

root@debian1:~# tmux ls
editing: 1 windows (created Fri May 8 23:13:02 2020) [113x39]
first: 1 windows (created Fri May 8 22:58:13 2020) [113x39]
root@debian1:~# tmux kill-session -t first
root@debian1:~# tmux ls
editing: 1 windows (created Fri May 8 23:13:02 2020) [113x39]
root@debian1:~#

Advanced tmux

Besides just allowing you to detach from and then reattach to sessions, you can also use tmux to carve up your window real estate.

I’m going to start a new session:

tmux new -s panes

Of course, I could call it anything. Now I’ll type the following (don’t type the commas):

control-b, %
control-b, "

Here’s my screen now:

The first command (control-b, %) splits the current pane vertically, while the second (control-b, “) splits it horizontally.

I can move between these panes by typing control-b, o. Or I can jump to specific window with control-b, # where “#” is the pane number I want to move to. Panes are numbered in the order created. You can type control-b, q and tmux will briefly display the number of each pane:

Type “exit” inside any pane to close that pane. And you can type control-b, d to detach from the entire pane set and then reattach with “tmux attach”.

There’s much more you can do with tmux, but we’ve covered the most useful commands. If you’re interested in diving deeper, I recommend Brian Hogan’s book, “tmux: Productive Mouse-Free Development”.

I'm Andrew, techno polymath and long-time LowEndTalk community Moderator. My technical interests include all things Unix, perl, python, shell scripting, and relational database systems. I enjoy writing technical articles here on LowEndBox to help people get more out of their VPSes.

No Comments

    Leave a Reply

    Some notes on commenting on LowEndBox:

    • Do not use LowEndBox for support issues. Go to your hosting provider and issue a ticket there. Coming here saying "my VPS is down, what do I do?!" will only have your comments removed.
    • Akismet is used for spam detection. Some comments may be held temporarily for manual approval.
    • Use <pre>...</pre> to quote the output from your terminal/console, or consider using a pastebin service.

    Your email address will not be published. Required fields are marked *