GNU/Linux >> Tutoriales Linux >  >> Linux

Ssh:¿por qué falla el intento de reenvío X11 con "conectar /tmp/.x11-unix/x0:no existe tal archivo o directorio"?

En mi máquina local, ejecuto:

ssh -X [email protected]

(Para completar, también probé todo lo siguiente usando -Y con resultados idénticos).

Como era de esperar, esto accede bien a remotemachine.com, y todo parece estar bien. Sin embargo, si intento ejecutar xcalc, obtengo:

 connect /tmp/.X11-unix/X0: No such file or directory
 Error: Can't open display: localhost:10.0

Pero,

$ ls -la /tmp/.X11-unix/
total 36
drwxrwxrwt 2 root root  4096 2012-11-23 09:29 .
drwxrwxrwt 8 root root 32768 2012-11-29 08:22 ..
srwxrwxrwx 1 root root     0 2012-11-23 09:29 X0

Así que no solo existe /tmp/.X11-unix/X0, ¡tiene permisos universales r/w/x!

Anteriormente usé x-forwarding sin problemas, aunque no en algún momento...

uname -a en el servidor para referencia:

Linux machinename 2.6.32-25-generic #45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU/Linux

He estado buscando en la web durante un par de horas sin éxito. Otras menciones del mismo problema, pero sin soluciones.

Respuesta aceptada:

Si tiene un servidor X ejecutándose y DISPLAY la variable de entorno se establece en :0 , que le dice a las aplicaciones que se conecten al servidor X usando un socket de dominio unix que generalmente se encuentra en Linux en /tmp/.X11-unix/X0 (aunque vea a continuación sobre el espacio de nombres abstracto en Linux reciente).

Cuando haces ssh a la máquina máquina remota , sshd en máquina remota establece DISPLAY en localhost:10 (por ejemplo), lo que esta vez significa que las conexiones X se realizan a través de TCP al puerto 6010 de la máquina localhost. sshd en máquina remota escucha las conexiones allí y reenvía cualquier conexión entrante al cliente ssh. El cliente ssh luego intenta conectarse a /tmp/.X11-unix/X0 (en el extremo local, no en el remoto) para comunicarse con su servidor X.

Ahora, tal vez no tenga un servidor X en ejecución (¿está en Mac?) o tal vez el socket de dominio de Unix no se encuentre en /tmp/.X11-unix, lo que significaría que ssh no se configuró correctamente en la compilación. tiempo.

Para averiguar cuál es la ruta correcta para el socket de Unix, puede intentar un strace -e connect xlogo (o el equivalente en su sistema) en su máquina local para ver qué hace una aplicación X normal.

netstat -x | grep X también puede dar una pista.

Para que conste, en una máquina sibilante Linux Debian aquí, Xorg escucha en ambos /tmp/.X11-unix/X0 en el sistema de archivos y /tmp/.X11-unix/X0 en el espacio de nombres abstracto (generalmente escrito @/tmp/.X11-unix/X0 ). Desde strace , las aplicaciones X11 parecen usar ahora ese espacio de nombres abstracto de forma predeterminada, lo que explica por qué todavía funcionan si /tmp/.X11-unix se elimina, mientras que ssh no usa ese espacio de nombres abstracto.

Relacionado:¿forma de ejecutar un servidor ssh en un dispositivo Android?
Linux
  1. ¿Cómo maneja Linux múltiples separadores de rutas consecutivas (/home////username///file)?

  2. ¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

  3. ¿Por qué poner otras cosas que no sean /home en una partición separada?

  4. ¿Por qué en algunos sistemas Linux, el sistema de archivos raíz aparece como /dev/root en lugar de /dev/<nodo de dispositivo real> en mtab?

  5. ¿Deberían vivir los sitios web en /var/ o /usr/ según el uso recomendado?

Comprender los archivos /proc/mounts, /etc/mtab y /proc/partitions

¿Cuál es la diferencia entre /tmp y /run?

hacer eco o imprimir /dev/stdin /dev/stdout /dev/stderr

¿Por qué los directorios /home, /usr, /var, etc. tienen todos el mismo número de inodo (2)?

¿Por qué se requieren < o > para usar /dev/tcp?

Cómo cambiar el valor predeterminado /tmp a /home/user/tmp