Niri: un compositor Wayland con mosaicos desplazables escrito en Rust
Hace poco se dio a conocer el lanzamiento de la primera versión de «Niri» el cual se posiciona como un compositor Wayland que ofrece una experiencia única al organizar las ventanas en mosaicos desplazables. Su diseño se centra en proporcionar una disposición eficiente de las ventanas y espacios de trabajo en monitores individuales, brindando una experiencia fluida y organizada para los usuarios.
El proyecto está inspirado en la extensión PaperWM de GNOME e implementa un método de diseño en mosaico en el que las ventanas se agrupan en una cinta que se desplaza sin fin en la pantalla. Abrir una nueva ventana hace que la cinta se expanda, mientras que las ventanas agregadas anteriormente nunca cambian de tamaño.
Sobre Niri
El motivo para crear un administrador compuesto separado es la imposibilidad de implementar un trabajo separado con monitores en PaperWM debido a las peculiaridades de GNOME Shell (vinculación a las coordenadas globales de la ventana). La principal diferencia entre Niri y PaperWM es que cada monitor tiene su propia cinta de ventanas que no se cruzan entre sí. Niri admite HiDPI y puede ejecutarse en sistemas con múltiples GPU (por ejemplo, sistemas híbridos con una tarjeta gráfica discreta y una GPU integrada).
Características principales:
- Mosaico desplazable: Las ventanas se organizan en columnas en una franja infinita que se extiende hacia la derecha. Abrir una nueva ventana no altera el tamaño de las existentes.
- Espacios de trabajo dinámicos: Los espacios de trabajo se organizan verticalmente y son dinámicos, permitiendo una gestión eficiente similar a GNOME.
- Interfaz de captura de pantalla incorporada: Niri cuenta con una interfaz de captura de pantalla integrada, lo que facilita la toma de imágenes de forma rápida y sencilla.
- Supervisión de screencasting: A través de xdg-desktop-portal-gnome, Niri permite el screencasting con facilidad.
- Gestos del panel táctil: Se incluyen gestos del panel táctil para cambiar entre espacios de trabajo, mejorando la accesibilidad y la experiencia de usuario.
- Diseño configurable: Los usuarios pueden personalizar diversos aspectos del diseño, incluyendo espacios, bordes, puntales y tamaños de ventanas, adaptándolos a sus preferencias individuales.
- Configuración de recarga en vivo: Niri permite la configuración de recarga en vivo, lo que significa que los cambios realizados se aplican de inmediato sin necesidad de reiniciar.
Niri cuenta con soporte para gestos de control en el panel táctil para cambiar entre escritorios. Cuando se apaga el monitor, el diseño del escritorio virtual se recuerda y se transfiere al monitor restante, y cuando se devuelve el monitor, se restaura a su estado original.
La personalización del entorno se logra mediante un archivo de configuración que permite ajustar parámetros básicos como el ancho del marco, el relleno, los modos de salida y el tamaño de las ventanas y los cambios realizados en la configuración se aplican dinámicamente, sin necesidad de reiniciar el servidor compuesto.
Por la parte de los cambios desde v0.1.0-beta.1, se han implementado las siguientes correcciones y mejoras en Niri:
- Se ha solucionado la recarga en vivo de la configuración en NixOS, permitiendo cambios en el enlace simbólico del archivo de configuración mientras se mantiene constante el mtime.
- Se han corregido la mayoría de los casos en los que Niri no encendía los monitores después de un cambio de TTY.
- Se ha corregido el problema con xdg-desktop-portal-gnome que no actualizaba la lista de monitores de screencast al desconectar/reconectar el monitor, debido a que Niri no le notificaba sobre los cambios.
- Se han solucionado problemas con ventanas grandes con grandes sombras CSD que se cortaban en capturas de pantalla y screencasts.
- Se han corregido los cambios en la configuración de salida que se ignoraban si se realizaban en un TTY diferente.
- Se han solucionado las ventanas emergentes que no aparecían cuando un IME estaba activo, con una solución alternativa que deshabilita la captura de ventanas emergentes cuando un IME está activo.
- Se ha mejorado ligeramente el rendimiento de representación del cursor al evitar transferencias CPU->GPU->CPU.
- Se ha solucionado que la interfaz de usuario de captura de pantalla no apareciera si el cursor terminaba fuera de todos los monitores.
Finalmente para los interesados en el proyecto, deben saber que el código del proyecto está escrito en Rust y se distribuye bajo la licencia GPLv3. Pueden encontrar las instrucciones de instalación, asi como mayor información sobre el usó de Niri mediante atajos de teclado en el siguiente enlace.