El sistema X Window utiliza una arquitectura cliente-servidor. El servidor X se ejecuta en la máquina que tiene la pantalla (monitores + dispositivos de entrada), mientras que los clientes X pueden ejecutarse en cualquier otra máquina y conectarse al servidor X usando el protocolo X (no directamente, sino más bien usando una biblioteca, como Xlib, o el XCB controlado por eventos sin bloqueo más moderno). El protocolo X está diseñado para ser extensible y tiene muchas extensiones (ver xdpyinfo(1)
).
El servidor X solo realiza operaciones de bajo nivel, como crear y destruir ventanas, realizar operaciones de dibujo (hoy en día la mayoría de los dibujos se realizan en el cliente y se envían como una imagen al servidor), enviar eventos a las ventanas, ... Puede ver cuán poco un servidor X lo hace al ejecutar X :1 &
(usar cualquier número que ya no haya sido usado por otro servidor X) o Xephyr :1 &
(Xephyr ejecuta un servidor X integrado en su servidor X actual) y luego ejecuta xterm -display :1 &
y cambia al nuevo servidor X (es posible que deba configurar la autorización X usando xauth(1)
).
Como puede ver, el servidor X hace muy poco, no dibuja barras de título, no minimiza / iconiza ventanas, no administra la colocación de ventanas ... Por supuesto, puede controlar la ubicación de ventanas manualmente ejecutando un comando como xterm -geometry -0-0
, pero generalmente tendrá un cliente X especial que hace las cosas anteriores. Este cliente se llama administrador de ventanas . Solo puede haber un administrador de ventanas activo a la vez. Si todavía tiene abierto el servidor X al descubierto de los comandos anteriores, se puede tratar de ejecutar un gestor de ventanas en él, como twm
, metacity
, kwin
, compiz
, larswm
, pawm
, ...
Como dijimos, X solo realiza operaciones de bajo nivel, y no proporciona conceptos de nivel superior como botones, menús, barras de herramientas, ... Estos son proporcionados por bibliotecas llamadas kits de herramientas , por ejemplo: Xaw, GTK, Qt, FLTK, ...
Los entornos de escritorio son colecciones de programas diseñados para proporcionar una experiencia de usuario unificada. Por lo tanto, los entornos de escritorio generalmente proporcionan paneles, iniciadores de aplicaciones, bandejas del sistema, paneles de control, infraestructura de configuración (dónde guardar la configuración). Algunos entornos de escritorio conocidos son KDE (creado con el kit de herramientas Qt), Gnome (con GTK), Enlightenment (con sus propias bibliotecas de kit de herramientas), ...
Algunos efectos de escritorio modernos se realizan mejor con hardware 3D. Entonces aparece un nuevo componente, el administrador compuesto . Una extensión X, la extensión XComposite, envía el contenido de la ventana al administrador compuesto. El administrador compuesto convierte esos contenidos en texturas y usa hardware 3D a través de OpenGL para componerlos de muchas maneras (mezcla alfa, proyecciones 3d, ...).
No hace mucho tiempo, el servidor X hablaba directamente con los dispositivos de hardware. Una parte importante del manejo de este dispositivo se ha trasladado al kernel del sistema operativo: DRI (que permite el acceso al hardware 3D por X y clientes de renderización directa), evdev (interfaz unificada para el manejo del dispositivo de entrada), KMS (configuración del modo de gráficos móviles al kernel) , GEM / TTM (gestión de memoria de texturas).
Entonces, con la complejidad del manejo de dispositivos ahora mayormente fuera de X, se hizo más fácil experimentar con sistemas de ventanas simplificados. Wayland es un sistema de ventanas basado en el concepto de administrador compuesto, es decir, el sistema de ventanas es el administrador compuesto. Wayland utiliza el manejo del dispositivo que se ha movido fuera de X y se procesa con OpenGL.
En cuanto a Unity, es un entorno de escritorio diseñado para tener una interfaz de usuario adecuada para netbooks.