HOWTO - Iniciar sesión gráfica en un equipo con Kubuntu de forma remota desde un equipo con MS Windows, usando XDMCP.

ÍNDICE


PREAMBULO

La mayoría de las distribuciones cuentan con la capacidad para permitir conexiones remotas desde otros equipos clientes, con el propósito de administrar el equipo o hacer uso de sus recursos. Es conocido el uso de los protocolos que permiten establecer conexiones usando la línea de comandos (CLI, Command Line Interface).

Cuando se trata de establecer conexiones gráficas entonces surge a la luz el protocolo VNC (Virtual Network Computing), uno de los más utilizados para este fin. Sin embargo existe otro protocolo que tienes sus orígenes un poco más atrás: XDMCP (X Display Manager Control Protocol). Este documento pretende dar una breve explicación sobre cómo habilitar dicho servicio en un equipo que provea el servicio, y cómo usar una aplicación desde otro que funcione como cliente.

Para fines didácticos al momento de la redacción se ha usado un equipo con Kubuntu 8.04 (Hardy Heron) con KDE 3.5 el cual será el servidor. Como clientes se han usado: un equipo con MS Windows XP Professional 2002 con Service Pack 2, un equipo con Kubuntu 8.04 y KDE 3.5, y un equipo con Debian 4.06r .

El lector puede usar el editor de texto de su preferencia para los cambios que a continuación se mencionan, y debe ser consciente de realizar copias de seguridad de los archivos a modificar, antes de realizar dichos cambios. Las modificaciones requieren privilegios de superuser o root.


ADVERTENCIA

Este procedimiento habilita un equipo para permitir conexiones remotas que no están encriptadas, por lo que los datos que viajen a través de dichas conexiones son vulnerables a herramientas que monitorizan e interceptan tráfico de red. Si se desea es posible usar servicios adicionales que permitan la encriptación de dichas conexiones, por ejemplo SSH tunneling. Las modificaciones hechas a los archivos que se mencionen sólo se habilitan, no se restringen, por lo que se recomienda el uso de un cortafuegos que administre las peticiones entrantes y salientes mediante reglas configuradas por el usuario.


INTRODUCCION

En sus inicios los sistemas basados en UNIX permitían acceso únicamente a través de la línea de comandos, usando Telnet, SSH (Secure Shell), FTP (File Transfer Protocol), SCP (Secure CoPy), por ejemplo.

Posteriormente se implementó el servicio X Window System, llamado por simple comodidad: X. En un principio X es una aplicación más del sistema, y si el entorno gráfico se vuelve inestable o disfuncional simplemente se reinicia el servidor X y con él todas las aplicaciones gráficas que dependían de él. El resto del sistema continúa operativo desde la línea de comandos, por lo tanto es posible reiniciar el servidor X y el entorno gráfico sin la necesidad de reiniciar completamente el equipo.

Junto con el servidor X entran en funcionamiento los manejadores de pantalla(Display Managers) los cuales tienen como propósito vestir y controlar los límites de las aplicaciones gráficas que se ejecuten mediante el dibujado de bordes y decoraciones diversas. Ejemplos de manejadores de pantalla muy conocidos son GDM (Gnome Display Manager) y KDM (KDE Display Manager) los cuales son implementaciones del XDM (X Display Manager) original.

X Window System usa una arquitectura tipo cliente/servidor, y es un estándar abierto que hace uso extenso de conexiones de red usando el protocolo TCP/IP para proporcionar un ambiente gráfico a equipos clientes. De ahí el surgimiento de XDMCP, que significa X Display Manager Control Protocol. Este protocolo se encarga de controlar el envío y recepción de paquetes en la red, con la información del ambiente gráfico.

Adicionalmente se cuenta con aplicaciones más avanzadas que integran todo un conjunto de herramientas adicionales para que exista uniformidad en el entorno gráfico. Dichas aplicaciones son conocidas como entornos de escritorio (Desktop Environments). Gnome, KDE, Enlightenment, XFCE y Fluxbox son ejemplos de entornos de escritorio.

Por lo que en resumen: el sistema operativo inicia en modo de texto, posteriormente (y de manera opcional) inicia el servidor X, luego entonces un manejador de pantalla como puede ser KDM, y al final un entorno de escritorio, como puede ser KDE.


EL PROBLEMA

La necesidad de compartir con otros usuarios los recursos de hardware y software, y la necesidad de acceder los datos propios cuando uno mismo se encuentra retirado del equipo, han llevado al desarrollo de técnicas y herramientas que permiten cubrir dichas necesidades. En este caso el problema planteado es: se tiene un equipo con un sistema Linux, al cual es necesario acceder gráficamente desde otro equipo que cuenta con un sistema operativo igual ó diferente.


LA SOLUCION

Aunque una opción es el uso de VNC, se ha comprobado que en ocasiones se obtiene un mejor rendimiento al usar el servicio XDMCP, el cual de manera predeterminada no está activado. VNC invoca todo el escritorio, mientras que XDMCP, aparte de mostrar todo el escritorio, es capaz de invocar sólo aplicaciones específicas. Esto es útil cuando se necesita usar sólo una aplicación gráfica del equipo remoto, y no todo el entorno gráfico. XDMCP permite iniciar varias sesiones gráficas al mismo tiempo, sirviendo a varios usuarios, trabajando un equipo como servidor gráfico y los otros equipos como terminales. Otra diferencia y ventaja es que todo el procesamiento gráfico se realiza en el equipo cliente y no en el servidor.

Quienes hayan trabajado con servidores MS Windows Server 2003 y clientes MS Windows NT/2000/XP/Vista quizás hayan usado algo similar pero no igual, de nombre Terminal Server (Microsoft Terminal Server Client / Remote Desktop Protocol).


CONFIGURAR EL EQUIPO SERVIDOR (Kubuntu 8.04)

abrir el siguiente archivo:

/etc/kde3/kdm/kdmrc

a) buscar la sección:

[Xdmcp]

b) buscar la línea que dice:

Enable=false

y cambiarla a:

Enable=true

c) buscar la línea que dice:

# Xaccess=/etc/kde3/kdm/Xaccess

y eliminar el signo # de esa línea, quedando así:

Xaccess=/etc/kde3/kdm/Xaccess

d) buscar la línea que dice:

# Willing=/etc/kde3/kdm/Xwilling

y eliminar el signo # de esa línea, quedando así:

Willing=/etc/kde3/kdm/Xwilling

e) cerrar el archivo guardando los cambios.


abrir el siguiente archivo:

/etc/kde3/kdm/Xaccess

a) escribir la siguiente línea al principio del archivo, para que XDMCP acepte conexiones por IPv4 también, y no sólamente por IPv6:

LISTEN 0.0.0.0

b) buscar la línea que dice:

#*                                  # any host can get a login window

y eliminar el primer signo #, quedando así:

*                                   # any host can get a login window

c) buscar la línea que dice:

#*         CHOOSER BROADCAST        # any indirect host can get a chooser

y eliminar el primer signo #, quedando así:

*          CHOOSER BROADCAST        # any indirect host can get a chooser

d) cerrar el archivo guardando los cambios

Una vez realizadas las modificaciones anteriores es necesario reiniciar el equipo para la aplicación de los cambios. Si no se desea reiniciar el equipo (en caso de ser un servidor) deben entonces cerrarse todas las sesiones gráficas abiertas, y volver a la pantalla de inicio (KDM), ahí se selecciona del menú de sistema la opción "Reiniciar servidor X" (Restart X Server), o simplemente presionar la combinación de teclas CTRL + ALT + BACKSPACE.

Existen otras opciones que pueden realizarse desde una terminal. El equipo no reiniciará por completo, pero sí todo el entorno gráfico, por lo tanto es necesario cerrar todas las aplicaciones gráficas, y guardar todos los documentos de usuario que estén abiertos, ya que los siguiente comandos directamente reinician el entorno gráfico sin ningún aviso:

sudo /etc/init.d/kdm restart

o en su defecto este otro comando:

sudo killall -s HUP kdm

Posteriormente, tras iniciar una sesión gráfica o en TTY se debe verificar que el servicio XDMCP ya está "escuchando" (listening) y esperando conexiones remotas. Para verificar se ejecuta el siguiente comando:

netstat -l | grep xdmcp

el cual devolverá la siguiente línea:

udp        0      0 [::]:xdmcp              [::]:*


INICIAR SESION DESDE UN CLIENTE MS WINDOWS

Para acceder al equipo servidor desde un equipo cliente con MS Windows se puede usar una aplicación llamada Xming, la cual instala un servidor X en MS Windows, de esta manera las aplicaciones gráficas del equipo servidor viajarán a través de la red para visualizarse en el servidor X instalado en el equipo cliente MS Windows.

páginas oficiales:
http://sourceforge.net/projects/xming
http://www.straightrunning.com/XmingNotes/

enlace para descargar Xming para MS Windows:
http://sourceforge.net/project/showfiles.php?group_id=156984&package_id=...

Se recomienda usar la opción de instalación completa (Full). Una vez que Xming ha sido instalado se habrán creado distintos accesos directos:

Xming, accesos directos

Se inicia la aplicación mediante el acceso directo XLaunch, y se selecciona la opción One window:

One window

En el siguiente paso se selecciona Open session via XDMCP:

Open XDMCP session

En el siguiente paso se selecciona Connect to host y se introduce la dirección IP o el nombre del equipo servidor, que ya se configuró previamente:

Connect to host

En el siguiente paso se activa la opción para que el contenido del portapapeles esté sincronizado en ambos equipos:

Clipboard

En el siguiente paso existe un botón que permite -si se desea- salvar la configuración en un perfil. Se pulsa el botón Finalizar:

Save, Finalizar

Y unos segundos más tarde, dentro de una ventana de MS Windows, se hace visible el Display Manager (en este caso KDM) mostrando el inicio de sesión:

KDM session

En la bandeja del sistema de MS Windows se mostrará un pequeño icono de Xming (la X negra con naranja), el cual desaparecerá al finalizar la conexión:

Xming system tray icon


INICIAR SESION DESDE UN CLIENTE GNU/LINUX

Iniciar sesión desde un equipo cliente con Linux es mucho más sencillo, pues en la pantalla de bienvenida sólo se debe hacer clic en el menú correspondiente y seleccionar la opción para iniciar sesión remota (Remote login):

Remote login 1

Posteriormente se introduce la dirección IP o el nombre del equipo:

Remote login 2


USANDO SSH (Secure SHell)

Anteriormente se indicó que el protocolo XDMCP envía todos los datos sin encriptar, por lo que se considera una conexión insegura, y apta sólo para redes locales (LAN) en donde las conexiones son más limitadas o controladas. Pero si el equipo servidor cuenta con el servicio SSH instalado, entonces es posible realizar conexiones seguras incluso en redes extensas (WAN), que permitan usar Xming de tal manera que sólo muestre una sóla aplicación, en vez de todo el escritorio. Si SSH no está instalado en el servidor entonces:

sudo aptitude install openssh-server

Posteriormente desde el equipo cliente con MS Windows se ejecuta XLaunch y se selecciona la opción Multiple windows:

Multiple windows

En el siguiente paso se selecciona la opción Start a program:

Start a program

En el siguiente paso se indica el nombre del programa que reside en el servidor (en el ejemplo se usará konqueror), se selecciona Run remote, Using PuTTY (plink.exe), se indica la dirección IP o nombre del equipo remoto, el usuario y la contraseña:

plink

En el siguiente paso se activa la opción para que el contenido del portapapeles esté sincronizado en ambos equipos:

Clipboard

En el siguiente paso existe un botón que permite -si se desea- salvar la configuración en un perfil. Se pulsa el botón Finalizar:

Save, Finalizar

Unos segundos más tarde se mostrará un mensaje de advertencia de PuTTY. Este tipo de mensaje siempre aparece cuando se realiza una conexión SSH. Si uno conoce y confía en el equipo remoto entonces se selecciona el botón Yes (no volverá a aparecer el mensaje), si se confía en el equipo remoto pero no se desea conservar ningún registro de ese servidor entonces se selecciona No (la próxima vez volverá a aparecer el mensaje), si no se confía en el equipo y no se desea realizar la conexión se selecciona Cancel. En este caso se selecciona Yes:

Security alert

Y unos segundos más tarde (el tiempo depende de las caraterísticas de la red y de los equipos) se mostrará el programa que se haya deseado (en el ejemplo es Konqueror):

Konqueror en Windows XP


SEGURIDAD

Hay otros puntos que no se han tomado en consideración, y son: la configuración se ha abierto completamente, sin ninguna delimitación sobre qué equipos remotos (los rangos de direcciones IP) y qué usuarios del servidor pueden o no pueden conectarse. Tampoco se ha tocado el tema de configuración de cortafuegos, sin embargo la siguiente información puede ser útil para configuraciones más restrictivas:

El servidor escucha conexiones usando el puerto 177 (UDP). Los equipos clientes MS Windows con Xming se conectan desde el puerto puerto 6000 (TCP) desde Windows. Hay más información al respecto en los enlaces citados al final de este documento.


SUGERENCIAS Y TRUCOS

Es posible copiar/pegar en una memoria USB toda la carpeta de Xming después de que fue instalado (C:\Archivos de programa\Xming\), y así se podrá Xming desde cualquier equipo MS Windows al que se vaya sin necesidad de instalar nada.

Es posible cambiar entre usuarios, por ejemplo, el usuarioA en Kubuntu puede iniciar su sesión localmente y bloquearla, posteriormente el usuarioB en Kubuntu puede iniciar una sesión remotamente hacia otro equipo GNU/Linux que tenga habilitado XDMCP.

Otro ejemplo es: un usuario inicia sesión localmente en el equipo Kubuntu y posteriormente desea establecer otra conexión hacia un servidor XDMCP, pero sin bloquear su sesión propia, sino creando la nueva conexión dentro de una ventana. Para ello es posible usar la aplicación Terminal Server Client y el paquete xnest, instalándolos primeramente con el comando siguiente:

sudo aptitude install tsclient xnest

Posteriormente se ejecuta Terminal Server Client (estará en la categoría Internet), se introduce la dirección IP del equipo remoto y se indica que el protocolo a usar es XDMCP:

Terminal Server Client


COMENTARIOS FINALES

Las distribuciones y sus características cambian con el correr del tiempo, por lo tanto algunas aspectos de este documento cambiarán con el paso del tiempo, mientras que otros pueden permanecer válidos.

Si el equipo servidor usa GNOME en vez de KDE entonces los archivos de configuración a modificar deben ser los correspondientes a GDM (GNOME Display Manager).


MAS INFORMACION EN WIKIPEDIA

GDM: http://es.wikipedia.org/wiki/GNOME_Display_Manager
KDM: http://es.wikipedia.org/wiki/KDE_Display_Manager
Kubuntu: http://es.wikipedia.org/wiki/Kubuntu
Microsoft Windows XP: http://es.wikipedia.org/wiki/Windows_XP
SSH: http://es.wikipedia.org/wiki/SSH
TCP/IP: http://es.wikipedia.org/wiki/TCP/IP
Telnet: http://es.wikipedia.org/wiki/Telnet
VNC: http://es.wikipedia.org/wiki/VNC
X Window System: http://es.wikipedia.org/wiki/X_Window_System


OTRAS FUENTES

FAQs: http://www.faqs.org/docs-Linux-HOWTO/XDMCP-HOWTO.html
Locutus: http://it.toolbox.com/blogs/locutus/linux-login-with-a-windows-box-and-x...
Peter's Blog: http://www.petersblog.org/node/1662
XDMCP en Ubuntu (Gnome): http://tboxmy.blogspot.com/2008/03/creating-xdmcp-server.html