Conexões GUI remotas (X11) passam pela porta TCP 6000+ n onde n é o número de exibição¹. Portanto, as duas mensagens referem-se ao mesmo problema: alguns programas tentaram se conectar para exibir 12 e falharam.
O Emacsclient não faz conexões X11, o Emacs faz. Então, se você vir esta mensagem, significa que o Emacsclient conseguiu entrar em contato com o Emacs e informá-lo para abrir um novo quadro. O Emacsclient solicita um quadro de GUI, se ele acha que um display X11 está disponível, e um quadro de terminal, caso contrário. Quando a variável de ambiente DISPLAY
está definida, o Emacsclient acha que uma exibição X11 está disponível.
A variável de ambiente DISPLAY
é definida automaticamente pelo SSH quando está encaminhando uma conexão X11 de volta à sua máquina local. Mas quando você anexa a uma sessão de tela existente, você obtém o ambiente que foi definido dentro da sessão de tela, incluindo a variável DISPLAY
. Se você desconectar e reconectar, não há garantia de que o número de exibição seja o mesmo².
Para atualizar a variável DISPLAY
, desanexe da sessão Tela, execute echo $DISPLAY
para ver o valor definido pelo SSH (por exemplo, localhost:13
), anexe novamente à sessão Tela e execute export DISPLAY=localhost:13
(ou qualquer que seja o número correto é). Se você tiver várias janelas na sessão de tela, precisará fazer isso em cada uma delas. Se você criar novas janelas, digite Ctrl + A : setenv localhost: 13 ' Enter para definir o ambiente variável na tela em si, por causa das novas janelas.
Se preferir, você pode abrir um quadro de terminal desarmando DISPLAY
ou executando emacsclient -nw
.
¹ O SSH usa números de exibição a partir de 10, deixando números de 0 a 9 apenas para exibições locais. Em uma situação típica, a tela 12 indica que esta é a terceira conexão da GUI que foi aberta sobre o SSH.
² Na verdade, se você foi desconectado devido a um problema de rede, mas reconectado logo depois, é bem possível que a máquina remota ainda não tenha notado o problema de rede - tudo o que sabe é que já faz um tempo desde que o cliente enviou qualquer coisa, mas isso é apenas inatividade normal - nesse caso, a tela 12 ainda está em uso no que se refere à máquina remota.
Se você tiver vários saltos SSH e a conexão da máquina local para a máquina intermediária for interrompida e retomada, então, após a retomada, o número de exibição na máquina intermediária foi alterado, mas a conexão SSH da máquina intermediária para a máquina final ainda encaminha o número do mostrador original.
Nesse cenário, seria mais simples se você executasse Screen somente na máquina final e usasse a máquina intermediária como proxy . Adicionar
Host node[0-9]*
ProxyCommand ssh -W %h:%p host1
para o seu ~/.ssh/config
e execute ssh node005
. Então você não precisa se preocupar com a máquina intermediária.
Se você tiver que executar o Screen na máquina intermediária, será necessário reiniciar a conexão SSH do host1 ao node005, depois de atualizar a variável DISPLAY
. (Você também pode encaminhar a conexão TCP do número de exibição antigo para o novo, mas isso só funcionaria se o número de exibição antigo não fosse reutilizado nesse meio tempo.)