Exportando las X cuando necesitamos hacer su en la máquina remota

shebangPara exportar las X y poder abrir aplicaciones gráficas de una máquina remota en nuestro PC normalmente basta con conectarnos usando ssh -X.

El problema es que hay ocasiones en las que esa máquina no permite hacer login con el usuario root (o no conocemos la contraseña) y a pesar de eso necesitamos ejecutar alguna aplicación gráfica con ese usuario. Hacemos ssh -X con otro usuario, pero al hacer posteriormente un su – o un sudo su resulta que el forwarding de las X deja de funcionar.

Un rollo, pero solucionable.

Primero un poco de información sobre el por qué del problema: cuando conectamos a una máquina con un usuario, ese usuario recibe una cookie de nuestro servidor X para permitir la conexión.

Al abrir una shell de root, este usuario ya no tiene la cookie y por tanto nuestras X rechazarán la conexión y obtendremos un error:

X11 connection rejected because of wrong authentication.
X connection to localhost:10.0 broken (explicit kill or server shutdown).

Esta cookie se guarda en el fichero ~/.Xauthority, así que lo que haremos será jugar con ese fichero para disponer de la cookie con (en este caso) root.

Cuando intentamos lanzar una aplicación haciendo forwarding de las X se busca primero dónde tenemos nuestro Xauthority en la variable de entorno $XAUTHORITY, y si no se encuentra ahí entonces se lee de ~/.Xauthority.

Hacemos entonces nuestro sudo su para abrir la shell de root y ponemos la variable de entorno apuntando al fichero que contiene la cookie que nos permitirá la conexión:

sudo su
XAUTHORITY=/home/usuario/.Xauthority
export $XAUTHORITY

Si probamos ahora a ejecutar un xclock veremos que ya funciona correctamente.

Al estar dando valor a una variable en vez de cargarla desde el .profile tendremos que realizar esta operación cada vez que conectemos a la máquina.

Normalmente tendremos este problema en máquinas HP-UX, es posible que ocurra con Linux también pero en este sistema operativo tenemos disponible un sistema de login algo más avanzado (PAM) que a través del módulo pam_xauth (si está cargado) nos pasarán automáticamente las cookies de X al usuario al que cambiemos con su.