# X Display Manager

En el X Window System, un X Display Manager (XDM) o gestor de pantalla X es un gestor de sesiones gráfico que permite comenzar una sesión sobre un servidor X desde la misma u otra computadora. Un gestor de pantalla presenta al usuario con una pantalla de login que solicita el nombre de usuario y su contraseña. Una sesión comienza cuando el usuario entra con éxito una combinación válida de nombre de usuario y contraseña.
Cuando el gestor de pantalla corre en la computadora del usuario, inicia el servidor X antes de presentar al usuario la pantalla de login, opcionalmente repitiendo esto cuando el usuario cierra la sesión. En esta condición, el gestor de pantalla realiza en el X Window System la funcionalidad del init, getty y autentifica al usuario en el terminal en modo de caracteres. Cuando el gestor de pantalla corre en una computadora remota, actúa como un servidor de telnet, solicitando el nombre de usuario y la contraseña y comenzando una sesión remota.
Piense en XDM como proveedor de la misma funcionalidad que la utilidad getty(8). Esto quiere decir que se encarga de los ingresos del sistema en la pantalla a la que está conectado y arranca el gestor de sesiones para el usuario (normalmente un gestor de ventanas X). XDM entonces espera a que este programa termine, señalando que el usuario ha terminado y que se debería desconectar de la pantalla. En este punto XDM puede mostrar las pantallas de entrada al sistema y de selección de pantalla para que el siguiente usuario intente acceder al sistema.
Esto es útil para diferentes situaciones tales como "Terminales X" con escritorios mínimos y grandes servidores de red (LTSP, cliente liviano). Como X Window System es independiente del protocolo y de la red hay muchas posibles configuraciones para ejecutar clientes y servidores X en diferentes equipos conectados a una red. XDM da una interfaz gráfica para elegir a qué pantalla se quiere conectar y solicitar la información de autenticación, como el nombre de usuario y le contraseña.
También es útil para múltiples usuarios trabajando con un mismo computador (configuración multiseat), en donde cada usuario tiene su propio pantalla, teclado y ratón, y comparten los recursos del computador, como el CPU, la tarjeta madre, la memoria RAM, el disco duro, etc., abaratando significativamente los costos.

## Historia

X11 Release 3 introdujo el gestor de pantalla de X Window (XDM) en octubre de 1988, dirigido a soportar los equipos de terminales X que por entonces apenas comenzaban a entrar en el mercado. Esta versión sufrió de varios problemas, el más notable es que no podía detectar cuando los usuarios apagaban y encendían los terminales X. En esa versión, el XDM solo sabía sobre un terminal X si este figuraba en el archivo Xservers, pero XDM solo consultaba este archivo cuando se iniciaba. Así, cada vez que un usuario encendía y apagaba un terminal, el administrador de sistema tenía que enviar una señal SIGHUP a XDM para que releyese el archivo Xservers.
La introducción de X11R4 en diciembre de 1989 para corregir problemas en la implementación de X11R3 trajo consigo el protocolo XDMCP. Con XDMCP, el servidor X debe solicitar activamente una conexión de gestor de pantalla al anfitrión. Por lo tanto, un servidor X usando XDMCP ya no necesita una entrada en Xservers.

## Gestión de pantalla local y remota

Un gestor de pantalla puede correr en la misma computadora donde el usuario está sentado o en otro computador remotamente. En el primer caso, el gestor de pantalla inicia uno o más servidores X, exhibiendo la pantalla de login al principio y (opcionalmente) cada vez que el usuario cierra sesión. En el segundo caso, el gestor de pantalla trabaja según el protocolo XDMCP.
El protocolo XDMCP ordena que el servidor X se inicie autónomamente y se conecte con el gestor de pantalla. En el paradigma del X Window System, el servidor corre en la computadora que proporciona los dispositivos de exhibición (pantalla) y de entrada (teclado y ratón). Un servidor se puede conectar, usando el protocolo XDMCP, a un gestor de pantalla corriendo en otra computadora, solicitando a éste que comience la sesión. En este caso, el servidor X actúa como cliente gráfico de telnet mientras que el gestor de pantalla actúa como un servidor del telnet: los usuarios inician programas de la computadora que corre el gestor de pantalla, mientras que su entrada y salida ocurren en la computadora donde el servidor (y el usuario) se sienta.
Un administrador puede configurar un servidor X corriendo en el computador o el terminal de usuario usado, o para conectarse con un gestor específico de pantalla, o para mostrar una lista de convenientes anfitriones (hosts) corriendo potenciales gestores de pantalla X. Un programa seleccionador de XDMCP (XDMCP Chooser) permite al usuario seleccionar un anfitrión entre los que el terminal puede conectarse:
* una lista predefinida de anfitriones y de sus respectivas direcciones de red;
* una lista de anfitriones (en el subnet local del TCP/IP) que el servidor XDMCP a su vez obtiene por un broadcast de la red
El servidor XDMCP a menudo se presentará en esta lista. Cuando el usuario selecciona un anfitrión de la lista, el servidor X corriendo en la máquina local se conectará con el gestor de pantalla X de la computadora remota seleccionada.

## Protocolo de control del gestor de pantalla X

El protocolo de control del gestor de pantalla X utiliza el puerto UDP 177. Un servidor X solicita que un gestor de pantalla inicie una sesión enviando un paquete Query. Si el gestor de pantalla permite el acceso para ese servidor X, responde enviando un paquete Willing de retorno al servidor X. (El servidor X también puede enviar paquetes de BroadcastQuery o IndirectQuery para iniciar una sesión - este mecanismo para solicitar una sesión es análogo a usar el DHCP para solicitar una dirección IP.)
El gestor de pantalla debe authenticarse en el servidor. Para hacer esto el servidor X envía un paquete Request al gestor de pantalla, que retorna un paquete Accept. Si el paquete Accept contiene la respuesta que el servidor X espera, el gestor de pantalla es autentificado. Producir la respuesta correcta puede requerir al gestor de pantalla tener acceso a una clave secreta, por ejemplo. Si la autentificación tiene éxito, el servidor X envía un paquete Manage para informar al gestor de pantalla. Entonces, el gestor de pantalla muestra la pantalla de login conectándose con el servidor X como cliente regular de X.
Durante la sesión, el servidor puede enviar en intervalos los paquetes KeepAlive al gestor de pantalla. Si el gestor de pantalla no puede responder con un paquete Alive dentro de un cierto tiempo, el servidor X presume que el gestor de pantalla ha cesado su funcionamiento, y puede terminar la conexión.
Un problema con el XDMCP es que, similar al telnet, la autentificación ocurre sin cifrado y si el snooping es posible, dejando al sistema vulnerable al ataque. Es más seguro usar un túnel de ssh para el tráfico de X.

## Funcionamiento de XDM

El daemon XDM se encuentra en /usr/X11R6/bin/xdm. Este programa se puede arrancar en cualquier momento como root y empezará a gestionar la pantalla X en la máquina local. Si se quiere que XDM arranque cada vez que la máquina se encienda puede hacerlo añadiendo una entrada a /etc/ttys. Hay una línea en el fichero /etc/ttys por defecto para arrancar el dæmon XDM en una terminal virtual:
Por defecto esta entrada está deshabilitada; para habilitarla cambie el campo 5 de off a on. El primer campo es el nombre de la terminal que este programa gestionará: ttyv8. Esto significa que XDM empezará a ejecutarse en la terminal virtual número 9.

## Configuración de XDM

El directorio de configuración de XDM esta en /usr/X11R6/lib/X11/xdm. En este directorio hay varios ficheros usados para cambiar el comportamiento y la apariencia de XDM. Normalmente encontrará estos ficheros:
| Xaccess | Reglas de acceso para clientes. |
| Xresources | Recursos de X por defecto. |
| Xservers | Lista de pantallas locales y remotas a gestionar. |
| Xsession | “script” por defecto para el acceso al sistema. |
| Xsetup_* | “script” para lanzar aplicaciones antes del acceso al sistema. |
| xdm-config | Configuración de todas las pantallas de este equipo. |
| xdm-errors | Errores generados por el programa servidor. |
| xdm-pid | El ID de proceso del XDM que está funcionando. |
En este directorio también hay unos cuantos programas y “scripts” usados para arrancar el escritorio cuando XDM se está ejecutando. La sintaxis exacta y el uso de todos estos ficheros se describe en xdm(1).
| Fichero | Descripción |
| Xaccess | El protocolo para conectar con las pantallas controlada por XDM se llama X Display Manager Connection Protocol (XDMCP). Este fichero es un conjunto de reglas para controlar las conexiones XDMCP desde otros equipos. Por defecto permite a cualquier cliente conectar pero eso no importa a menos que xdm-config se cambie para escuchar conexiones remotas. |
| Xresources | Este es el fichero de opciones por defecto para el selector de pantalla y acceso al sistema. Aquí es donde se puede modificar la apariencia del programa de “login”. El formato es idéntico al fichero de opciones por defecto descrito en la documentación de X11. |
| Xsetup_* | Estos se arrancarán automáticamente antes de que se muestre la interfaz de selección o de acceso al sistema. Hay un “script” por cada gestor de ventanas disponible llamados Xsetup_ seguido por el número de pantalla local (por ejemplo Xsetup_0). Normalmente estos “scripts” arrancan uno o dos programas en segundo plano, por ejemplo xconsole. |
| xdm-config | Este fichero contiene las opciones por defecto aplicables a todas las pantallas que gestiona esta instalación. |
| xdm-errors | Este fichero contiene la salida de los servidores X que XDM intente arrancar. Si alguna pantalla que XDM intente arrancar se cuelga por alguna razón este es un buen sitio para buscar los mensajes de error. Estos mensajes también se escriben en el fichero ~/.xsession-errors del usuario en cada sesión. |

## Implementaciones

El X Window System suplen al XDM como su gestor de pantalla estándar.
Los programadores han desarrollado a otros gestores de pantalla X, tanto comerciales como libres, ofreciendo funcionalidad adicional sobre la gestión de pantalla básica:
* GDM (GNOME)
* SDDM, el sucesor de KDM, escrito en C++11 y personalizable mediante QML
* LightDM un gestor de pantalla ligero, modular y personalizable
* KDM (proporcionado por KDE) permite que el usuario seleccione un X window manager o entorno de escritorio en la pantalla de login
* scologin (proporcionado por SSO Open Desktop) también comprueba para saber si expiraron las contraseñas y realiza algunas tareas administrativas
* XDM, el gestor de pantalla del X Window System
* Multiseat Display Manager, un gestor de pantalla Multiseat
* dtlogin (enviado con el CDE)
* WINGs Display Manager (usando las WINGs widget-set usado en Window Maker)
* Entrance (emplea la arquitectura usada en Enlightenment v.17)
* SLiM, un gestor de pantalla independiente
* Enter un gestor de pantalla liviano
* Orthos otra solución liviana muy configurable
* xlogin display manager, un gestor de pantalla ligero y seguro para la consola. Escrito en C.
En la mayoría de las distribuciones Linux, el gestor de pantalla por defecto es seleccionado en el archivo /etc/X11/default-display-manager