Ejecutar aplicaciones gráficas con otro usuario en una sesión X remota


Ocurre bastante a menudo que cuando te conectas a una máquina remota mediante SSH y necesitas lanzar un comando con otro usuario, te da un error semejante a este:

$ sudo virt-manager [sudo] password for juan: PuTTY X11 proxy: wrong authorisation protocol attemptedPuTTY X11 proxy: wrong authorisation protocol attemptedPuTTY X11 proxy: wrong authorisation protocol attemptedPuTTY X11 proxy: wrong authorisation protocol attemptedTraceback (most recent call last): File "/usr/share/virt-manager/virt-manager.py", line 383, in <module> main() File "/usr/share/virt-manager/virt-manager.py", line 286, in main raise gtk_error RuntimeError: could not open display

Esto es debido a que el servidor X utiliza una cookie de autenticación que se guarda en el perfil del usuario en ~/.Xauthority Para poder pasar esta autenticación a otro usuario, podemos utilizar los siguientes comandos:

Primero listamos las cookies que tenemos

$ xauth list xenon.local/unix:11  MIT-MAGIC-COOKIE-1  32a84908586f4e23c0b68f4478a32578 xenon.local/unix:10  MIT-MAGIC-COOKIE-1  ba33662833233fe85ece9e4825c44d5d

Y luego localizamos la que nos interesa fijándonos en el valor de la variable DISPLAY y se la añadimos al otro usuario:

$ echo $DISPLAY localhost:10.0 $ su - Contraseña: # xauth add xenon.local/unix:10  MIT-MAGIC-COOKIE-1  ba33662833233fe85ece9e4825c44d5d

Ahora ya podemos lanzar cualquier comando como root y las X se redirigirán por nuestra conexión SSH.

ssh  x 

See also