Aprender Linux 101: Instalar y configurar X11

El archivo de configuración de X Window

En los primeros días de X, configurar una pantalla significaba tener un amplio conocimiento de las capacidades de la pantalla y la capacidad de expresar información no sólo sobre la resolución, sino también sobre los valores de sincronización horizontal y vertical, la profundidad del color, etc. Desde la llegada de la Asociación de Estándares de Electrónica de Vídeo (VESA) y los protocolos del Canal de Datos de Pantalla (DDC), que permiten que una pantalla comunique estas capacidades a una tarjeta gráfica y, por tanto, a un ordenador, la configuración se ha vuelto mucho más automática. Esto es una suerte, ya que ahora esperamos poder llevar nuestro portátil a cualquier parte y simplemente conectar un monitor o proyector externo disponible.

La configuración del ratón, el trackball o el teclado también se ha vuelto más automática. Generalmente, sólo tienes que conectar el dispositivo, a menudo a través de una conexión USB y funciona.

Sin embargo, como con la mayoría de las cosas en Linux, hay un mecanismo de configuración subyacente que puedes utilizar. De hecho, la implementación Xorg de X obtiene información de configuración de varias fuentes. El archivo de configuración principal es xorg.conf, junto con los archivos incluidos en el directorio xorg.conf.d. Estos se encuentran normalmente en /etc/X11. La configuración adicional puede provenir de las opciones de la línea de comandos, las variables de entorno, la detección automática y los valores predeterminados.

El archivo de configuración xorg.conf y los archivos del directorio xorg.conf.d están organizados en secciones que pueden especificarse en cualquier orden. El formato general de las secciones se muestra en el Listado 1.

Listado 1. Disposición de las secciones en xorg.conf

 Section "SectionName" SectionEntry ... EndSection

Mostrar másMostrar más icono

Xorg con la opción -configure. El comando Xorg es en realidad un enlace simbólico del comando X que normalmente se encuentra en /usr/bin. Necesitas ejecutar el comando Xorg como root y asegurarte de que no se está ejecutando ningún servidor X. Una forma de hacer esto es editar su estrofa de GRUB2 para arrancar en modo multiusuario sin X. Tradicionalmente, este es el nivel de ejecución 3. Simplemente edite la entrada del menú de arranque que desee y añada un 3 al final de la línea `linux boot/vmlinuz…’ como se ilustra en la Figura 2.

Figura 2. Arranque en modo multiusuario sin X

Si está utilizando systemd, puede utilizar systemd.unit=multi-user.target en lugar de 3.

Xorg -configure carga los controladores de dispositivos disponibles y sondas para el hardware. Funciona en muchos sistemas, pero tiene problemas en algunos sistemas según la página man. La documentación de Fedora recomienda utilizar la pantalla :1 en lugar de la pantalla :0 por defecto, por lo que puede probar Xorg :1 -configure si Xorg simple -configure no funciona.

Un archivo de ejemplo generado con este método en mi sistema openSUSE Tumbleweed se muestra en el Listado 2.

Listado 2. Ejemplo xorg.conf

Suponiendo que su pantalla soporta DDC, como la mayoría de las pantallas modernas, puede utilizar el comando xrandr para consultar sus capacidades. El listado 4 muestra la información drm para un portátil con una pantalla conectada y la correspondiente salida de xrandr.

Listado 4. Usando xrandr para determinar las capacidades de la pantalla

XkbVariant define qué variantes de las dos distribuciones deben utilizarse. En el caso de la disposición us se utiliza su variante por defecto. En el caso de la disposición sk se utiliza su variante qwerty. La opción XkbOptions indica que los usuarios pueden alternar entre las distribuciones utilizando la tecla CapsLock.

Listado 5. Actualización de la configuración del teclado

localectl. Sin embargo, localectl status muestra que estos cambios fueron recogidos cuando el sistema se reinició como se muestra en el Listado 6.

Listado 6. Mostrando el estado del teclado usando localectl

Los gestores de pantalla se dividen en tres categorías generales.

  1. Los gestores de ventanas en mosaico dividen la pantalla en mosaicos y escriben cada mosaico por separado de los demás. El rendimiento es generalmente bueno.
  2. Los gestores de ventanas apiladas apilan las ventanas individuales en la pantalla en una lista conocida como orden Z. Cuando una nueva ventana recibe el foco se coloca en la parte superior del orden Z y todas las ventanas inferiores se redibujan. Esto puede ser lento, particularmente para cambios menores, pero se han desarrollado varias optimizaciones.
  3. Los gestores de ventanas de composición suelen ser gestores de ventanas de apilamiento que mantienen un búfer para cada ventana y luego los combinan en un solo búfer para su visualización sin necesidad de redibujar cada ventana individual y luego sobrescribirla con la siguiente superior en el orden Z. Esto también permite efectos como la transparencia.

La figura 3 muestra un ejemplo del gestor de ventanas en mosaico I3. Se comienza con un escritorio vacío y luego se crea una ventana, como por ejemplo una ventana de terminal. Ésta ocupa toda la pantalla. A continuación, puede abrir otra ventana que divide el mosaico original en dos. Si a continuación abre otra, la pantalla se divide en tres mosaicos. Puedes elegir crear nuevos mosaicos horizontal o verticalmente. En este ejemplo, elegí dividir el azulejo original del medio que contiene el juego de sudoku verticalmente, para crear otra pequeña ventana de terminal. Luego dividí eso horizontalmente para añadir una ventana xlcock.

Figura 3. El gestor de ventanas en mosaico de I3

Por lo general, puede mover las ventanas entre los escritorios virtuales, lo que ayuda mucho si tiene varias ventanas grandes abiertas.

Puede abrir la lista de aplicaciones disponibles como un menú en la parte superior de la pantalla y seleccionar las aplicaciones mediante un lento desplazamiento horizontal o, más rápidamente, escribiendo parte o la totalidad de un nombre, como ‘xclock’.

A diferencia de los gestores de ventanas en mosaico, los gestores de ventanas apiladas le permiten tener ventanas de cualquier tamaño soportado por su pantalla, incluyendo ventanas que pueden solapar el borde de la pantalla. La figura 4 es un ejemplo del gestor de ventanas apiladas Openbox que muestra cuatro ventanas superpuestas y el menú que permite abrir nuevas aplicaciones.

Figura 4. El gestor de ventanas apiladas de Openbox

Los gestores de ventanas apiladas básicos funcionan según el principio de redibujar todas las ventanas de la pantalla cuando la ventana con el foco cambia o se mueve, se cierra o se redimensiona. Esto puede resultar en múltiples reescrituras de varias áreas de la pantalla mientras se procesa todo el orden Z. Se pueden utilizar algoritmos para minimizar la cantidad de reescrituras innecesarias.

Una mejora de la idea básica de apilamiento es un gestor de ventanas de composición. Un gestor de ventanas de este tipo mantiene un búfer con el contenido de cada ventana y lo fusiona o compone en una única ventana. Sólo las partes actualizadas deben escribirse en el búfer de la tarjeta de visualización. Compiz es un ejemplo de gestor de ventanas de composición, mientras que los entornos de escritorio como KDE y GNOME también utilizan gestores de ventanas de composición.

Un entorno de escritorio generalmente proporciona una experiencia de usuario con todas las funciones, incluyendo cosas como un saludo gráfico de inicio de sesión, menús gráficos del sistema, una bandeja para mostrar widgets como la hora del día, iconos de aplicaciones abiertas, etc. Un conjunto de aplicaciones integradas suele proporcionar una experiencia consistente al usuario. La mayoría de los gestores de ventanas son mucho más ligeros que un entorno de escritorio completo.

La figura 5 ilustra el concepto de transparencia en un gestor de ventanas de composición o entorno de escritorio. Mantenga pulsado el botón izquierdo del ratón (botón 1) en la barra de título de la ventana del terminal cuando se disponga a moverla. La pantalla cambia para mostrar qué ventanas están debajo de esa zona en particular. Esto puede ayudarle a mover una ventana para que no esté encima de otra cuando quiera que ambas sean visibles.

Figura 5. Transparencia con el escritorio Plasma de KDE

La figura 6 ilustra GNOME 3.28 en Fedora. Al pulsar el botón de Actividades en la parte superior izquierda de esta pantalla se abre una lista iconizada de favoritos en la parte izquierda de la pantalla y muestra un conjunto de aplicaciones en ejecución como pequeñas ventanas. Puedes hacer clic en un favorito, en una pequeña ventana o utilizar el cuadro de búsqueda de la parte superior de la pantalla para buscar un programa. En este ejemplo concreto, he pulsado el día y la hora en la barra superior para abrir un widget que muestra algunos mensajes, como las actualizaciones disponibles o el último comando completado, así como información adicional sobre la fecha y la hora. Los iconos de la parte superior derecha permiten acceder a funciones como el volumen del altavoz, la configuración de la red, las opciones de accesibilidad y las opciones de apagado, cierre de sesión o reinicio.

Figura 6. Actividades y widgets de Fedora GNOME

He mencionado que los entornos de escritorio suelen contener aplicaciones integradas para ayudar a gestionar diversos aspectos del escritorio o del sistema. La figura 7 muestra el diálogo de configuración de Fedora GNOME 3.28 abierto en la configuración de la pantalla. Este ejemplo es de un portátil con un monitor externo Viewsonic. Las opciones comunes en este caso son unir las dos pantallas como una sola o reflejar el contenido de una pantalla en la otra. En este caso, elegimos unir las dos pantallas con la pantalla incorporada lógicamente a la derecha del monitor externo.

Figura 7. Diálogo de configuración de pantalla de Fedora GNOME

Como puede cambiar la resolución de la pantalla en el archivo xorg.conf, también puede indicar al compositor que escale la ventana al 100% o al 200%. La escala disponible puede depender del tamaño del monitor, así como el escritorio particular que está utilizando. Yo también tengo un monitor UHD (4K) y ojos que no pueden leer la resolución de texto nativo muy pequeña. Así que en ese monitor, con frecuencia uso un factor de escala de 200%.

Note que los cambios realizados utilizando la configuración de GNOME no actualizan xorg.conf. En su lugar, estos ajustes se guardan en el archivo .config/monitors.xml en su directorio de inicio. GNOME también mantiene otras configuraciones de pantalla y teclado en la base de datos dconf que también puede encontrar debajo de su directorio personal. Al tener estas configuraciones en su directorio personal, se aplican sólo a usted. Otros usuarios pueden tener una configuración diferente.

Si tiene varios entornos de escritorio o gestores de ventanas instalados puede preguntarse cómo elegir entre ellos. Puede arrancar en el modo multiusuario como se describió anteriormente en este tutorial y luego ejecutar un comando como startx para iniciar X con el gestor apropiado. Si tiene un entorno de escritorio como GNOME que proporciona un greeter, probablemente tendrá una opción de configuración en la pantalla del greeter. La figura 8 muestra las opciones instaladas en mi sistema Fedora 28.

Figura 8. Greeter de Fedora GNOME 3 con la selección de WM

Gestionar el acceso al servidor X y mostrar las aplicaciones de forma remota

Hasta ahora, ha visto ejemplos de X funcionando en un ordenador de sobremesa con uno, o quizás dos monitores. Un servidor X trata una sola pantalla como una colección de monitores que comparten un conjunto común de dispositivos de entrada.

Así que el portátil que se muestra en la figura 7 tiene una sola pantalla, aunque tenga el monitor incorporado y un monitor externo. En este ejemplo, los dos monitores funcionan como si estuvieran unidos. Esto hace una sola pantalla lógica que permite mover las ventanas entre los monitores, o incluso dividirlas entre ellos. Los sistemas multiusuario suelen tener varias pantallas, por lo que se necesita una forma de describirlas.

X utiliza un nombre de tres partes para las pantallas de la forma hostname:displaynumber.screennumber donde hostname es el nombre del host del ordenador, displaynumber es un número que empieza por 0 y que describe la pantalla en particular, y screennumber se aplica si dos o más monitores se tratan como pantallas separadas en lugar de como una única pantalla lógica. Tanto el nombre de host como el número de pantalla pueden omitirse, por lo que la notación de pantalla más común que verás es :0. Puede ver su configuración actual en la variable de entorno DISPLAY como se muestra en el Listado 7.

Listado 7. La variable de entorno DISPLAY

ian@attic5-u18:~$ echo $DISPLAY:0

Mostrar másMostrar más icono

DISPLAY permitiría a cualquier usuario escribir la salida en su pantalla, pero X tiene algunas limitaciones de control de acceso. Le mostraré tres formas de conectarse a un servidor X.

  1. Utilizar ssh con X forwarding
  2. Utilizar Xauthority y xauth
  3. Utilizar control de host o de usuario con xhost

La forma más segura de utilizar X en otra pantalla es utilizar X forwarding (a veces llamado tunneling). Esto debe ser habilitado en el servidor SSH al que se conecta con la línea X11Forwarding yes en el archivo de configuración, /etc/ssh/sshd_config. También tiene que habilitarlo en el cliente especificando la opción -X (es una X mayúscula) en su comando ssh. El listado 8 compara lo que sucede si uso su - jane para cambiar al usuario jane en mi sistema y luego uso ssh -X jane@localhost. En ambos casos, intento ejecutar el comando xclock para mostrar un pequeño reloj en mi pantalla.

Lista 8. X forwarding

DISPLAY se establece en localhost:10.0. El servidor sshd está creando efectivamente un servidor X para usted en el sistema de destino. No quieres que esto interfiera con cualquier servidor X real en el sistema. Así que el archivo de configuración, /etc/ssh/sshd_config, contiene una línea X11DisplayOffset 10 para especificar el desplazamiento inicial (desde 0) para los servidores X sobre ssh. El valor por defecto es 10, que suele ser suficiente para una estación de trabajo de un solo usuario, pero podría ser necesario aumentarlo en un sistema multiusuario. A una segunda conexión ssh al servidor se le asignaría la pantalla 11 y así sucesivamente.

El segundo método para permitir que otros se conecten a un servidor X es el método Xauthority. El archivo Xauthority contiene información de autorización que se utiliza cuando se conecta a un servidor X. La variable de entorno XAUTHORITY especifica el nombre del archivo actualmente en uso, ya sea un archivo generado por el sistema como /run/user/1000/gdm/Xauthority en mi sistema Ubuntu 18, o su propio archivo .Xauthority.

Utilice el comando xauth para listar, extraer o fusionar nuevas autoridades. utilice la opción -f para especificar un archivo Xauthority distinto al de su variable de entorno XAUTHORITY. Puede especificar los comandos xauth en la línea de comandos, o iniciarlo y utilizar los comandos desde el programa. El listado 9 muestra algunos ejemplos y extrae mi autorización para la pantalla :0 a un archivo llamado auth-ian.

Listado 9. Extrayendo información de autoridad usando xauth

XAUTHORITY. El usuario jane puede entonces mostrar aplicaciones en mi pantalla.

Lista 10. Fusión de la información de autoridad usando xauth

xhost. En una estación de trabajo, puede utilizarlo para permitirle abrir programas gráficos mientras se ejecuta como otro usuario. El comando xhost sin opciones muestra la lista de control de acceso actual. Utilice la opción + con un nombre para permitir sistemas o usuarios adicionales. El listado 11 muestra cómo agregar al usuario john en mi sistema local a la lista de control de acceso y luego muestra al usuario john abriendo el programa gráfico xclock.

Listado 11. Uso de xhost para habilitar un solo usuario local

xhost +local: como se muestra en el Listado 12. Observe los dos puntos (:) al final de local.

Listado 12. Uso de xhost para habilitar a todos los usuarios locales no conectados a la red

– en lugar de + para eliminar las entradas que haya habilitado. Consulte las páginas man o info de xhost para obtener opciones adicionales.

Por seguridad, debería utilizar un túnel SSH o posiblemente otra solución como Virtual Network Computing (VNC) en lugar de xauth o xhost. VNC está fuera del alcance de este tutorial, pero proporciona un mejor rendimiento que la tunelización SSH.

Cuando las cosas van mal

Con tantas fuentes posibles de información de configuración de X, necesita saber dónde buscar la información de registro. Los errores relacionados con su sesión individual de X pueden estar localizados en el archivo .xsession-errors o posiblemente en .xsession-errors-:0 en su directorio principal. El sufijo :0 es para los errores en pantalla :0.

El registro principal de X se encuentra en /var/log. El nombre suele ser /var/log/Xorg.0.log, donde 0 es su número de pantalla. El número será diferente si no está usando display :0.

Wayland, un nuevo gestor de ventanas de composición

Recientemente, se ha desarrollado un nuevo servidor de display y protocolo de composición llamado Wayland. En este modelo las aplicaciones, crean ellas mismas el contenido de sus ventanas en un buffer fuera de la pantalla. El compositor y el servidor están integrados. La intención de Wayland es proporcionar una solución más sencilla y eficiente que X. Wayland reutiliza en su mayor parte los controladores y la infraestructura existentes, lo que hace posible el proyecto.

A diferencia de X, Wayland no tiene un diseño transparente para la red. Se pueden utilizar otras soluciones como VNC si se necesita la visualización de ventanas remotas.

Weston es un compositor de referencia que implementa Wayland. GNOME, KDE, Enlightenment y varios otros gestores de ventanas ahora soportan Wayland. Los kits de herramientas como Qt 5 y GTK+ también soportan Wayland. En el momento de escribir este artículo (diciembre de 2018), tanto Fedora como Ubuntu incluyen Wayland como servidor de visualización predeterminado.

El servidor Xorg ahora incluye XWayland, que permite que las aplicaciones X existentes se ejecuten con un compositor de Wayland.

La mayoría de las implementaciones actuales todavía tienen la opción de ejecutar X o Wayland para cada sesión. Vea en la Figura 7 un ejemplo de cómo el greeter de GMS le permite elegir un tipo de sesión. En Fedora el valor predeterminado es ejecutar GNOME en Wayland.

También puede comprobar en tiempo de ejecución sin tener que iniciar sesión. Si está ejecutando Wayland, se establecerá la variable de entorno WAYLAND_DISPLAY. En los sistemas que utilizan systemd, puede utilizar el comando loginctl para determinar su número de sesión de inicio de sesión y luego utilizarlo de nuevo para determinar su tipo de sesión. El listado 13 muestra estas herramientas, primero en un sistema Fedora 28 que utiliza Wayland y luego en un sistema Ubuntu 18 que ejecuta Xorg.

Listado 13. Determinar si está usando X o Wayland

Deja una respuesta

Tu dirección de correo electrónico no será publicada.