Ir al Hogar Ver Índice Buscar Enlaces Acerca de nosotros
[LinuxFocus Image]
[Navegation Bar]
  Noticias   Archivos   Compañías   Consejos 

El Gestor de Pantalla X (XDM)

por Joel McCarty


Introducci�n

�Porqu� utilizar XDM?

Configuraci�n

Ejecutando XDM

Conclusi�n

Introducci�n

El objeto de este art�culo es la instalaci�n y uso del gestor de pantalla X (X Display Manager). El gestor de pantallas se ejecuta como un demonio en una m�quina y gestiona m�ltiples pantallas X (tanto remotas como locales) ofreciendo una gesti�n b�sica al usuario de forma an�loga a como lo hacen init(8), getty(1) y login(1) sobre terminales de texto. Tambi�n ofrece utilidades para limpiar las pantallas sobre las que ya no hay un servidor X ejecut�ndose. Una de las caracter�sticas m�s valiosas del xdm es su habilidad para generar informaci�n de autorizaci�n que puede ser utilizada por el servidor X para controlar el acceso al nivel de m�quina y usuario. Gracias a su capacidad para relanzar sesiones X utilizando t�cnicas est�ndar de autentificaci�n, xdm es ideal en lugares donde una m�quina es compartida por m�ltiples usuarios ejecutando sesiones X individuales y personalizadas.

Contenidos

Aunque aqu� s�lo trataremos el tema de la autorizaci�n (seguridad) bajo xdm, la seguridad en X Window es en s� mismo un tema de inter�s y ser� tratado con mayor profundidad en el pr�ximo n�mero. Si s�lo estas interesado en ejecutar xdm sobre una m�quina aislada puedes saltarte la secci�n XDMCP ya que probablemente tienes un setup perfectamente pulido y f�cil de instalar con tu distribuci�n de Linux. Si este es el caso, seguramente puedes pasar las secciones de personalizaci�n y de puesta en marcha del XDM pues el resto del art�culo trata principalmente con entornos de red e interacci�n con terminales X. Tambi�n, si est�s buscando un libro de la A a la Z sobre instalaci�n de terminales X, te sugiero el libro "The X Window System Administrators Guide" de O' Reilly & Associates, pues aborda detalles de administraci�n de terminales X que est�n m�s all� del �mbito de este art�culo.

Gesti�n de sesiones bajo X

En una conexi�n tradicional una sesi�n es un shell de login, bajo xdm una sesi�n se controla por un gestor de sesi�n arbitrario; porque en un entorno de ventanas un shell de login de usuario no tiene necesariamente un programa al estilo terminal con el que conectarse. Para la gesti�n de sesiones en el entorno de ventanas X nosotros utilizamos el gestor de ventanas (window manager) como "gestor de sesiones" y cuando el proceso gestor de ventanas termina, tambi�n lo hace la sesi�n del usuario.

XDM, conceptos b�sicos

xdm es un Xclient que gestiona la entrada y salida de una conexi�n, controla y coordina la sesi�n un usuario. Xdm mantiene un registro de qu� servidores X hay disponibles para conectarse leyendo el fichero Xservers y escuchando el puerto XDMCP para gestionar otros servidores que lo pidan. Cuando al xdm se le da la gesti�n de un servidor X env�a una ventana de login a la pantalla del servidor y espera la entrada de alg�n usuario. En cuanto que un usuario introduce su nombre y clave (pasword) son verificados utilizando los mismos mecanismos que una conexi�n est�ndar tty (consola de texto). Luego xdm ejecuta una serie de guiones de shell (shell scripts) que ponen en marcha los Xclients que el usuario prefiere. Ahora est� en marcha una sesi�n X normal, cuando el usuario se desconecte de esta sesi�n, xdm cierra todas las conexiones y devuelve la terminal al estado de espera de conexi�n (login), listo para una nueva sesi�n.

�Porqu� utilizar XDM?

A pesar de las caracter�sticas de seguridad, uso remoto y facilidad, xinit est� considerado obsoleto por el X Consortium (ahora denominado The Open Group) con todas las nuevas funcionalidades que se han a�adido a xdm. Xdm ofrece una forma de configurar todo el entorno del sistema a los administradores. Xdm es tambi�n la �nica forma que conozco de compartir la pantalla de una m�quina entre varios usuarios sin tener que matar y re-ejecutar el servidor X.

Configuraci�n

Xdm se configura mediante ficheros ASCII est�ndar. Sus ficheros globales de configuraci�n se encuentran tradicionalmente en /usr/lib/X11/xdm/etc/xdm mientras que los ficheros locales se encuentran en el directorio de trabajo (home) de cada usuario. De especial importancia es el hecho de que en el fichero xmd-config se puede indicar una localizaci�n diferente para todos los otros ficheros e incluso su propia localizaci�n en el disco puede especificarse expl�citamente cuando se ejecuta xdm utilizando el par�metro -config, por tanto sistemas con una instalaci�n automatizada pueden f�cilmente modificarse para dejar la instalaci�n original tal cual. A continuaci�n hay una peque�a descripci�n de cada fichero junto con un ejemplo comentado (cuando sea apropiado).

Ficheros globales

xdm-config

Este fichero especifica la ubicaci�n de todos los dem�s ficheros de configuraci�n (si est�n situados en otros directorios distintos a los por defecto) y establece los comandos para el setup, arranque, parada y gui�n inicial del xdm. En el ejemplo que sigue se especifica que todos los ficheros adicionales han de ser cargados bajo /etc/X11/xdm de forma que queden los ficheros por defecto de /usr/lib/X11/xdm sin modificar.

DisplayManager.errorLogFile: /var/log/xdm-error.log
DisplayManager.pidFile: /var/run/xdm.pid
DisplayManager.keyFile: /etc/X11/xdm/xdm-keys
DisplayManager.servers: /etc/X11/xdm/Xservers
DisplayManager.accessFile: /etc/X11/xdm/Xaccess
DisplayManager._0.authorize: true
DisplayManager._1.authorize: true
DisplayManager._0.setup: /etc/X11/xdm/Xsetup_0
DisplayManager._0.startup: /etc/X11/xdm/GiveConsole
DisplayManager._0.reset: /etc/X11/xdm/TakeConsole
DisplayManager*resources: /etc/X11/xdm/Xresources
DisplayManager*session: /etc/X11/xdm/Xsession
DisplayManager*authComplain: false

Xservers

Una lista de servidores que pueden ser gestionados por xdm. Por lo menos este fichero deber�a incluir el servidor local. NOTA - este fichero s�lo se vuelve a leer despu�s de terminar una sesi�n o si xdm recibe la se�al SIGHUP. Para enviar la se�al SIGHUP a el xdm debes conocer su n�mero de PID del proceso.

#  ps -a   |  grep  xdm
2639 ?  R 0:09     /usr/bin/X11/xdm
# kill -9 2639
Aqu� puede ver un ejemplo del fichero Xservers utilizado en una m�quina aislada...
# Primera l�nea debe ser el display local.
:0 local /usr/X11R6/bin/X
# :0 Especif�ca consola
# local denota el servidor X est� ejecut�ndose localmente 
# /usr/X11R6/bin/X ejecutable ejecutado al arrancar
# la sintaxis para el terminal X es un poco diferente
# pues ellos ejecutan el servidor X desde otra m�quina
# SOLO pon terminales X si NO soportan XDMCP
eng1:0 foreign NCD xterminal
# eng1 es el nombre de la terminal
# :0 es el display a utilizar en la terminal
# foreign significa que el servidor X est� ejecut�ndose en 
# una m�quina distinta 
# NCD xterminal es la clase display espec�fica de esta terminal
# y no son absolutamente necesarios.

eng2:0 foreign NCD xterminal
eng3:0 foreign Visual xterminal

Xsession

Gui�n inicial de puesta en marcha utilizado por cada sesi�n X.

#!/bin/sh
# la siguiente secci�n habilita la conexi�n segura cuando sea necesario
# utilizando  despu�s del password activa el modo seguro

case $# in
1)
case $1 in
failsafe)
exec xterm -geometry 80x24-0-0
;;
esac
esac
# re-dirigir errores al fichero en el directorio home del usuario 
for errfile in "$HOME/.xsession-errors" "${TMPDIR-/tmp}/xses-$USER"
"/tmp/xses-$USER"
do
if ( cp /dev/null "$errfile" 2> /dev/null )
then
chmod 600 "$errfile"
exec > "$errfile" 2>&1
break
fi
done
# Utiliza los ficheros locales .xsession y .Xresources  si existen
startup=$HOME/.xsession
resources=$HOME/.Xresources
if [ -x "$startup" ]; then
exec "$startup"
elif [ -x "$HOME/.Xclients" ]; then
exec "$HOME/.Xclients"
elif [ -x /etc/X11/xinit/Xclients ]; then
exec /etc/X11/xinit/Xclients
else
if [ -f "$resources" ]; then
xrdb -load "$resources"
fi
exec xsm
fi

Xresources

Define los recursos que se cargar�n v�a xrdb(1) por todos los servidores gestionados por xdm.

# key settings to be used by Xlogin widget 
xlogin*login.translations: #override\
# Ctrl R stops xdm from managing display 
CtrlR: abort-display()\n\
# F1 or Ctrl Return run a failsafe session
# consisting of a single xterm window
F1: set-session-argument(failsafe) finish-field()\n\
CtrlReturn: set-session-argument(failsafe) finish-field()\n\
Return: set-session-argument() finish-field()
# display setings for Xlogin widget to be displayed by xdm
xlogin*borderWidth: 3
xlogin*greeting: CLIENTHOST
xlogin*namePrompt: login:\040
xlogin*fail: Sorry Try Again
#ifdef COLOR
xlogin*greetColor: CadetBlue
xlogin*failColor: red
*Foreground: black
*Background: #fffff0
#else
xlogin*Foreground: black
xlogin*Background: white
#endif
# settings for xconsole client which is used when xdm connection on
# local server is initialized. This keeps console messages sent
between
# logins from going everywhere across the screen
XConsole.text.geometry: 480x130
XConsole.verbose: true
XConsole*iconic: true
XConsole*font: fixed
Chooser*geometry: 700x500+300+200
Chooser*allowShellResize: false
Chooser*viewport.forceBars: true
Chooser*label.font: *-new century schoolbook-bold-i-normal-*-240-*
Chooser*label.label: XDMCP Host Menu from CLIENTHOST
Chooser*list.font: -*-*-medium-r-normal-*-*-230-*-*-c-*-iso8859-1
Chooser*Command.font: *-new century schoolbook-bold-r-normal-*-180-*

xdm-pid

Fichero que contiene el identificador (pid) del proceso xdm (s�lo como informaci�n, no lo edites).

xdm-errors

Fichero de registro (log) de los errores del xdm.

Xaccess

Configura el control de acceso para XDMCP (X11R5 y posteriores). Este fichero s�lo define los permisos de acceso para consultas XDMCP . Este fichero tambi�n permite definir macros para agrupar l�gicamente m�quinas relacionadas. El Control de acceso del servidor se activa utilizando el recurso DisplayManager*authorize en el fichero xdm-config. Para m�s informaci�n sobre configuraci�n de XDMCP y ejemplos ver la secci�n CHOOSER.

GiveConsole

Es un gui�n de shell utilizado para cambiar la propiedad de la consola del usuario. A no ser que tengas muy buenas razones, deja este gui�n y el de takeconsole como est�n por defecto (que son los que se muestran a continuaci�n):

#!/bin/sh
# Assign ownership of the console to the invoking user
# $XConsortium: GiveConsole,v 1.2 93/09/28 14:29:20 gildea Exp $
#
# By convention, both xconsole and xterm -C check that the
# console is owned by the invoking user and is readable before attaching
# the console output. This way a random user can invoke xterm -C without
# causing serious grief.
#
chown $USER /dev/console

TakeConsole

Un gui�n de shell que devuelve la propiedad de la consola a "root" (X11R5 y posteriores). Otra vez, deja este fichero tranquilo.

#!/bin/sh
# Reassign ownership of the console to root, this should disallow
# assignment of console output to any random users's xterm
# $XConsortium: TakeConsole,v 1.2 93/09/28 14:30:29 
#
chmod 622 /dev/console
chown root /dev/console

Xsetup_0

Gui�n shell utilizado para inicializar la pantalla de la consola local (X11R5 o posteriores). Inicializa la xconsole: una terminal en ventana que muestra los mensajes del sistema que se producen entre conexiones (logins).

#!/bin/sh
# $XConsortium: Xsetup_0,v 1.3 93/09/28 14:30:31 
/usr/X11R6/bin/xconsole -geometry 480x130-0-0 -daemon -notify
-verbose -fn fixed -exitOnFail 

Ficheros Locales

~/.xsession

Recursos espec�ficos de cada usuario leidos por el gui�n global Xsesion.

~/.xsession-errors

Fichero de registro para los errores de cada usuario.

~/.Xauthority

Contiene informaci�n de autorizaci�n del usuario.

XDMCP

El X Display Manager Control Protocol (XDMCP) fue primero introducido en la versi�n X11R4 para resolver varios problemas entre xdm y terminales X. Antes del XDMCP la �nica forma que xdm ten�a de conocer qu� servidores hab�a disponibles era leyendo el fichero Xservers. Puesto que el fichero Xservers solo se lee al arrancar xdm, aparec�an problemas cuando terminales X se apagaban y volv�an a enchufar. B�sicamente, cada vez que una terminal X se conectaba (se pon�a en marcha) despu�s de estar apagada, era necesario que el Administrador del sistema forzara xdm a re-leer el fichero Xservers envi�ndole la se�al SIGHUP.

XDMCP permite que los servidores hablen con xdm sin tener �ste un conocimiento expl�cito previo del servidor. Bajo XDMCP, la m�quina escucha peticiones (en cualquiera de los tres diferentes formas de comunicaci�n soportados) en un puerto XDMCP y cuando recibe unas peticiones de gesti�n, crea una copia de �l mismo (spawns) y env�a la pantalla de conexi�n a esa terminal.

Modos de comunicaci�n

XDMCP permite utilizar tres modos de comunicaci�n con servidores pidiendo gesti�n que no aparecen en el fichero Xservers; estos m�todos son: DIRECT, INDIRECT o BROADCAST. En el modo DIRECT un servidor est� haciendo una petici�n no espec�fica de gesti�n a la red. El primer proceso xdm que responda esta petici�n DIRECT se convierte en el gestor del servidor. Una petici�n INDIRECT resulta en que la terminal recibe una ventana con la lista de todas las m�quinas disponibles para conectarse y te permite al usuario elegir qu� m�quina le ofrece la gesti�n. El modo INDIRECT es especialmente �til en un entorno con m�ltiples m�quinas. Para implementar el modelo INDIRECT se necesita utilizar el identificador CHOOSER en el fichero de recursos Xaccess. Otra forma de implementar la elecci�n es utilizando el modo BROADCAST en conjunci�n con el recurso CHOOSER, el cual env�a un mensaje de BROADCAST a todas las m�quinas de la red y permite al usuario elegir entre ellas.

Chooser

Cuando se utilizan terminales X que no ofrecen un men� de m�quinas el arrancar el programa de elecci�n puede ser utilizado junto con los BROADCAST o INDIRECT. Para activar el programa de elecci�n utiliza CHOOSER como primera entrada en la lista de m�quinas indirectas del fichero Xaccess. modos

eng*.odhs.dsd.com CHOOSER BROADCAST

Esto permite que todas las terminales que comiencen por "eng" de odhs.dsd.com utilicen una ventana de selecci�n listando todos las otras m�quinas disponibles. Un escenario probable ser�a aquel en el que todas las terminales del departamento de ingenier�a tuvieran un conjunto de m�quinas a las cuales pueden conectarse, lo cual puede hacerse mejor con el modo INDIRECT.

eng*.odhs.dsd.com CHOOSER dsdapps.odhs.dsd.com dbsrv.odhs.dsd.com
test.odhs.dsd.com

La anterior asignaci�n permitir� a todos los terminales del departamento de ingenier�a acceder a la aplicaci�n, base de datos y testear los servidores v�a un men� de elecci�n. El fichero Xaccess tambi�n te permitir� definir macros para agrupar l�gicamente m�quinas relacionadas. El siguiente ejemplo utiliza estas macros con las asignaciones anteriores.

%ENGHOSTS dsdapps.odhs.dsd.com dbsrv.odhs.dsd.com test.odhs.dsd.com
eng*.odhs.dsd.com CHOOSER %ENGHOSTS

El aspecto del selector (para elegir) puede ser modificado a trav�s del fichero(s) Xresources.

Ejecutando XDM

Para verificar que tu xdm se ejecuta sin necesidad de re-arrancar la m�quina, desde la consola ejecuta:

$  init 5
Esto normalmente lanzar� el sistema al nivel 5. Xdm se ejecuta autom�ticamente cuando el sistema entra en el nivel 5. Si cambiando al nivel 5 no arranca el xdm mira /etc/inittab, en este fichero se especifica en qu� nivel se arranca xdm (las distribuciones de slackware lo arrancan algunas veces en el nivel 4, pero la mayor�a de las distribuciones lo hacen en el nivel 5). Ahora deber�as ver la ventana de xlogin pidiendo un nombre de cuenta y la clave asociada y ser capaz de conectarte y comprobar varias opciones. Si est�s seguro que el sistema est� en el nivel correcto de arranque de xdm pero no responde como deber�a, �chale un vistazo a la secci�n de problemas m�s adelante. En caso contrario, desde este punto puedes jugar con cada una de las opciones (mira la secci�n de presonalizaci�n m�s adelante). Una vez tengas el xdm configurado, puedes modificar /etc/inittab para cambiar el nivel de arranque por defecto. En mi m�quina es tan sencillo como cambiar:

#/etc/inittab
id:3:initdefault:
por
id:5:initdefault: 

Esto inicia a Linux en el nivel de arranque 5 por defecto, que a su vez, autom�ticamente arranca xdm cada vez que el sistema arranca.

Resolviendo problemas

Si xdm no funciona como es de esperar, el primer lugar donde mirar es ~/.xsession-errors. Este fichero local de errores contiene los errores producidos solamente cuando has accedido a tu cuenta y es por tanto m�s espec�fico que los errores del sistema. Abajo, he esbozado algunos de las potenciales pifias y sus potenciales soluciones.

La ventana de conexi�n (login) no aparece en la pantalla

Este es muy probablemente un error en los ficheros de configuraci�n, �Est�s intent�ndolo antes de cambiar el nivel de arranque del sistema?

Puedes conectarte con �xito y la ventana de conexi�n desaparece

Tu fichero .xsesion puede que no sea ejecutable. Intenta conectarte, pero pulsa CTRL-RETURN despu�s de la palabra clave en lugar de Enter. Esto pasar� por alto el gui�n .xsesion y te dar� un terminal simple en una ventana desde la que puedes:

# chmod +x .xsession
e int�ntalo otra vez.

Despu�s de conectarte, la pantalla parpadea y la ventana de conexi�n (login) vuelve a aparecer.

Emplea el m�todo descrito en el escenario anterior para saltarte el fichero .xsesion durante la conexi�n y aseg�rate que el �ltimo comando de .xsesion se ejecuta en segundo plano (background).

Conclusi�n

Espero que este art�culo te haya convencido de la potencia y flexibilidad de X Display Manager. Si lo que buscas es m�s informaci�n sobre xdm por favor mira los enlaces que hay al final. En la siguiente entrega, investigaremos en el, a menudo olvidado, tema de la seguridad en X Window. No dudes en enviarme un mail si tienes dudas o alg�n comentario a [email protected].


Traducido por Ismael Ripoll

Para m�s informaci�n :
© 1998 Miguel Angel Sep�lveda
P�ginas web mantenidas por Miguel A Sep�lveda.