Xsession
Sumario
Enlaces y referencias
Conceptos
Xsession es el nombre de un mecanismo para gestionar una sesión gráfica bajo el sistema X Window. No está diseñado para ser ejecutado directamente por un usuario, sino dentro de un entorno especial asociado con la inicialización de un un servidor X, bien empleando un lanzador (generalmente algo como startx o xinit), bien usando un gestor de acceso como xdm o kdm.
Gestores de acceso
Los gestores de acceso pueden iniciar diferentes sesiones empaquetadas bajo un nombre y en archivos con extensión .desktop. En Debian pueden estar situados en varios sitios:
/usr/share/xsessions
/var/lib/menu-xdg/xsessions
/usr/share/apps/kdm/sessions
Sesiones empaquetadas
Para que un gestor de acceso gráfico pueda poner en marcha diferentes sesiones y gestores de ventanas existe un mecanismo de empaquetado de las mismas en archivos con extensión .desktop
. El formato es el que se recoge en la especificación oficial con alguna diferencia que otra que aún no he conseguido documentar pero que todos los gestores de acceso reconocen.
Un ejemplo funcional de sesión gráfica es el siguiente:
[Desktop Entry]
Encoding=UTF-8
Name=Empresa
Comment=Escritorio de Empresa, S.L. (fluxbox)
Exec=/etc/X11/Xsession
Terminal=False
Type=Xsession
Funcionamiento
Variables y valores
Variable | Valor predeterminado | Uso |
---|---|---|
OPTIONFILE | /etc/X11/Xsession.options | Configuración global de Xsession. |
SYSRESOURCES | /etc/X11/Xresources | Recursos gráficos globales. |
USRRESOURCES | $HOME/.Xresources | Recursos gráficos de usuario. |
SYSSESSIONDIR | /etc/X11/Xsession.d | Archivo raíz donde se almacenan las fases de arranque de la sesión gráfica. |
USERXSESSION | $HOME/.xsession | Programa de usuario para lanzar la sesión gráfica. Si no es ejecutable se emplea un shell para ejecutarlo. |
USERXSESSIONRC | $HOME/.xsessionrc | Definición del entorno de la sesión gráfica. |
ALTUSERXSESSION | $HOME/.Xsession | Nombre alternativo para el programa lanzador de la sessión gráfica. |
ERRFILE | $HOME/.xsession-errors | Archivo al cual enviar la salida estándar de errores de todos los programas que se ejecuten en la sesión X. |
Parámetros globales
Los parámetros están activos si aparecen en el archivo. En caso contrario están todos ellos desactivados.
- allow-failsafe
- Permite que se use el parámetro failsafe para la sesión gráfica en la que no se invoca a ningún gestor de ventanas; únicamente aparece un terminal gráfico (si es posible y existe) en una esquina de la pantalla.
- allow-user-resources
- Permite que se carguen los recursos gráficos del usuario si existe un archivo llamado
$HOME/.Xresources
. - allow-user-xsession
- Permite emplear la sesión gráfica del usuario si dispone de un archivo llamado
$HOME/.xsession
. - use-ssh-agent
- Permite arrancar la sesión gráfica con el programa ssh-agent si éste existe en el sistema.
- use-session-dbus
- Activa el bus de la sessión si el paquete dbus está instalado.
Puesta en marcha
En un sistema Debian Xsession es un programa localizado en /etc/X11/Xsession
que realiza varias operaciones al comenzar.
- Declara un juego de funciones y variables.
- Intenta crear un registro para la sesión X. Aborta si no lo consigue y registra el comienzo de la sesión en caso contrario.
- Verifica que el directorio temporal no esté lleno intentando crear un archivo con algún contenido. Aborta en caso contrario.
- Verifica el directorio
/etc/X11/Xsession.d
. - Ejecuta run-parts sobre él para averiguar qué archivos debe cargar y ejecutar y en qué orden.
En el último punto es importante discernir que los archivos que carga y ejecuta lo son mediante el mecanismo source del shell, por lo que pueden tener acceso a las variables y funciones definidas al comienzo.
Fases de arranque
Cada fase de arranque corresponde con un programa escrito en lenguaje del shell al que se llama script. Existe un puñado de ellos incluídos en la distribución base que bastan para crear la sesión gráfica, aunque si miramos en un sistema ya en funcionamiento podremos ver que hay varios scripts más en el directorio /etc/X11/Xsession.d
ls -al total 60 drwxr-xr-x 2 root root 4096 jul 28 14:45 . drwxr-xr-x 11 root root 4096 jul 27 09:19 .. -rw-r--r-- 1 root root 2024 may 3 2010 20x11-common_process-args -rw-r--r-- 1 root root 878 may 3 2010 30x11-common_xresources -rw-r--r-- 1 root root 187 mar 8 2008 40x11-common_xsessionrc -rw-r--r-- 1 root root 1535 may 3 2010 50x11-common_determine-startup -rw-r--r-- 1 root root 197 may 6 2010 52libcanberra-gtk-module_add-to-gtk-modules -rw-r--r-- 1 root root 697 ene 30 2010 55gnome-session_gnomerc -rw-r--r-- 1 root root 368 dic 21 2010 75dbus_dbus-launch -rw-r--r-- 1 root root 1027 feb 25 2010 90consolekit -rw-r--r-- 1 root root 591 oct 4 2008 90gpg-agent -rw-r--r-- 1 root root 266 oct 7 2010 90unclutter -rw-r--r-- 1 root root 629 may 3 2010 90x11-common_ssh-agent -rwxr-xr-x 1 root root 1553 jun 21 16:47 98vboxadd-xclient -rw-r--r-- 1 root root 166 feb 13 2007 99x11-common_start
unos los han añadido otros paquetes como unclutter y libcanberra-gtk-module y otros pueden estar allí instalados por el administrador local.
Los preinstalados son los siguientes:
20x11-common_process-args | Analiza los parámetros que ha recibido el programa Xsession y determina tanto el tipo de sesión que se pide como tal vez el programa que lanza la sesión. |
---|---|
30x11-common_xresources | Carga mediante xrdb -merge los recursos gráficos que encuentra en dos localizaciones:
|
40x11-common_xsessionrc | Carga el entorno de usuario mediante el archivo $HOME/.xsessionrc .
|
50x11-common_determine-startup | |
90x11-common_ssh-agent | Comprueba que no exista ya un agente SSH en funcionamiento y, si la configuración lo permite, marca el agente para que se emplee en la fase final. |
99x11-common_start | Lanza la sesión gráfica mediante un shell si el programa no es ejecutable y empleando el agente SSH si es necesario. En cualquier caso se usa la orden exec para no crear un nuevo proceso. |
Personalizando la sesión gráfica
En el caso de necesitar retocar la sesión gráfica podemos incluír un archivo en el flujo de preparación, justo después del primero de ellos que es el que se encarga de inicializar las variables de entorno.
Por ejemplo, podemos crear un archivo llamado /etc/X11/Xsession.d/25x11_local_settings
:
#/bin/sh
# Creamos algunos directorios
ARCHIVOS=$HOME/Archivos
if [ ! -d $ARCHIVOS ]; then
mkdir -p $ARCHIVOS/Documentos $ARCHIVOS/Compartidos "${ARCHIVOS}/Recibidos"
fi
# Copiamos algunos ajustes particulares
if [ ! -e $HOME/.Xresources ]; then
cp -f /etc/empresa/lib/xresources $HOME/.Xresources
fi
# exit