Este artículo trata sobre cómo funciona la gráfica en Linux y de qué componentes se compone. Contiene muchas capturas de pantalla con diversas implementaciones de entornos de escritorio.
Si no distingues mucho entre KDE y GNOME o si lo haces pero deseas conocer qué otras alternativas existen, este artículo es para ti. Es un resumen, y aunque tiene muchos nombres y un poco de términos, el material también será útil para principiantes y aquellos que apenas están mirando hacia Linux.
El tema puede atraer también a usuarios avanzados al configurar el acceso remoto y al implementar un cliente ligero. A menudo encuentro a usuarios de Linux bastante experimentados que afirman: «en el servidor solo hay línea de comandos, y no planeo profundizar en la gráfica, ya que esto es solo para usuarios simples». Pero incluso los expertos en Linux se sorprenden y alegran al descubrir la opción «-X» en el comando ssh (y para esto es útil entender cómo funciona y qué hace el servidor X).

He estado enseñando en cursos de Linux en la «» durante casi 15 años y estoy seguro de que muchos de las más de cinco mil personas a las que he enseñado, leen y seguramente escriben artículos en Habr. Los cursos siempre son muy completos (la duración media del curso es de cinco días), hay que hablar de temas para los cuales se requiere un mínimo de diez días para una introducción completa. Y siempre, dependiendo de la audiencia (si son principiantes o administradores experimentados), así como de las «preguntas del público», elijo qué abordar con más detalle y qué tratar de manera más superficial, para dedicar más tiempo a las utilidades de línea de comandos y su aplicación práctica. Hay suficientes temas a los que a veces tengo que renunciar un poco. Estos incluyen «Historia de Linux», «Diferencias entre distribuciones de Linux», «Sobre licencias: GPL, BSD, ...», «Sobre gráficos y entornos de escritorio» (tema de este artículo), entre otros. No es que no sean importantes, pero generalmente hay muchas preguntas más relevantes «aquí y ahora» y solo cinco días para cubrir todo... Sin embargo, para una comprensión general de los principios del sistema operativo Linux y para entender la diversidad disponible (de modo que incluso usando una distribución específica de Linux, se tenga una visión más amplia de todo este vasto e infinito mundo que se llama «Linux»), es útil y necesario estudiar estos temas.
A lo largo del artículo, indico enlaces para cada componente para aquellos que deseen profundizar en el tema, por ejemplo, a artículos de Wikipedia (indicando la versión más completa / útil cuando hay versiones en inglés y en ruso).
Para los ejemplos principales y capturas de pantalla utilicé la distribución openSUSE. Se podría haber utilizado cualquier otra distribución de la comunidad que cuente con una gran cantidad de paquetes en el repositorio. Es complicado, pero posible, mostrar la variedad del diseño del escritorio en una distribución comercial, ya que en ellas a menudo se utilizan solo uno o dos de los entornos de escritorio más conocidos. Así, los desarrolladores se restringen a lanzar un sistema operativo estable y depurado. En este sistema, instalé todos los DM / DE / WM (explicación de estos términos a continuación) que encontré en el repositorio.
Las capturas de pantalla con "marcos azules" fueron tomadas con openSUSE.
Las capturas de pantalla con "marcos blancos" las hice en otras distribuciones, que están indicadas en la captura.
Las capturas de pantalla con "marcos grises" fueron tomadas de Internet como ejemplos de diseños de escritorio de años anteriores.
Así que, empecemos.
Componentes principales que conforman la gráfica
Destacaré tres componentes principales y los enumeraré en el orden en que se inician al arrancar el sistema:
- DM (Display Manager);
- Servidor de Pantalla;
- DE (Entorno de Escritorio).
Adicionalmente, como puntos importantes en el Entorno de Escritorio:
- Gestor/Launcher/Cambiador de Aplicaciones (botón "Inicio");
- WM (Gestor de Ventanas);
- diverso software que se entrega junto al entorno de escritorio.
Más detalles sobre cada punto.
DM (Display Manager)
La primera aplicación que se inicia al arrancar la 'gráfica' es el DM (Display Manager). Sus principales tareas son:
- preguntar qué usuarios pueden acceder al sistema, solicitar datos de autenticación (contraseña, huella digital);
- elegir qué entorno de escritorio iniciar.
En este momento, diversas distribuciones utilizan ampliamente:
- (reemplazó ),
- ,
- ,
- .
- También se puede mencionar Fly-DM (usado en AstraLinux).
La lista de DM existentes se mantiene actualizada en




Cabe destacar que en las siguientes capturas se utiliza el mismo gestor de pantalla LightDM, pero en diferentes distribuciones (los nombres de las distribuciones se indican entre paréntesis). Evalúa cuán diferente puede verse este DM gracias al trabajo de los diseñadores de diversas distribuciones.





Lo importante en esta diversidad es que existe una aplicación que se encarga de iniciar la gráfica y permitir al usuario acceder a esta gráfica, y hay diferentes implementaciones de esta aplicación, que se diferencian en apariencia y un poco en funcionalidad (elección de entornos gráficos, elección de usuarios, versión para usuarios con discapacidad visual, posibilidad de acceso remoto mediante el protocolo ).
Servidor de visualización
El Servidor de visualización es una especie de fundamento gráfico, cuya tarea principal es trabajar con la tarjeta gráfica, el monitor y diversos dispositivos de entrada (teclado, ratón, paneles táctiles). Es decir, la aplicación (por ejemplo, un navegador o un editor de texto) que se renderiza en la 'gráfica' no necesita saber cómo trabajar directamente con los dispositivos, no necesita conocer los controladores. Todo esto lo asume X Window.
Cuando se habla sobre el Servidor de visualización, durante muchos años en Linux, e incluso en Unix, se refería a la aplicación o comúnmente X (Ikes).
Actualmente, en muchas distribuciones, X está siendo reemplazado por .
También se puede leer:
- ,
- ,
- (necesarios para el lanzamiento remoto de aplicaciones gráficas, por ejemplo, utilizando PuTTY).
Para comenzar, iniciemos X y varias aplicaciones gráficas en él.
Práctica 'iniciando X y aplicaciones en él'
Realizaré todo con un usuario recién creado webinaruser (sería más fácil, pero no más seguro, hacerlo desde root).
- Dado que a X le necesita acceso a los dispositivos, otorgo acceso: He determinado la lista de dispositivos observando los errores al iniciar X en el registro (/home/webinaruser/.local/share/xorg/Xorg.77.log)
% sudo setfacl -m u:webinaruser:rw /dev/tty8 /dev/dri/card0 /dev/fb0 /dev/input/*
- Después de esto, inicio X:
% X -retro :77 vt8 &
Opciones: * -retro — inicia con un fondo clásico "gris" en lugar de negro como predeterminado; * :77 — especifico (puede ser cualquier número dentro de un rango razonable, solo que :0 ya está probablemente ocupado por alguna gráfica en ejecución) un número de pantalla, un identificador único, por el cual se distinguirán múltiples instancias de X en ejecución; * vt8 — indica el terminal, aquí /dev/tty8, donde se mostrarán los X.
- Iniciamos la aplicación gráfica:
Para ello, previamente definimos la variable que la aplicación utilizará para entender a cuáles de mis X en ejecución enviar lo que necesita dibujar:
% export DISPLAY=":77"
Para ver la lista de X en ejecución, se puede hacer así:
ps -fwwC X
Después de haber definido la variable, podemos iniciar aplicaciones en nuestros X — por ejemplo, lanzo el reloj:
% xclock -update 1 &
% xcalc &
% xeyes -g 200x150-300+50 &

Ideas y conclusiones principales de este fragmento:
- Los X requieren acceso a los dispositivos: terminal, tarjeta gráfica, dispositivos de entrada,
- Los X en sí no muestran elementos de interfaz — es un lienzo gris (si se utiliza la opción "—retro") o negro de ciertos tamaños (por ejemplo, 1920×1080 o 1024×768), diseñado para ejecutar aplicaciones gráficas en él.
- Por el movimiento del "cursor", se puede ver que los X rastrean las posiciones del ratón y transmiten esta información a las aplicaciones que se ejecutan en él.
- Los X también capturan las pulsaciones de teclas del teclado y transmiten esta información a las aplicaciones.
- La variable DISPLAY indica a las aplicaciones gráficas en qué pantalla (cada X se inicia con un número de pantalla único) y, por lo tanto, en cuáles de las instancias en mi máquina se deben dibujar los X. (También existe la posibilidad de especificar en esta variable una máquina remota y enviar la salida a los X que se ejecutan en otra máquina en la red.) Dado que los X se iniciaron sin la opción -auth, no es necesario preocuparse por la variable XAUTHORITY o el comando xhost.
- Las aplicaciones gráficas (o como las llaman los X-clientes) se dibujan en los X — sin la posibilidad de moverlas/cerrarlas/cambiar "-g (Ancho)x(Altura)+(DesplazamientoDesdeElBordeIzquierdo)+(DesplazamientoDesdeElBordeSuperior)". Con el signo "menos" desde el borde derecho y el borde inferior, respectivamente.
- Dos términos que vale la pena mencionar: el X servidor (así se llaman los X) y los X clientes (así se llama cualquier aplicación gráfica que se ejecuta en los X). Hay un poco de confusión en la comprensión de esta terminología, muchos la entienden al revés. En el caso de que me conecte desde una "máquina cliente" (en la terminología de acceso remoto) a un "servidor" (en la terminología de acceso remoto), para mostrar en mi monitor una aplicación gráfica del servidor, el X servidor se ejecuta en la máquina donde está el monitor (es decir, en la "máquina cliente", y no en el "servidor"), mientras que los X clientes se ejecutan y funcionan en el "servidor", aunque se muestren en el monitor de la "máquina cliente".

Componentes DE
A continuación, analizaremos los componentes de los que suele constar el entorno de escritorio.
Componentes DE: botón de ‘Inicio’ y ‘Barra de tareas’
Comencemos con el llamado botón de ‘Inicio’. A menudo, es un applet separado, utilizado en la ‘Barra de tareas’. También suele haber un applet para alternar entre las aplicaciones en ejecución.

Al observar diferentes entornos de escritorio, agruparía estas aplicaciones bajo el nombre general 'Apps Manager (Launcher/Switcher)', es decir, una herramienta para gestionar aplicaciones (iniciar y alternar entre las ejecutadas), y también señalaré utilidades que son un ejemplo de este tipo de aplicaciones.
- A veces se presenta como un botón de ‘Inicio’ en una ‘Barra de tareas’ clásica (que se extiende a lo largo de uno de los bordes de la pantalla):
○ xfce4-panel,
○ mate-panel/gnome-panel,
○ vala-panel,
○ tint2. - También se pueden destacar por separado las ‘barras de tareas’ al estilo MacOS (no a lo largo de toda la longitud del borde de la pantalla), aunque muchas barras de tareas pueden mostrarse en ambas variantes. Aquí, la principal diferencia es puramente visual: la existencia de ‘efecto de aumento de iconos al pasar el cursor’.
○ docky,
○ latte-dock,
○ cairo-dock,
○ plank. - Y/o servicios que inician aplicaciones al presionar 'teclas de acceso rápido' (en muchos entornos de escritorio, este componente similar está presente y permite configurar sus propias teclas de acceso rápido):
○ sxhkd.
- También hay varios 'launchers' tipo menú (del inglés Launch (iniciar)):
○ dmenu-run,
○ rofi -show drun,
○ albert,
○ grun.

Componentes DE: WM (Gestor de ventanas)
WM (Gestor de ventanas) — es una aplicación que se encarga de gestionar las ventanas, añadiendo la posibilidad de:
- movimientos de ventanas en el escritorio (incluyendo el estándar de arrastrar con la tecla Alt en cualquier parte de la ventana, no solo en el encabezado);
- cambio de tamaño de las ventanas, por ejemplo, arrastrando desde el 'borde de la ventana';
- añade al interfaz de la ventana un 'título' y botones para minimizar/maximizar/cerrar la aplicación;
- el concepto de qué aplicación está 'en foco'.

Enumeraré las más conocidas (en paréntesis indico en qué DE se utiliza por defecto):
- (GNOME3),
- (Mate),
- (GNOME2),
- (Cinnamon),
- (KDE),
- (XFCE),
- .

También mencionaré 'WM antiguos con elementos DE'. Es decir, además del gestor de ventanas incluyen elementos como el botón de 'Inicio' y 'Paneles de tareas', más propios de DE completos. Sin embargo, ¿qué son 'antiguos', si tanto IceWM como WindowMaker han lanzado sus versiones actualizadas en 2020? Es más preciso no llamarlos 'antiguos', sino 'veteranos':
- ,
- ,
- , , , ,
- …





Además de los 'clásicos' ('gestores de ventanas apilables'), hay que mencionar por separado , que permite colocar ventanas apiladas por toda la pantalla, así como para algunas aplicaciones un escritorio separado para cada aplicación que se ejecuta a pantalla completa. Esto puede resultar un poco extraño para personas que no lo han usado antes, pero como yo mismo he estado usando tal interfaz desde hace tiempo, puedo decir que es bastante cómodo y te acostumbras rápidamente a este tipo de interfaz, después de lo cual los 'clásicos' gestores de ventanas ya no parecen tan cómodos.
- ,
- ,
- ,
- ,
- ,
- qtile,
- bspwm,
- herbstluftwm,
- …
- twin,
- .

También vale la pena mencionar el proyecto y el concepto de 'Gestor de ventanas por composición', que utiliza capacidades de aceleración por hardware para mostrar transparencia, sombras y diversos efectos tridimensionales. Hace unos 10 años hubo un auge de efectos 3D en escritorios de Linux. Ahora muchos de los gestores de ventanas integrados en DE utilizan parcialmente las capacidades de composición. Recientemente apareció — un producto con funcionalidad similar a Compiz para Wayland.

También se puede ver una lista detallada de diferentes gestores de ventanas en .
Componentes DE: otros
También hay que destacar los siguientes componentes del escritorio (aquí utilizo términos establecidos en inglés para describir variedad de aplicaciones — estos no son nombres de las aplicaciones en sí):
- Applets:
- SO (Kit de herramientas Widget) — a menudo se entrega con un «conjunto mínimo» de software:
DE (Entorno de escritorio)
De los componentes mencionados anteriormente, se forma lo que se conoce como «Entorno de presentación del escritorio». A menudo, todos sus componentes se desarrollan utilizando las mismas bibliotecas gráficas y siguiendo principios de diseño similares. Así, se mantiene, al menos, un estilo común para la apariencia de las aplicaciones.
Aquí se pueden destacar los siguientes entornos de escritorio disponibles en la actualidad:
Los más comunes son GNOME y KDE, y les sigue de cerca XFCE.

Se puede ver una comparación en diferentes parámetros en forma de tabla en la correspondiente .
Diversidad de DE

Incluso hay ejemplos interesantes de la historia: entre 2003 y 2007, se desarrolló para Linux un «diseño de escritorio 3D» llamado «Project Looking Glass» por la empresa Sun. Yo mismo usé este escritorio, más bien «experimenté» con él, ya que era difícil de usar. Este «diseño 3D» fue escrito en Java en una época en que no había tarjetas gráficas con soporte 3D. Por lo tanto, todos los efectos eran calculados por el procesador, y la computadora debía ser muy potente, de lo contrario todo funcionaba lentamente. Pero era visualmente atractivo. Las pestañas tridimensionales de las aplicaciones podían ser rotadas/desplegadas. Se podía rotar dentro de un cilindro del escritorio con fondos de panoramas de 360 grados. Había varias aplicaciones atractivas: por ejemplo, escuchar música como si se cambiasen CDs, etc. Se puede ver en YouTube sobre este proyecto, aunque la calidad de esos videos probablemente será mala, ya que en esos años no había posibilidad de subir videos de alta calidad.

Escritorio ligero. Existe desde hace bastante tiempo, desde 1996. En los últimos años ha ganado bastante popularidad, en contraste con los más pesados KDE y GNOME, en muchas distribuciones que requieren una interfaz de escritorio ligera y «clásica». Cuenta con muchas configuraciones y una gran cantidad de sus propios programas: terminal (xfce4-terminal), gestor de archivos (thunar), visor de imágenes (ristretto), editor de texto (mousepad).

Se utiliza en la distribución 'Elementary OS'. Aquí se puede decir que hay 'entornos de escritorio', que se desarrollan y utilizan dentro de una distribución específica y no se utilizan mucho (si no decir 'no se utilizan en absoluto') en otras distribuciones. Al menos, por ahora no han ganado popularidad y no han convencido a la mayor parte de la audiencia de las ventajas de su enfoque. Pantheon tiene como objetivo construir una interfaz similar a macOS.

Opción con panel dock:

Forte inclinación hacia efectos gráficos y widgets (desde los tiempos en que otros entornos de escritorio no tenían widgets en el escritorio, como el calendario/reloj). Utiliza sus propias bibliotecas. Tiene un amplio conjunto de sus propias aplicaciones 'bonitas': terminal (Terminology), reproductor de video (Rage), visor de imágenes (Ephoto).

Es un fork de Enlightenment17, utilizado en la distribución BodhiLinux.

Originalmente, una interfaz de escritorio 'clásica', creada como alternativa a KDE, que fue escrita en la biblioteca QT y en ese momento se distribuía bajo una licencia no muy conveniente para distribuciones comerciales.

A partir de la tercera versión de GNOME, se empezó a ofrecer con la shell GNOME, que tiene un 'aspecto no clásico', lo que no agradó a todos los usuarios (cualquier cambio drástico en las interfaces es difícilmente aceptado por los usuarios). Como consecuencia, surgieron proyectos fork que continúan el desarrollo de este escritorio en un estilo 'clásico': MATE y Cinnamon. Se utiliza por defecto en muchas distribuciones comerciales. Tiene una gran cantidad de configuraciones y sus aplicaciones.

Apareció en base a GNOME2 y sigue desarrollándose esta interfaz de diseño. Tiene una gran cantidad de configuraciones y forks de aplicaciones que se utilizaban en GNOME2 (se utilizan nuevos nombres) para no confundir los forks con su nueva versión para GNOME3).

Fork de GNOME Shell que proporciona a los usuarios una interfaz en estilo 'clásico' (como era en GNOME2).
Tiene una gran cantidad de configuraciones y las mismas aplicaciones que para GNOME Shell.

Fork de GNOME en estilo 'clásico', que se desarrolló dentro de la distribución Solus, pero ahora también se ofrece como un entorno de escritorio independiente en varias otras distribuciones.

(o, como a menudo se le llama, simplemente KDE)
Entorno de escritorio desarrollado dentro del proyecto KDE.
Tiene una gran cantidad de configuraciones accesibles para el usuario común desde la interfaz gráfica y muchas aplicaciones gráficas desarrolladas en el marco de este escritorio.

En 2008, KDE lanzó su nueva implementación KDE Plasma (se reescribió mucho el motor del escritorio). Al igual que con GNOME/MATE, no a todos los fanáticos de KDE les gustó esto. Como resultado, apareció un fork del proyecto que continúa el desarrollo de la versión anterior, llamado TDE (Trinity Desktop Environment).

Uno de los nuevos entornos de escritorio, escrito utilizando Qt (en el que está basado KDE). Tiene muchas configuraciones y una interfaz bastante hermosa (aunque esto es subjetivo) y bien diseñada. Se desarrolla en el marco de la distribución Deepin Linux. También hay paquetes para otras distribuciones.

Fly
Ejemplo de un entorno de escritorio, escrito utilizando Qt. Se desarrolla en el marco de la distribución Astra Linux.

Un entorno de escritorio ligero. Al igual que varios ejemplos anteriores, está escrito utilizando Qt. De hecho, es una continuación del proyecto LXDE y el resultado de la fusión con el proyecto Razor-qt.
Como pueden ver, el escritorio en Linux puede lucir muy diferente y hay una interfaz adecuada para todos los gustos: desde muy bellas con efectos 3D hasta minimalistas, desde "clásicas" hasta inusuales, desde aquellas que utilizan activamente los recursos del sistema hasta ligeras, desde pantallas grandes hasta tabletas/smartphones.
Y espero haber logrado dar una idea de cuáles son los componentes principales que componen la gráfica y el escritorio en el sistema operativo Linux.
El material para este artículo fue probado en julio de 2020 en un seminario web. Se puede ver. .
Eso es todo. Espero que haya sido útil. Si tienen alguna pregunta o comentario, escríbanme. Estaré encantado de responder. Y no olviden venir a aprender en. !
Fuente: habr.com
