El poder de las Xs. Sesiones remotas con X Window

per Victor Carceler darrera modificació 2020-04-02T12:53:51+02:00

X Window Logo

Después de la charla de los clientes ligeros, y ante la posibilidad de montarme un barebone para la multimedia doméstica (con MythTV), me he decidido a comprobar el estado del arte de la tecnología para abrir sesiones gráficas contra máquinas remotas.

Intro:

La idea de ejecutar un programa en una máquina y tener su interfaz en otra es muy vieja. De hecho, la arquitectura cliente/servidor se basa precisamente en esta forma de trabajar. Hay diferentes maneras de utilizar un ordenador para ver la interfaz gráfica (el escritorio, o al menos la aplicación que se ejecuta) de otro ordenador. Ahí va una lista no exhaustiva de algunos métodos:

X Window

La interfaz gráfica nativa de Unix/Linux siempre ha tenido en cuenta la red. Existen implementaciones de servidores X para otros sistemas operativos: Windows, MacOSX, etc...

VNC (Virtual Network Computing)

Es un protocolo desarrollado por AT&T que permite ver o controlar un escritorio remoto.

Entre sus virtudes destacan:

  1. Protocolo abierto, existen herramientas libres (GPL).
  2. Multiplataforma. Existen servidores (para exportar un escritorio, vncserver) y visualizadores (para ver un escritorio remoto, vncviewer) para GNU/Linux, Windows y otros sistemas operativos.
  3. El protocolo es sencillo. Así que es fácil de implementar, hay versiones para PDAs e incluso hay un Applets de Java que desde cualquier navegador nos permiten ver/controlar el escritorio remoto
  4. Se supone que el protocolo es ligero y permite ver/controlar escritorios remotos incluso con bajos anchos de banda, aunque mis pruebas (nada exhaustivas) con TightVNC me han llevado a pensar que la comunicación con las Xs es más fluida.
RDP (Remote Desktop Protocol)
La 'alternativa' de Microsoft. Para administrar de manera remota una máquina Windows, se puede realizar una conexión mediante Terminal Server. Terminal Server utiliza el protocolo RDP. Si se quiere conectar con un Terminal Server desde GNU/Linux se puede utilizar RDesktop.

Otros productos relacionados pueden ser Tarantella y Citrix, el ordenador es la red... o el ordenador es el navegador ?

Sobre X Window

Citando a la Wikipedia:

El sistema X Window (Window, sin la 's' final) fue desarrollado a mediados de los años 80 en el MIT para dotar de una interfaz gráfica a los sistemas Unix. Este protocolo permite la interacción gráfica en red entre un usuario y una o más computadoras haciendo transparente la red para éste. Generalmente se refiere a la versión 11 de este protocolo, X11, el que está en uso actualmente.

X es el encargado de visualizar la información gráfica y es totalmente independiente del sistema operativo. El sistema X Window distribuye el procesamiento de aplicaciones especificando enlaces cliente-servidor. El servidor provee servicios para acceder a la pantalla, teclado y ratón, mientras que los clientes son la aplicaciones que utilizan estos recursos para interacción con el usuario. De este modo mientras el servidor se ejecuta de manera local, las aplicaciones pueden ejecutarse remotamente desde otras máquinas, proporcionando así el concepto de transparencia de red.

Así que desde sus origenes, X Window fué pensado para utilizar una arquitectura cliente/servidor en la que en nuestra máquina se representan ventanas/aplicaciones/escritorios que pueden estar en cualquier otra máquina. Realmente X Window es una pieza de ingenieria muy elegante. Es tremenendamente flexible y potente.

La máquina en la que se representan las ventanas (y en la que se utiliza el teclado y el ratón para comunicarse con las aplicaciones) ha de ejecutar un servidor X. En dicho servidor X, se pueden representar simultáneamente ventanas que corresponden a aplicaciones que corren en distintas máquinas. Además es posible ejecutar varios servidores X en la misma máquina de manera simultánea.

La comunicación entre la máquina en la que se ejecuta la aplicación (que actúa como cliente del servidor X) y el servidor X, se realiza mediante el protocolo XDMCP (X Display Manager Control Protocol). El protocolo transmite instrucciones para dibujar las ventanas, los controles que contienen y la interacción del usuario.

Hay que tener en cuenta que el protocolo XDMCP no transmite los datos cifrados. De modo que si se utiliza una red en la que no se confía, debe asegurarse la tranmisión mediante SSH o bien con una VPN (por ejemplo con OpenVPN).

Situación común en un ordenador GNU/Linux

Suponiendo que tenemos un ordenador doméstico con GNU/Linux. Probablemente nos encontremos con que al arrancarlo se inicia el servidor X (al entrar en el nivel de ejecución 5). Normalmente al arrancar, el ordenador presenta un login gráfico en el que el usuario puede identificarse mediante un nombre de usuario y contraseña.

A este programa que da la bienvenida al sistema, se le llama greeter. En la arquitectura X Window tradicional se utilizaba el programa xdm (X Display Manager), pero en las modernas distribuciones de GNU/Linux, normalmente se utiliza el programa kdm (en el caso de KDE) y/o gdm (en el caso de Gnome).

La función básica del greeter es dar la bienvenida al sistema (normalmente indica el nombre de la máquina y la hora), recibir el par usuario/contraseña y validarlos. Si se trata de un par válido entonces carga el escritorio de trabajo de dicho usuario. Además puede ser que el greeter nos permita apagar o reiniciar la máquina.

Ejecutando aplicaciones en máquinas remotas:

Tenemos dos opciones muy sencillas:

  1. Ver el escritorio local, y la aplicación remota:

    Si nos identificamos con nuestro login/password en local, la máquina carga nuestro escritorio (KDE, Gnome u otros) y nos permite lanzar aplicaciones, por ejemplo el OpenOffice. Así el OpenOffice se ejecuta en nuestra máquina (consumiendo memoria y cpu) y se conecta al servidor X local para dibujar sus ventanas y recibir la entrada del usuario mediante el teclado/ratón.

    Si nuestra máquina es lenta, talvez pueda ejecutar el servidor X, pero no pueda lanzar OpenOffice, Eclipse o cualquier otra aplicación que igual ni siquiera está instalada localmente. En ese caso podemos conectarnos con otra máquina mediante SSH

    ssh usuario@maquina

    Y lanzar la aplicación en la máquina remota:

    [usuario@maquina usuario]$ eclipse &

    Con lo que se carga la aplicación (eclipse) en la máquina remota (maquina) y se abren sus ventanas en nuestro servidor X, verbigracia de una característica de SSH llamada X Forwarding y de la variable de entorno DISPLAY. La variable de entorno DISPLAY se utiliza para indicar a las aplicaciones en qué máquina han de abrir sus ventanas. Puede ser que en la máquina que se ejecuta el servidor X haya que dar permiso para que otra máquina pueda abrir aquí sus ventanas, esto lo haríamos con el comando xhost.

  2. Utilizar el Greeter (login gráfico) para iniciar sesión en otra máquina:

    Se puede utilizar xdm (o kdm o gdm) para iniciar sesión en una máquina remota y ver todo el escritorio de la otra máquina.

    Como ejemplo supondremos que se está utilizando KDE y por tanto kdm en dos máquinas (A y B) con Mandrake. La máquina A tendrá instaladas varias aplicaciones y tendrá definidos varios usuarios. Cualquiera de los usuarios podrá acceder a su escritorio en A desde la máquina B utilizandola como X Terminal.

    Suponiendo que las dos máquinas tienen instalado Mandrake, que el entorno gráfico está bien configurado y la red también. Lo primero que hay que hacer es preparar la máquina A para que admita conexiones remotas. Pare ello modificaremos el fichero de configuración /usr/share/config/kdm/kdmrc de la siguiente manera:

    1. En la sección [Xdmcp] nos aseguraremos de tener:

      Enable=true
      Port=177

      Así indicamos que se aceptarán conexiones remotas y que se utilizará el puerto 177 UDP que marca el estándard.

    2. Comprobar el estado de la línea

      # Who is allowed to shut down the system. This applies both to the
      # greeter and to the command FiFo. Default is All
      # "None" - no "Shutdown..." button is shown at all
      # "Root" - the root password must be entered to shut down
      # "All" - everybody can shut down the machine (Default)
      AllowShutdown=All

      Si no queremos que desde las sesiones remotas nos puedan apagar la máquina (A), pondremos None.

    3. Después de guardar los cambios, sólo nos queda reiniciar las Xs en la máquina A haciendo:

      /etc/init.d/dm restart

Una vez que hemos configurado debidamente A, ya podemos intentar conectar desde B. Para ello no hay más que desactivar las X en B para pasar a invocar directamente a kdm

/etc/init.d/dm stop
kdm

Al arrancar kdm permite hacer un login local (esto es en B) o bien, nos fijamos que nos muestra una opción para hacer un login remoto (en A). Al indicar que se trata de un login remoto, si A y B están en la misma red, automáticamente nos aparecerán los datos de A. Si no fuese así, deberiamos indicar su dirección IP o bien el nombre DNS. Al conectar con A, nos saldrá el login gráfico de esta máquina y nos podremos identificar como un usuario de dicha máquina para pasar a utilizar nuestro escritorio.

Conclusiones

El entorno X Window es realmente potente y flexible y vale la pena dedicar algún tiempo a estudiarlo. Hay que tener en cuenta que cuando no se utiliza SSH, es decir en el segundo caso aquí expuesto, toda la comunicación (representación de las ventanas e interacción del usuario) se realiza sin cifrar. Así que es muy importante asegurarse de que no se utiliza en redes que no sean confiables. Si se quieres utilizar en Internet on en una WLAN entonces hay que proporcionar seguridad extra, por ejemplo con OpenVPN.

Si quieres probar otra opción diferente, VNC también es muy potente y es muy sencillo de utilizar. Pero VNC se merece otro artículo para el sólo, así que de momento esto se acaba aquí.