logo





En MacProgramadores
En Internet


 

Ayúdenos a mantener esta web actualizada

 

Trucos

X11 forwarding en Mac OS X



Este truco explica cómo utilizar SSH para hacer X11 forwarding. X11 forwarding permite ejecutar aplicaciones X11 situadas en un servidor remoto. Aunque el truco se centra en Mac OS X, los principios son los mismos en otros sistemas UNIX.


Cliente X y servidor X

Se llama servidor X al gestor de ventanas X11. Se llama cliente X a una aplicación gráfica X11 (p.e. xclock). Tenga cuidado, es muy frecuente liarse al interpretar estos términos al revés. Recuerde que el servidor X siempre se ejecuta en su máquina local y necesita de un teclado y una pantalla. Por su parte el cliente X es una aplicación que se puede estar ejecutando en su máquina local o en remoto. En Mac OS X el servidor X es la aplicación X11.app situada en la carpeta Utilities.

Las aplicaciones necesitan saber dónde está el servidor X, para ello usan la variable de entorno DISPLAY. Tres valores similares, pero no equivalentes, de esta variable son:

localhost:0 -> Conectar al puerto 6000 de localhost
:0 -> Connectar al socket de dominio UNIX /tmp/.X11-unix/:0
/tmp/launchd-xxxxxx/:0 -> Conectar al socket de dominio UNIX /tmp/ launchd-xxxxxx/:0

La última opción es la que utiliza por defecto Mac OS X 10.5 y permite que no haga falta ejecutar X11.app. Cuando launchd detecta una conexión a este socket, lanza X11. Por ejemplo, en mi máquina obtengo el valor:

$ echo $DISPLAY
/tmp/launch-v6IuEo/:0

Una vez entendidos los principios básicos, vamos a ver cómo se configura el cliente X y el servidor X.

Configuración de la máquina remota

En la máquina remota podemos ejecutar fácilmente aplicaciones de consola a través de SSH. En este apartado vamos a explicar cómo configurar la máquina remota para poder ejecutar aplicaciones X11 (clientes X) cuyas ventanas se muestren en la máquina local (servidor X).

Para ello tenemos habilitar X11 forwarding editando el fichero /etc/ssh/sshd_config, y reemplazando la entrada:

#X11Forwarding no

Por la entrada:

X11Forwarding yes

La otra cosa que tenemos que hacer es reiniciar el acceso remoto (sshd) . Para ello podemos usar la opción Enable Remote Login del panel Sharing de System Preferences. Alternativamente podemos ejecutar el comando:

$ kill -HUP `cat /var/run/sshd.pid`

Configuración de la máquina local

En la máquina local primero conviene comprobar que podamos conectarnos a la máquina remota:

$ ssh flh@dymas.ii.uam.es

En este caso, para hacer X11 forwarding basta con añadir la opción -X (en mayúsculas, ya que -x en minúsculas deshabilita el X11 forwarding):

$ ssh -X flh@dymas.ii.uam.es

Ahora podemos ejecutar un cliente X en la máquina remota y ver si SSH hace X11 forwarding correctamente, nuestro servidor X (X11.app) deverá mostrar la ventana del cliente X remoto:

$ xclock

Observe que en la sesión SSH en la máquina remota la variable DISPLAY vale algo así como:

$ echo $DISPLAY
localhost:10.0

Esto significa que el servidor X está en el screen 10 del servidor de ventanas 0 de la máquina remota (localhost) . El servidor SSH (sshd) se encargará de hacer forwarding al servidor X de nuestra máquina local.