Using tmux for persistent shell sessions#
Tmux allows you to keep a shell session active when closing your ssh connection. So, when you close your laptop to change a room, you don’t lose the current state of your command line tools. It has many more useful features.
However, you need to remember the login node you used to start tmux, and X11 applications (e.g. ncview) will not survive the disconnect. emacs
will survive in command line mode (module load emacs ; emacs -nw
).
The following examples will assume that you have prescribed your user name and allowed (trusted) X11 forwarding for dkrz.de machines in your ~/.ssh/config
host *.dkrz.de
user YOUR_USER_ID
ForwardX11 yes
ForwardX11Trusted yes
Getting started#
To use it, start your first session as:
ssh levante2.dkrz.de # chose your preferred node here.
tmux
When you lost your ssh connection, you can reconnect by
ssh levante2.dkrz.de
tmux attach -t 0
To get a list of active tmux sessions (on your login node of choice):
tmux list-sessions
Ask your favorite search engine for tmux tutorial
or tmux cheat sheet
to get started.
Customizing tmux#
You probably want to rebind the control key for tmux. By default tmux will eat ctrl-b (c-b
in the following) and use it for commands to tmux. Not super-handy if you are used to using it for moving the cursor backward by one character… Add
unbind C-b
set-option -g prefix C-j
bind-key C-j send-prefix
to your ~/.tmux.conf
on levante to move this to c-j
. Then c-j
c-j
will send a c-j
to your shell/emacs/whatever.
Now you can use c-j
d
to detach from your tmux session. It will live on, but you are back in the normal shell.
Also have a look at tmux customization
in your favorite search engine.
Using tmux and X11 forwarding#
As stated above, we’ll assume that you have activated X11 forwarding for your connections to levante.
Now the only issue is that the shell in the tmux will forever remember the display number you had, when you started tmux, but your ssh connections will get different display numbers on each connect.
ssh levante2.dkrz.de
echo $DISPLAY
# localhost:38.0
tmux
echo $DISPLAY
# localhost:38.0
# [ on a new terminal / ... ]
ssh levante2.dkrz.de
echo $DISPLAY
# localhost:46.0
tmux attach -t 0
export $DISPLAY
# localhost:38.0
# you cannot start x11 apps now.
export DISPLAY=localhost:46
# this should fix things. Take the number you got from the echo after logging in.