551 - Crea tu escritorio en Linux
Te cuento como crear tu escritorio #linux utilizando un tiling window manager como #sway y widgets implementados con #javascript y utilizando AGS
Prometí que no lo iba a hacer, y he sido fiel subscriptor del dicho donde dije digo digo Diego. Ya parezco un político cualquiera. No tengo remedio. Aunque quizás esté dramatizando. La cuestión es que llevo un par de semanas programando mi escritorio en Linux. No desde cero, porque he utilizado la mayor parte del código desarrollado por otro, pero si, la parte correspondiente a Sway. Así, que vamos allá y te quiero contar esto de como se crea tu escritorio en Linux.
Este episodio del podcast, no va a ser un episodio aislado, sino que será una serie de episodios en los que te iré contando como va evolucionando esta aventura en la que me he metido. Sirva, este primero de introducción, pero en los que encontrarás a lo largo de las siguientes semanas, iré mas al grano centrándome en los distintos aspectos que he resuelto o que he añadido.
Crea tu escritorio en Linux
Un paseo por el pasado
Hace ya algunos años que los tiling window manager han venido a formar parte importante de mi vida digital. Por hablar de números, y como ya mencioné en alguna ocasión, prácticamente el 80% de mi uso de escritorio se ha convertido en tiling window manager, frente a un escaso 20%, si no es menos que utilizo GNOME.
La razón de esto, es básicamente, que me permite ser mucho mas productivo, a la hora de realizar todas las tarea relacionadas con el mundo atareao.es y con la programación y el desrrollo. Vamos, que me permite ser mas productivo con todo aquello que me apasiona.
Un puzzle de herramientas
Sin embargo, esto de los tiling window manager tiene un pequeño inconveniente, y es que no son entornos de escritorio completos, sino que únicamente se trata de gestores de ventanas. En ese sentido, es necesario ir añadiendo el resto de piezas necesarias, para que todo tenga sentido. Herramientas como puede ser una barra de tareas, un sistema de notificaciones, un gestor de ventanas, etc.
En este sentido, el ecosistema Linux, es una auténtica maravilla, porque te provee de una vasto ecosistema de aplicaciones con las que suplir las carencias de un tiling window manager.
Sin embargo, y desde mi punto de vista, tienen tres problemas. El primero es la cantidad de herramientas complementarias que tienes que mantener. El segundo es la falta de consistencia del entorno de escritorio, y el tercero es que no existe comunicación o relación entre cada una de las piezas que constituyen tu recién creado entorno de escritorio.
Cuantas mas herramientas tengas en funcionamiento, mas herramientas tienes que actualizar, y mantener la operatividad con el resto. En general, esto no supone gran esfuerzo, porque entre otras cosas, todas estas herramientas, son herramientas muy consolidadas.
El otro problema, y es básicamente donde veo la cuestión, es la consistencia del entorno de escritorio. Cada una de esas herramientas tiene su propio aspecto. Incluso, aunque dediques un tiempo a intentar que todas tengan el mismo aspecto es complejo. Y si estás intentando dar una imagen
Por último está el problema de la relación entre las distintas piezas del puzzle. Y es que cada una de esas piezas ha sido desarrollada de forma completamente independiente sin tener en cuenta, al resto. De esta forma, es posible, que algunas funcionalidades de cada una de estas herramientas se solape, o no termine de coordinarse con el resto.
Una herramienta para gobernarlas a todas
Hace unas semanas, en el episodio 543 del podcast te hablé sobre widgets con JavaScript en Linux. Esto suponía el preludio de lo que tenía que venir. En concreto te hablé de un framework para crear tus propios widgets para Wayland. En concreto, estaba muy enfocado a hyprland. Por aquel entonces tenía algún que otro problema con el excesivo consumo de recursos de este gestor de ventanas, así que me había pasado a un fork de Sway conocido como Swayfx, de nuevo, gracias a la recomendación de Antonio.
Cuando te hablé sobre esta herramienta, ya te expliqué hasta que punto había llegado mi emoción, y sin embargo todavía no era consistencia de todas sus posibilidades. Hoy te puedo hablar con propiedad.
Ags me está permitiendo conseguir un entorno de escritorio sinceramente espectacular. Cierto es que me está costando sudor y lágrimas, pero lo cierto, es que lo poco que he conseguido hasta el momento tiene un aspecto fantástico.
Esta herramienta, viene a resolver justo todos los problemas que te he contando anteriormente. Es decir,
- Al tratarse de una única herramienta que te ofrece todo lo necesitas para un entorno de escritorio completo, solo necesitas mantener una herramienta.
- Desde luego que se trata de una solución que le va a dar coherencia y consistencia a todo el entorno, dado que
Inconvenientes,
- Dependes de una única herramienta y actualmente un único desarrollador.
- Necesitas conocimientos de JavaScript, pero sobre todo de Gtk.
- Está en desarrollo
Sway, I3 y el socket
El problema con el que me he encontrado es sin lugar a dudas el socket
- Primer error, pensar que el protocolo de hyprland sería igual que el i3.. cambio una cosa por la otra
- Faltan herramientas para tratar el protocolo de i3
- Recurrir a la documentación de i3-ipc, por un lado, y también me he apoyado en la librería que existe en Python para tratar con el socket de Docker
Gran parte del trabajo ya lo tengo implementado, pero no todo. El estado actual es que,
- en la barra de estado se muestra los espacios de trabajo que tengo habilitados
- se muestra cual es el espacio de trabajo activo, de forma que cuando cambio de un espacio de trabajo a otro se puede ver fácilmente
- Se muestran los espacios de trabajo ocupados
- He añadido los tooltip, esas pequeñas burbujas de notificación. Ahora cuando te situas sobre un espacio de trabajo, te indica que número es. Esto lo tengo que cambiar para que te muestre el listado de las aplicaciones que corren en ese espacio de trabajo actualmente.
¿Que queda de esta parte?
- Lo primero es limpiar el código, que actualmente está un poco manga por hombro. He ido haciendo demasiadas pruebas, y esperando que fuera muy similar al protocolo de hyprland, lo cierto es que he querido reaprovechar la estructura, y ha sido un claro error.
- Lo siguientes es mantener actualizado un listado de aplicaciones activas por espacio de trabajo, lo que me facilitará en parte, lo que comentaba de que al situarme sobre un espacio de trabajo me indique las aplicaciones que están corriendo.
- Habilitar los widgets. Para conseguir que AGS funcionara sobre Sway, lo que hice fue deshabilitar aquellas partes que daba error. Una de estas partes son precisamente los widgets que se sitúan sobre el escritorio. Esto tengo que corregirlo.
Adios Rofi
Otra de las cuestiones es la de reemplazar algunas piezas que todavía mantengo por cuestiones prácticas. Una de estas herramientas es precisamente Rofi. Rofi, me ha acompañado desde el principio en esta aventura de los tiling window manager, pero lo cierto, es que ha llegado su fin, al menos, con AGS.
AGS, me permite construir mi propio Rofi, desde cero, dotándole de todo tipo de funcionalidad. Actualmente, y tal y como viene solo es para lanzar aplicaciones, y no tiene el comportamiento de fuzzy finder que tanto me gusta… Pero todo esto es algo que se puede modificar, y que se modificará.
No es esta la única herramienta que he reemplazado. Así, por ejemplo, algunas otras herramientas que he reemplazado son las siguientes
- El menú de salida, que lo tenía con
wlogout
lo he reemplazado porpowermenu
- Para coger colores lo he reemplazado por
hyprpicker
que tengo que decir, que es espectacular.
Más información,