So, I finally got round to buying myself a netbook. Unlike my old laptop the netbook has a battery that actually works so I can pick it up, use it for a few minutes and then close the lid so it suspends. Later on I can pick it up again and carry on where I left off. At least that's the theory. The problem is that quite a lot of what I do ends up involving ssh connections to remote hosts and whilst those connections survive a brief period of suspension they don't last for too long.
Step one is to initiate tmux over the ssh connection:
ssh -t destination "tmux -2 -L netbook attach || tmux -2 -L netbook"
The -2 forces tmux to assume that the terminal supports 256 colours. All of the ones I use seem to.
The -L netbook option gives the tmux session a unique name so it won't get mixed up with a manually launched tmux session.
First I try and attach to an existing session but if that fails I create a new one.
I put this in a script named ssh-and-tmux.
Step two is to automatically reconnect when the connection is dropped. I decided not to do this automatically because that would keep throwing off other connections from elsewhere. Leaving multiple connections active at the same time would mean that the usable window size might be limited too. Instead I simply wait for the Enter key to be pressed before trying to connect again and if anything goes wrong exit.
So, the step two script is:
#!/bin/sh if [ -n "$TMUX" ]; then echo Already in tmux exit 1 fi if [ -n "$STY" ]; then echo Already in screen exit 1 fi dest="$1" while true; do ssh -t "$dest" "tmux -2 -L netbook attach || tmux -2 -L netbook" stty sane echo "Dropped, press Enter to reconnect." if read x; then echo "Reconnecting..." else # Something bad happened to our tty. We'd better exit. exit 1 fi done
Sometimes it can take ssh a while to notice that the connection has been
dropped. In that case I can simply type "
This works well but there's more to come in the next post.