Estou tentando encapsular uma janela x. Se fizer:
user@local: ssh -X user@remote xclock
funciona. No entanto, se eu fizer login na máquina primeiro e depois iniciar o programa, ele falhará.
user@local: ssh -X user@remote
user@remote: xclock
No protocol specified
Error: Can't open display: :0
O que deu errado?
Editar
Eu verifiquei a $DISPLAY
variável no controle remoto:
user@local: ssh -X user@remote "echo $DISPLAY"
:0.0
configurá-lo para o mesmo valor no controle remoto após o login não funciona. Definir $DISPLAY
como :10.0
funciona sugerido.
user@local: ssh -X user@remote
user@remote: DISPLAY=:10.0 xclock
Ainda não entendo por que preciso de valores $DISPLAY diferentes para a sessão interativa e não interativa.
Responder1
Verifique se a variávelMOSTRARestar corretamente definido parahost local: 10.0. Se não é,
export DISPLAY=localhost:10.0
, Então tenterelógio xde novo.
Mas por que preciso que 'DISPLAY' seja 10,0 em vez de 0,0?
OServidor X(ouJanela X, ouX11) é exatamente isso, um servidor, aguardando que os aplicativos se conectem a ele para exibi-los. Isso ocorre no seu pc, onde os aplicativos se conectam ao servidor X através de um soquete localizado em/tmp, normalmente chamado/tmp/.X11-unix. No entanto, como todos os servidores,X11pode ser contatado a partir de computadores remotos e exibir graficamente aplicativos executados em computadores remotos.
No entanto, esta capacidade acarreta muitos riscos de segurança, de modo que é muito difícil abrir seu servidor X11 para aplicativos remotos (você precisa especificar a mesma opção pelo menos três vezes, em arquivos de configuração diferentes).
Agora entressh, o que torna isso seguro: é o-S/-Xopção desshque lida com segurança (também criptografando o tráfego) todos os detalhes de abertura do seu servidor X11 local para o aplicativo remoto. No entanto, quando você deseja exibir ocontrolo remotoxclock localmente, você deve instruir o aplicativo remoto que o servidor X11 a ser contatado não é o seu próprio servidor X11, mas é um em um PC distante (aquele a partir do qual você iniciou osshsessão). Entãorelógio xdeve enviar sua saídanãopara uma tomada local em/tmpmas para uma porta de rede (é127.0.0.1:6010, qualsshmisericordiosamente encurta parahost local:10), do qualsshse encarregará de enviá-lo de volta ao seu PC local, onde eventualmente a saída será exibida graficamente.
Se você não gosta que as diferentes conexões ssh (você pode ter várias) sejam separadas por10unidades, como emlocalhost:10.0, localhost:20.0, ...) você deve alterar a declaração
X11DisplayOffset 10
em/etc/ssh/sshd_configpara o que você quiser (embora eu não veja nenhuma razão para isso, para ser honesto).
É esta afirmação que faz com que os displays remotos estejam disponíveisnãono porto6.000(qual seriahost local:0.0), mas no porto6010. Você pode verificar isso sozinho:
$ ssh -Y vps
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Apr 17 02:47:42 2017 from
root@vps:~# ss -lntp | grep 6010
LISTEN 0 0 127.0.0.1:6010 *:* users:(("sshd",16172,8))
LISTEN 0 0 ::1:6010 :::* users:(("sshd",16172,7))