por que o x11 não exibe o trabalho através do login do ssh?

21

Eu fiz login 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 ~]$ 

Eu usei -X, -Y porque li em algum lugar que essas duas opções estão relacionadas a credenciais em relação ao X11 e essas opções farão o trabalho por mim. Mesmo sem os switches -X, -Y, minha tentativa falhou.

O que significa o erro "no display speicified"?

P.S. O estranho é que, se eu me conecto ao servidor remoto através do meu PUTTY e repito o comando 'firefox', ele funciona?!?! (O Firefox é exibido no computador local)

P.S. meu computador local é o Windows 7, portanto, 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.

    
por kwagjj 24.06.2014 / 14:43

3 respostas

15

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

export DISPLAY=:0.0

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

echo $DISPLAY
    
por 24.06.2014 / 14:54
17

Acabei de me deparar com este problema ao ligar a um servidor RHEL7 sem cabeça.

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

Espero ter salvo alguém em algum momento.

    
por 29.06.2015 / 23:17
5

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

A solução precisava de dois passos:

  1. a variável DISPLAY deve ser definida corretamente.
  2. ao fazer ssh ao servidor remoto, o comutador -X deve estar em

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

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

case1

minha máquina local não terá nenhum conjunto de variáveis DISPLAY. E então eu vou ssh para o servidor remoto com o switch -X e 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, vou especificar a variável DISPLAY. Mas quando estou ssh'ing, 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 defini corretamente a variável DISPLAY. Mas mesmo assim, depois do ssh'ing (sem o comutador -X) o xclock não é executado.

* Um resultado diferente com setenv | grep DISPLAY pode ser visto aqui (compare com o caso1). no case2, 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 tendo um pressentimento de que isso está relacionado a se você está satisfeito com a condição 1 ou 2.

case3

desta vez, vou especificar corretamente a variável DISPLAY na máquina local e também ssh para o servidor remoto com o meu -X ligado.

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, xclock funciona !! aqui está uma imagem para provar que não estou mentindo. o xclock é mostrado com sucesso na minha máquina local.

Novamente, confira o resultado de setenv | grep DISPLAY nesse caso. Agora mostra DISPLAY=localhost:11.0 . Pelo que eu sei, isso está relacionado com o MIT-MAGIC-COOKIE no arquivo .Xauthority, mas como eu não sei muito sobre isso, não irei mais adiante.

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

    
por 24.06.2014 / 15:22

Tags