Skip to main content

¿Cómo iniciar programas de interfaz gráfico en los nodos de cómputo?

¿Cómo puedo iniciar programas de interfaz gráfico en los nodos de cómputo?

Esta problemática surge de la necesidad de iniciar programas de interfaz gráfico en los nodos del cluster, pero que visualizaremos en un servidor XWindow remoto (nuestro PC). Dado que los servidores de cómputo no son accesibles de forma externa a través de la red, no podremos inicialmente simplemente establecer la variable $DISPLAY para visualización en nuestro equipo.

Adicionalmente, es problable que equipos intermedios, como Firewalls, impidan la conexión directa del protocolo XWindow.

Es por ello que debemos utilizar el siguiente método:

1. Conexión al nodo de LOGIN mediante SSH con la opción X11Forwarding.

Para ésto, si accedemos desde un terminal estilo Linux/MacOS X, basta utilizar el comando ssh con el parámetro -X:

$ ssh -X <cuenta>@lovelace.icmat.es

NOTA: Podemos mejorar la eficiencia del protocolo X11 utilizando compresión, con el modificador -C

Para verificar que la conexión ha resultado correcta, mostramos el contenido de la variable $DISPLAY, que no debe estar vacía:

$ echo $DISPLAY master.icmat:11.0

Podemos comprobar el correcto funcionamiento del túnel y el protocolo iniciando un terminal gráfico desde el nodo maestro, a modo de prueba:

$ xterm &

Si contamos con un servidor XWindow en ejecución en nuestro equipo, deberemos ver aparecer el terminal en nuestra pantalla.

2. Creación de un script para el lanzamiento de programas gráficos a los nodos de cómputo.

Un posible script para la ejecución de programas con interfaz gráfica en los nodos de cómputo sería el siguiente, que a modo de ejemplo, carga el entorno gráfico de MATLAB en modo interactivo:

rmatlab.sh:

 #!/bin/bash 
if [ -z DISPLAY ]
then
echo "$DISPLAY variable is empty. This session should be pointing to a remote "
echo "XServer. Ensure SSH session has been initiated with X11Forwarding (-X switch) or "
echo "DISPLAY variable has been manually set. Exiting."
exit 1
fi
module load matlab/2010
qrsh -l h_vmem=8G -V -cwd -pe matlab 4 -j y -b y xterm -e matlab

Explicado línea a línea:

#!/bin/bash

Indica al ejecutor del script que debe utilizar el intérprete de shell bash para la ejecución del script.

 -V

Indica al ejecutor del cluster que debe conservar el contenido actual de las variables de entorno (incluyendo $DISPLAY)

 -l h_vmem=8G

Requiere (y reserva) un máximo de 8Gb para la ejecución del proceso

 -pe matlab 4

Indica la utilización del entorno de ejecución en paralelo de matlab, para que el intéprete pueda sacar provecho de múltiples núcleos.

 -j y

Indica la utilización de un único fichero de salida, tanto para la salida estándar como para la salida de error.

 -cwd

Utiliza el directorio actual como directorio de trabajo para el proceso en el servidor remoto.

 -b y 

Indica que el comando es un binario, y no un script que debe ser interpretado en origen.

xterm -e matlab

Esta es una particularidad de MATLAB, debido a que inicia varias ventanas gráficas, es necesario que se lance a través de un terminal x.

3. Lanzamiento del programa de modo interativo

Para iniciar el programa en modo interactivo, simplemente es necesario:

$ ./rmatlab.sh