¿Por qué la pantalla x11 no funciona mediante el inicio de sesión ssh?

22

He iniciado sesión en un servidor remoto y estoy tratando de mostrar una aplicación x (por ejemplo, Firefox). pero aparece un mensaje de error los siguientes son mis intentos de abrir 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 ~]$ 

Usé -X, -Y porque leí en alguna parte que estas dos opciones están relacionadas con credenciales con respecto a X11 y que estos interruptores harán el trabajo por mí. Incluso sin los modificadores -X, -Y, mi intento falló.

¿Qué significa el error 'no mostrar especificada'?

PD: Lo extraño es que si me conecto al servidor remoto a través de mi PUTTY y repito el comando 'firefox', ¿funciona?!? (Firefox se muestra en la computadora local)

PD: mi computadora local es Windows 7, así que tengo Xming ejecutándose en segundo plano para permitir la visualización de X11. En cuanto al intento escrito en la parte superior, los comandos se escribieron en la terminal Cygwin.

kwagjj
fuente
¿Has intentado mostrar algo localmente desde tu terminal Cygwin? Por ejemplo, puede encontrar una utilidad X local como xclock y ejecutarla para ver qué sucede. Si no puede mostrar localmente, la pantalla remota no funcionará. También puede necesitar el servidor X para Cygwin.
unxnut
1
@unxnut como has señalado, mi DISPLAYvariable no se configuró. así que lo configuré con export DISPLAY=:0.0' and executed xclock` y apareció el xclock. Pero cuando xclockError: Can't open display:
inicié

Respuestas:

16

Asegúrese de tener la variable DISPLAY establecida en su entorno cygwin:

export DISPLAY=:0.0

después de conectarse con SSH, verifique si ese shell también conoce la variable DISPLAY correcta con:

echo $DISPLAY
jensd
fuente
44
Configuré la variable DISPLAY en el terminal de cygwin de la computadora local y luego pasé al servidor remoto y escribí echo $DISPLAY. Pero aún así la variable DISPLAY en el servidor remoto se establece en nada ..
kwagjj
2
Error: Can't open display: :0.0
Ahmed
2
Haga esto:export DISPLAY=localhost:0
trogne
18

Acabo de encontrarme con este problema al conectarme a un servidor RHEL7 sin cabeza.

Necesita el paquete xorg-x11-xauth instalado en su host para que la variable DISPLAY se configure y esté debidamente autorizada.

Espero haber salvado a alguien algún tiempo.

Mike S
fuente
3
Exactamente lo que estaba buscando. ¡Muy apreciado!
josh-cain
1
¡Gran respuesta! ¡Las otras soluciones (configurando DISPLAY manualmente a través de la exportación) resultarán en una transmisión sin cifrar entre el cliente y el servidor! En Debian Squeeze era el paquete "xauth" el que necesitaba ser instalado para que todo funcionara. Después de una re-entrada por ssh -Xun echo $DISPLAYvolvió una URL + puerto y una llamada de xterm &abrir un terminal en una ventana local.
Jpsy
7

Gracias a @jensd, @unxnut por ayudarme. basado en sus comentarios pude resolver el problema.

La solución necesitaba dos pasos:

  1. la variable DISPLAY debe establecerse correctamente.
  2. cuando se envía al servidor remoto, el interruptor -X debe estar encendido

mis intentos anteriores carecen de una o ambas de estas dos condiciones.

De todos modos, para los usuarios posteriores que vean esto, aquí hay ejemplos para mostrarles lo que estoy tratando de decir.

caso 1

mi máquina local no tendrá configurada la variable DISPLAY. Y luego haré un ssh al servidor remoto con el interruptor -X y luego intentaré ejecutarlo 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 puede ver, Error: Can't open display:se muestra un error en el terminal del servidor remoto.

case2

esta vez, en la máquina local, especificaré la variable DISPLAY. Pero cuando estoy ssh'ing, no voy a encender el interruptor -X. El resultado será un fracaso:

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 ~]$ 

Al principio puede ver que he configurado correctamente la variable DISPLAY. Pero aun así, después de ssh'ing (sin el modificador -X) el xclock no se ejecuta.

* setenv | grep DISPLAYAquí se puede ver un resultado diferente con (comparar con el caso 1). en el caso 2, el resultado está en blanco. por otro lado, el resultado del caso 1 a esta línea de comando es DISPLAY: undefined variable... No estoy seguro de cómo se produce esta diferencia, pero me da la impresión de que está relacionado con si has satisfecho la condición 1 o 2 .

case3

esta vez, especificaré correctamente la variable DISPLAY en la máquina local y también ssh al servidor remoto con mi interruptor -X activado.

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 ~]$

con esta configuración, xclockfunciona !! Aquí hay una captura de pantalla para demostrar que no estoy mintiendo. ingrese la descripción de la imagen aquí El xclock se muestra con éxito en mi máquina local.

Nuevamente, mira el resultado de setenv | grep DISPLAYen este caso. Ahora se nota DISPLAY=localhost:11.0. Por lo que sé, esto está relacionado con MIT-MAGIC-COOKIE en el archivo .Xauthority, pero como no sé mucho sobre esto, no iré más allá.

Conclusión: de los tres casos anteriores, podemos confirmar que para que X Windows remoto se muestre correctamente, tanto la variable 1. DISPLAY de la máquina local como 2. el -Xinterruptor ssh deben estar configurados correctamente. Por supuesto, el servidor remoto debe permitir el reenvío X11.

kwagjj
fuente