El sistema de ventanas X es básicamente un software que permite la interacción gráfica con un ordenador Linux. Xwindow es la interfaz gráfica (GUI) de Linux. X Window System se abrevia como X11 o X.
Xwindow es un sistema cliente-servidor. Existe un servidor X al que se conectan los clientes X (aplicaciones de interfaz gráfica). Es el servidor X en que interactúa con el hardware, tarjeta gráfica, monitor, ratón y teclado. Esta estructura cliente-servidor permite que el servidor X se ejecute localmente pero las aplicaciones X se puedan ejecutar de forma remota desde otros ordenadores.
El protocolo utilizado para la comunicación entre cliente y servidor X se denomina Xprotocol. Es un protocolo de red como otro cualquiera, que utiliza los puertos TCP y UDP 6000. Este protocolo se encuentra en la versión estándar X11.
Como servidor X se utilizó durante muchos años el XFree86, pero dejó de ser completamente compatible con GPL y ha sido paulatinamente sustituido por un derivado llamado Xorg, que es el que se encuentra en la mayoría de las distros de Linux.
Como estructura del sistema gráfico Xwindow se utilizan varias capas de software o componentes.
XWindow System (sistema de ventanas).
Es el propio servidor X. Se utiliza para dibujar los iconos, ventanas, etc. y proporciona el conjunto de instrucciones para la comunicación entre cliente y servidor. Es el que ejecuta el driver de vídeo y proporciona el interfaz lógico para que los programas clientes puedan generar ventanas y dibujar cosas.
Windows Manager (gestor de ventanas)
Es un programa intermedio que gestiona la colocación y apariencia de las ventanas de aplicación, sus bordes, su apariencia, el foco, etc. desde el punto de vista del servidor X es una aplicación cliente como otra cualquiera.
Decimos que el Windows Manager puede ser independiente o formar parte de un entorno de escritorio, ya que no se necesita de un entorno de escritorio para poder abrir una ventana. Típico caso de ejecutar algún Windows manager minimalista como único interfaz gráfico en el que vamos a tener la pantalla en negro pero podremos pulsar con el ratón y mediante un pequeño menú que proporciona en propio Windows manager abrir la ventana. Es este caso el Windows Manager no requiere de otra capa de software para ser funcional.
Algunos gestores de ventanas típicos:
kwin: Utilizado por KDE.
metacity: Es el gestor por defecto de GNOME 2.26. Anteriormente GNOME utilizaba otros gestores de ventanas, como el Enlightenment y sawfish.
fluxbox: Es el gestor de Knoppix.
twm: Gestor minimalista. El menú aparece con el botón izquierdo. Funciona standalone y no necesita estar integrado en un escritorio.
icewm: Un gestor muy complet que sobrecarga poco el sistema. No necesita estar integrado en un escritorio.
motif: Un gestor de ventanas ligero. Tampoco necesita integrarse en un escritorio.
X Display Manager (XDM) (gestor de pantalla)
Gestiona las sesiones y el registro de usuarios. En realidad es un componente cliente opcional que gestiona el login, inicio de sesión de usuario, y su final. Es el responsable de mostrar la pantalla inicial de usuario y clave. Una vez logeado, arranca el gestor de ventanas (Windows manager) y permanece a la espera hasta que termine para mostrar de nuevo la pantalla de entrada al sistema. Los display managers pueden incorprar opciones adicionales como el cambio de idioma.
Los Display Manager más importantes son:
gdm (Gnome Display Manager). Es el que utiliza el escritorio Gnome.
kdm (KDE Display Manager). Es el que utiliza el escritorio KDE.
xdm (X Display Manager). Es el Display Manager genérico y básico de Linux.
Desktop Environment (entorno de escritorio)
Un entorno de escritorio es un conjunto de aplicaciones cliente que va mucho más allá de un display manager. No se debe confundir con el display manager o gestor de ventanas. El entorno de escritorio permite comunicar aplicaciones y procesos bajo su control, permitiendo entre otras cosa copiar y pegar texto entre dos aplicaciones.
El entorno de escritorio dispone normalmente de un gestor de ventanas, barra de tareas y una serie de aplicaciones como gestor de archivos, etc. Los entornos de escritorio más conocido son Gnome y KDE.
Arranque del sistema gráfico en systemd
Al arrancar el equipo inicialmente se lee el archivo:
/etc/systemd/system/default.target
el cual es un enlace a:
/lib/systemd/system/graphical.target
Este target se ejecuta después del target multiuser ya que incorpora las directrices:
Requires=multi-user.target
After=multi-user.target
y lo que hace es llamar a un servicio denominado:
display-manager.service
que se encuentra en /etc/systemd/system/ y que no es más que un enlace a
/usr/lib/systemd/system/gdm.service
el cual lanza explícitamente el gdm:
[Unit] Description=GNOME Display Manager Conflicts=getty@tty1.service plymouth-quit.service After=systemd-user-sessions.service getty@tty1.service plymouth-quit.service [Service] ExecStart=/usr/sbin/gdm ExecStartPost=-/bin/bash -c "TERM=linux /usr/bin/clear > /dev/tty1" ExecStop=-/bin/bash -c "TERM=linux /usr/bin/clear > /dev/tty1" KillMode=process Restart=always IgnoreSIGPIPE=no BusName=org.gnome.DisplayManager StandardOutput=syslog StandardError=inherit [Install] Alias=display-manager.service
En el caso del sistema de arranque SystemV podíamos encontrar un script asociado al runlevel 5 ubicado en /etc/rc5.d y llamado algo como S30gdm o bien a través del archivo /etc/inittab que tiene mayor precedencia que los scripts del runlevel podíamos encontrar algo como:
x:5:respawn:/etc/X11/prefdm -nodaemon
siendo prefdm un script que desde donde se ejecuta gdm u otro display manager.
Arranque del sistema gráfico desde consola de texto
Verificamos que se están ejecutando el servidor X:
[root@localhost]# ps -aA |grep X
1031 tty1 00:00:01 Xorg
[root@localhost]#
Para arrancar el entorno de escritorio o el Windows manager que esté configurado por defecto se utiliza la instrucción startx:
# startx
startx es un script el cual utiliza unos archivos de configuración en /etc/X11. Estos archivos son:
/etc/X11/xinit/xinitrc script desde el cual se lanza /etc/X11/Xsession
/etc/X11/xinit/xinitrc-common es llamado desde /etc/X11/xinit/xinitrc. Contiene código común compartido por los scripts Xsession y xinitrc.
/etc/X11/Xsession arranca la sesión X para el usuario activo utilizando características del propio sistema y otras especificadas en /etc/X11/Xsession.options.
/etc/X11/Xsession.options opciones utilizadas por /etc/X11/Xsession.
Xclients es llamado desde Xsession y es desde donde se lanza el Windows manager o el display manager correspondente.
Hay que indicar que esta estructura puede cambiar con la distribución de Linux que estemos usando. Además, algunos de estos archivos se instalan normalmente como ocultos en los homes de los usuarios y se utilizan prioritariamente a los de /etc/X11 para personalizar a cada uno de ellos.