Si quieres ir directo a la guía paso a paso para solucionar el error, haz clic aquí. Si quieren saber más sobre el contexto, sigan leyendo.
Si bien no es un problema que afecte de forma critica al sistema operativo o al funcionamiento de mi equipo, era imposible evitar mirar ese icono gris horrible. Desentonaba mucho. Así que un fin de semana me senté a intentar solucionar el problema. Fueron dos días de investigar cómo hacer que COSMIC mostrara correctamente el icono que debía mostrar, y después de varias pestañas del navegador abiertas, pláticas extensas con CLAUDE y cuestionarme en repetidas ocasiones si de verdad valía el tiempo y esfuerzo; lo pude lograr.
¿Qué sucedía?
Por temas de compatibilidad tuve que instalar Flameshot desde la COSMIC Store, la cual hace uso de Flatpak para realizar las instalaciones de las aplicaciones. Hasta el día de hoy no es posible la instalación de Flameshot por apt.
Es con Flatpak donde surge el error de no mostrar correctamente el icono en el tray (panel superior de COSMIC), ya que Flatpak no exporta correctamente dicho icono por defecto. La solución consiste en crear un symlink al icono correcto dentro de una carpeta donde COSMIC sí pueda encontrarlo.
Solución: Guía paso a paso
Los primeros 4 pasos nos ayudarán a localizar el nombre que el tray de COSMIC espera encontrar y donde se encuentra el archivo original dentro de la instalación de Flameshot.
1. Verificar que Flameshot está registrado en el tray
Antes que nada debemos tener Flameshot corriendo en nuestra tray (si vemos el icono feo del engrane y al darle clic se nos abre la GUI para hacer capturas de pantalla, vamos bien. Por lo tanto hay que verificar que Flameshot se ha registrado en los whatchers de COSMIC.
busctl --user get-property org.kde.StatusNotifierWatcher /StatusNotifierWatcher org.kde.StatusNotifierWatcher RegisteredStatusNotifierItemsAl ejecutar dicho comando esperamos obtener una lista de bus names. En mi caso:
NotifierItemsas 3 ":1.149" ":1.151" ":1.159"Si en tu caso no aparece la información deseada, lo siento pero los siguientes pasos no funcionarán. Puede que tu problema no sea tema de los iconos.
2. Localizar el objeto D-Bus de Flameshot
D-Bus en Linux es un sistema de mensajería. Básicamente, al ejecutar Flameshot, éste se conecta a un D-Bus para exponer un objeto que le dirá al tray de COSMIC dónde puede encontrar los recursos para mostrarse correctamente en el panel.
Vamos a enlistar aquellos que estén relacionados con flameshot con el siguiente comando:
busctl --user list | grep -i flameshotEl comando imprimirá una lista de bus names de la forma :1.XXX correspondientes a Flameshot:
:1.124 5248 flameshot userName :1.124 user@1000.service - -:1.149 5248 flameshot userName :1.149 user@1000.service - -org.flameshot.Flameshot 5248 flameshot userName :1.124 user@1000.service - -Ahora inspeccionaremos su árbol de objetos para confirmar que /StatusNotifierItem existe:
busctl --user tree :1.149 # sustituye :1.149 por tu bus nameSi todo sale bien, podremos confirmar la existencia de /StatusNotifierItem por el siguiente output:
├─ /MenuBar└─ /StatusNotifierItem3. Obtener el valor de IconName que anuncia Flameshot
Aquí empieza la parte importante. Es necesario saber el nombre real del icono que Flameshot anuncia. Este paso es sumamente importante pues utilizaremos dicho valor para crear el icono nosotros mismos. Recuerden sustituir el valor del bus name por el que hayan obtenido en el paso 2:
busctl --user get-property :1.149 /StatusNotifierItem org.kde.StatusNotifierItem IconNameObtendremos un output anunciando el verdadero nombre del icono:
s "flameshot-tray"¡Perfecto! Ya tenemos todo para empezar a solucionar el problema.
4. Localizar el SVG correcto dentro de Flatpak
Como dije en un principio, por alguna extraña razón Flatpak no expone el icono correcto para que COSMIC lo muestre en el panel superior. Es necesario que lo localicemos nosotros mismos dentro de los archivos de instalación.
Para ello hay que localizar la carpeta donde Flatpak gestiona todos sus archivos, en mi caso: ~/.local/share/flatpak. Ahora es momento de buscar el nombre del icono que no se exporta correctamente:
find ~/.local/share/flatpak -name "*flameshot-tray*" 2>/dev/nullEl comando find enlistará todos los archivos cuyo nombre tenga flameshot-tray sin importar el contenido antes y después de dicho nombre. Se enlistarán las rutas de los archivos encontrados:
~/.local/share/flatpak/runtime/org.kde.Platform/x86_64/6.9/<hash>/files/share/icons/breeze/status/22/flameshot-tray.svg~/.local/share/flatpak/runtime/org.kde.Platform/x86_64/6.9/<hash>/files/share/icons/breeze/status/22/flameshot-tray-symbolic.svgLa ruta que se te muestra puede ser más larga debido a que he acortado el valor para el hash de la carpeta con <hash>. Si somos más curiosos podremos observar que en la carpeta ~/.local/share/flatpak/runtime/org.kde.Platform/x86_64/6.9/ podremos encontrar un symlink que apunta al directorio del <hash>. Esto nos puede ayudar para mantener algo de persistencia en caso de que el hash llegue a cambiar. Puedes confirmar esto ejecutando (recuerda cambiar la ruta para tu caso):
ls -l ~/.local/share/flatpak/runtime/org.kde.Platform/x86_64/6.9/Obtendremos algo como lo siguiente, donde el symlink que nos interesa se llama active:
lrwxrwxrwx 1 userName userName 64 Feb 26 16:42 active -> <hash>drwxr-xr-x 3 userName userName 4096 Feb 26 16:42 <hash>5. Crear un symlink donde COSMIC pueda encontrarlo
Ahora toca crear un symlink al archivo que encontramos en el paso anterior. Un lugar en el que es visible y no es necesario entrar en demasiados directorios es la ruta ~/.local/share/icons/hicolor. Navegando a dicha carpeta encontraremos diferentes directorios que agrupan los iconos según su tamaño. Al tratarse de un SVG, podemos agregar el icono de Flameshot dentro del directorio scalable. Dentro del mismo habrá que crear una carpeta llamada status:
mkdir -p ~/.local/share/icons/hicolor/scalable/statusPosteriormente crearemos la referencia al archivo original con ayuda de un symlink:
ln -sf \ ~/.local/share/flatpak/runtime/org.kde.Platform/x86_64/6.9/active/files/share/icons/breeze/status/22/flameshot-tray.svg \ ~/.local/share/icons/hicolor/scalable/status/flameshot-tray.svgListo. Problema solucionado. Solo queda recargar el caché de iconos y comprobar que todo ha funcionado.
6. Reconstruir el caché y reiniciar el panel
Pese a que los archivos se encuentran en el lugar correcto, aún no se deberían de mostrar en el panel. COSMIC cachea los iconos, por lo que es necesario recargar dicho caché para que obtenga el que hemos creado nosotros mismos. Para ello es necesario ejecutar el siguiente comando:
gtk-update-icon-cache -f -t ~/.local/share/icons/hicolorFinalmente hay que reiniciar el panel para comprobar si todo ha salido bien. Para no tener que reiniciar la computadora entera, basta con matar el proceso del panel y COSMIC lo arrancará de manera automática por nosotros:
pkill cosmic-panelAhora deberíamos dejar de ver el icono del engrane gris y mirar el icono correspondiente de flameshot.
Conclusión
Es lo que tiene Linux: a veces solucionar un problema menor requiere más investigación de la esperada, pero la gratificación que produce lograrlo lo vale. Espero que esta guía le haya sido de utilidad a alguien.