por que o x11 display não funciona através do login ssh?

22

Eu entrei em um servidor remoto e estou tentando exibir um aplicativo x (por exemplo, firefox). mas uma mensagem de erro aparece. abaixo estão minhas tentativas de abrir o firefox

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

Usei -X, -Y porque li em algum lugar que essas duas opções estão relacionadas às credenciais do X11 e que essas opções farão o trabalho por mim. Mesmo sem as opções -X, -Y, minha tentativa falhou.

O que significa o erro 'no display speicified'?

PS O estranho é que, se eu conectar ao servidor remoto através do meu PUTTY e repetir o comando 'firefox', ele funciona?!?! (O firefox é exibido no computador local)

PS meu computador local é o Windows 7, então eu tenho o Xming rodando em segundo plano para permitir a exibição do X11. Quanto à tentativa escrita na parte superior, os comandos foram digitados no terminal Cygwin.

kwagjj
fonte
Você tentou exibir algo localmente no seu terminal Cygwin? Por exemplo, você pode encontrar um utilitário X local como o xclock e executá-lo para ver o que acontece. Se você não conseguir exibir localmente, o visor remoto não funcionará. Você também pode precisar do servidor X para Cygwin.
unxnut
1
@unxnut como você apontou, minha DISPLAYvariável não foi definida. então eu configurei com o export DISPLAY=:0.0' and executed xclock` e o xclock apareceu. Mas quando eu, em seguida, conectado ao servidor remoto via ssh, e tentou xclocknovamente, ele dizError: Can't open display:
kwagjj

Respostas:

16

Certifique-se de ter a variável DISPLAY configurada em seu ambiente cygwin:

export DISPLAY=:0.0

após conectar-se com o SSH, verifique se esse shell também conhece a variável DISPLAY correta com:

echo $DISPLAY
jensd
fonte
4
Configurei a variável DISPLAY no cygwin termnial do computador local e depois ssh'ed para o servidor remoto e digitei echo $DISPLAY. Mas ainda assim a variável DISPLAY no servidor remoto está definido para nada ..
kwagjj
2
Error: Can't open display: :0.0
Ahmed
2
Faça isso:export DISPLAY=localhost:0
trogne
18

Acabei de encontrar esse problema ao conectar-me a um servidor RHEL7 sem cabeça.

Você precisa do pacote xorg-x11-xauth instalado no seu host para que a variável DISPLAY seja configurada e esteja devidamente autorizada.

Espero ter salvado alguém algum tempo.

Mike S
fonte
3
Exatamente o que eu estava procurando. Muito apreciado!
-josh cain
1
Ótima resposta! As outras soluções (configurar o DISPLAY manualmente via exportação) resultarão em uma transmissão não criptografada entre cliente e servidor! No Debian Squeeze, era o pacote "xauth" que precisava ser instalado para que tudo funcionasse. Após um re-login por ssh -Xum echo $DISPLAYretornou uma porta URL + e uma chamada de xterm &abriu um terminal em uma janela local.
Jpsy
7

Obrigado a @jensd, @unxnut por me ajudar. com base nos seus comentários, consegui descobrir o problema.

A solução precisava de duas etapas:

  1. a variável DISPLAY deve estar definida corretamente.
  2. ao transferir para o servidor remoto, a opção -X deve estar ligada

minhas tentativas anteriores carecem de uma ou de ambas as duas condições.

De qualquer forma, para usuários posteriores que veem isso aqui, há exemplos para mostrar o que estou tentando dizer.

caso 1

minha máquina local não terá nenhuma variável DISPLAY configurada. E então ssh para o servidor remoto com a opção -X e, em seguida, tente executar xclock.

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

como você pode ver, um erro Error: Can't open display:é mostrado no terminal do servidor remoto.

case2

desta vez, na máquina local, especificarei a variável DISPLAY. Mas, quando estou gravando, não vou ligar o interruptor -X. O resultado será uma falha:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

no início, você pode ver que eu configurei corretamente a variável DISPLAY. Mas mesmo assim, após ssh'ing (sem a opção -X), o xclock não é executado.

* Um resultado diferente setenv | grep DISPLAYpode ser visto aqui (compare com o caso1). no caso2, o resultado é apenas em branco. por outro lado, o resultado de case1 para esta linha de comando é DISPLAY: undefined variable.... Não tenho certeza de como essa diferença é causada, mas estou entendendo que está relacionado à questão de saber se você satisfez a condição 1. ou 2 .

case3

desta vez, especificarei corretamente a variável DISPLAY na máquina local e também o ssh para o servidor remoto com a opção my -X ativada.

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

com essa configuração, xclockfunciona !! aqui está uma captura de tela para provar que não estou mentindo. insira a descrição da imagem aqui o xclock é mostrado com sucesso na minha máquina local.

Mais uma vez, confira o resultado setenv | grep DISPLAYdeste caso. Agora mostra DISPLAY=localhost:11.0. Pelo que sei, isso está relacionado ao MIT-MAGIC-COOKIE no arquivo .Xauthority, mas como não sei muito sobre isso, não vou mais adiante.

Conclusão: dos três casos acima, podemos confirmar que, para que o X Windows remoto seja exibido corretamente, a variável 1. DISPLAY da máquina local e o 2. -Xcomutador ssh devem estar configurados corretamente. Obviamente, o servidor remoto deve permitir o encaminhamento do X11.

kwagjj
fonte