Controlar aplicaciones en remoto usando screen y xpra

Normalmente, lo que se hace para ejecutar aplicaciones en un equipo remoto es conectarse mediante SSH (y si la aplicación utiliza ventanas gráficas, activando el X11 Forwarding con la opción -X). Esto es ampliamente conocido por los usuarios de GNU/Linux.

Pero esto obliga a mantener la conexión abierta, corriendo el riesgo además de que, si se corta, la aplicación reciba una señal HUP, que normalmente hace que se cierre. En cualquier caso, no es posible volver a interactuar con la aplicación.

nohup

Una primera aproximación puede ser utilizar nohup para que la aplicación ignore las señales HUP y no se cierre aunque la conexión se corte. Así no es posible recuperar su control más adelante, pero si no se trata de un trabajo interactivo es suficiente.

nohup trabajo &

screen

Screen es un gestor de sesiones de consola, que permite lanzar una sesión y recuperarla más adelante, si la conexión se corta o no queremos mantener el equipo conectado y encendido permanentemente.

Su uso es muy sencillo, basta con ejecutar este comando, con lo que se abrirá la sesión existente de haberla, o en caso contrario se creará una nueva:

screen -x -R

Una vez dentro de la sesión, puede controlarse con los siguientes atajos de teclado:

  • Control + A + D : Separarse sin cerrar la sesión (se podrá recuperar más adelante).
  • Control + D : Cerrar la sesión definitivamente.

Esto permite iniciar una sesión en un equipo, conectarse desde otro y recuperarla (interactuando incluso desde ambos equipos al mismo tiempo). O bien cerrar la conexión y recuperar la sesión más tarde.

El problema aparece cuando una aplicación utiliza ventanas gráficas, ya que, aunque se utilice el X11 forwarding combinado con screen, no es posible recuperar las ventanas más adelante tan solo usando screen.

Xpra

Xpra puede entenderse como un análogo de screen para ventanas. Es un servidor de X11 que permite conectarse a él desde diferentes lugares (eso sí, no al mismo tiempo) y así recuperar las ventanas de las aplicaciones ejecutándose en remoto.

En el equipo en el que va a estar ejecutándose la aplicación, se debe iniciar un servidor de xpra con el siguiente comando:

xpra start :100

Con esto, se iniciará un servidor X en el display número 100. A partir de entonces, solo hay que dirigir las aplicaciones a ese display para poder recuperarlas más adelante.

DISPLAY=:100 firefox

Para recuperar la ventana, sea desde el mismo o desde otro equipo conectándose por SSH con X11 Forwarding, basta con ejecutar el siguiente comando:

xpra attach :100

Hay que tener en cuenta que, al cerrar esa ventana recuperada, la aplicación recibe las señales habituales y terminará. Para desconectar de la ventana sin cerrar la aplicación, basta con pulsar Control + C en la terminal.

screen + Xpra

Si la aplicación es lanzada desde la propia sesión SSH, Xpra no impide que la aplicación se cierre al cortar la conexión SSH, por lo que lo habitual es combinar el uso de Xpra y screen:

xpra start :100 
DISPLAY=:100 screen -x -R

A partir de entonces, las aplicaciones lanzadas dentro de la sesión de screen se redirigirán al servidor Xpra, y podrán ser recuperadas en cualquier momento. Para hacerlo dentro de la sesión de screen, se debe especificar el display correcto.

firefox &
DISPLAY=:10.0 xpra attach :100

No es necesario conectarse por SSH previamente para recuperar una ventana, ya que Xpra puede hacerlo directamente con el siguiente comando:

xpra attach ssh:usuario@equipo:100

En la página de manual de Xpra hay mucha más información interesante, ya que permite hacer muchas más cosas. Además, en la wiki del centro hay un tutorial sobre el uso de screen.

Un pensamiento en “Controlar aplicaciones en remoto usando screen y xpra

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *