Esta é a minha solução (obrigado pelo ponteiro xpra). É assim:
- Assume o mesmo bashrc local e remoto
- Use o tmux-ssh para conectar-se ao site remoto. Leva argumentos normais de ssh (1) como -p e -u. Basicamente chama tmux-x-attach () no site remoto
- tmux-x-attach () inicia um servidor xpra se nenhum estiver em execução, em seguida, conecta-se ao servidor xpra em execução e envia para tmux-attach ()
- tmux-attach () também
- inicie uma nova sessão do tmux se não houver nenhuma
- anexar à instância tmux em execução (única)
- solicita qual das várias sessões tmux anexar a
- quando desanexamos, voltamos ao tmux-x-attach, que se desanexa do xpra antes que a sessão ssh termine
- Uma tentativa (tput init) é feita para limpar o terminal se o tmux foi desconectado de dentro, por exemplo. vim
De .bashrc
tmux-x-attach() {
ps -f -u $USER | grep -v grep | grep -q 'xpra start' || xpra start :9
xpra attach :9 --opengl=no > /tmp/xpra-attach.log 2>&1 &
DISPLAY=:9 tmux-attach "$@"
xpra detach :9
}
tmux-attach() {
case $(tmux list-sessions 2>/dev/null | wc -l) in
0) tmux ;;
1) tmux attach ;;
*)
tmux list-sessions
read -n 1 -p "Select command: " N < /dev/tty > /dev/tty;
tmux attach -t $N
;;
esac
}
tmux-ssh() { ssh "$@" -A -X -t 'PS1=tmux-ssh- ; . ~/.bashrc ; tmux-x-attach'; tput init; }