DISPLAY environment variable in tmux
tmux
is a great command when using remote servers for work. Mainly because once I turn on tmux
on the remote server, I can recover the session whenever I reconnect the server again. This feature is greater than it sounds. If you have not tried tmux
yet, and you often work on the remote server, you definitely should use tmux
.
But when I try to use gnuplot
or something that needs X11 forwarding through SSH, sometimes you need to change DISPLAY
environment variable in tmux
session. Because the DISPLAY
variable has been set when you turned on the tmux
session first, and the variable could change when you reconnect to the server, but the variable in the tmux
session is still the one set before. So when you try to run some X11 session in the tmux
session, it will fail because of the DISPLAY
variable of the SSH session and tmux
session are different.
To solve the problem, the DISPLAY
environment variable of SSH session should be saved every time you connect with SSH like, and you can set the DISPLAY
variable using the saved value. You can achieve this by writing the following line in ~/.bashrc
,
if [ -z "$TMUX" ]; then
echo $DISPLAY > ~/.display.txt
fi
function set_display(){
export DISPLAY=$(cat ~/.display.txt)
}
This will save the DISPLAY
variable to ~/.display.txt
when you connect to the remote server which is not the tmux
session.
Then you can set the DISPLAY
variable in the tmux
session by doing
$ set_display
It still requires you to run the one line command and not completely automatic. If you really want to make it fully automatic, I think currently it is only possible by resetting the DISPLAY
variable everywhen you run any command.