The solution is to use xpra in addition to tmux.
Firstly, add the following 4 lines to your $HOME/.profile
alias xp_start='xpra start :100 --start-child=xterm --start-via-proxy=no --opengl=yes'
alias xp_list='xpra list'
alias xp_stop='xpra stop :100'
alias xp_attach='xpra attach :100'
To run an X11 app that persist through sessions:
0. SSH (with X11 tunneling, i.e., -X or -Y) into your server containing <your-x11-app>
1. create a new virtual xpra session, run xp_start
2. enter any tmux session or create a new tmux session, run `tmux a` or `tmux`
3. run the X11 app in tmux session with DISPLAY set to 100, run `DISPLAY=:100 <your-x11-app>`
4. inside tmux, attach the xpra session, run xp_attach. This will display the X11 app on your current screen. You can detach the xpra session by Ctrl+C. Detaching the tmux session or SSH disconnection will auto detach the xpra session as well.
Working Principle:
Xpra works by creating a virtual display (with number 100 in this example), then running <your-x11-app> on this virtual display. Since this is a virtual display, all apps running inside it will not be killed due to disconnection or session detach (unless you manually stop the display by xp_stop). When you attach this display :100, all x11-apps running inside this display will be shown on your screen, and they will persist through sessions.
No comments:
Post a Comment