Backstory:
Quiero:
- Entregar una aplicación como un simple TAR que los usuarios extraen y ejecutan.
- Para que la aplicación tenga un icono de aplicación adecuado.
Sin gestor de paquetes, sin sudo, sin script de instalación.
Veo desde el estándar y varios artículos que los iconos de aplicaciones requieren una .desktop
archivo que necesita las rutas absolutas al ejecutable (ugh) y al icono de la aplicación. También veo que Ubuntu Unity (quizás otros) soporta .desktop
archivos en ~/.local/share/applications
Windows lo admite al incrustar íconos en ejecutables. Mac OS X tiene una estructura de directorios relativa para aplicaciones que incluye el icono.
Solución "Hackish":
Mi solución "hackish" es, al inicio de la aplicación, detectar si myApp.desktop
el archivo existe en ~/.local/share/applications/
, y si no, escríbalo (incluyendo la ruta absoluta completa al ejecutable y el ícono), inicie un nuevo proceso myApp y salga.
La esperanza es que el nuevo proceso myApp recoja el ícono de la aplicación. y algunas veces lo hace.
El problema:
Este problema es, tengo que sleep 2
Segundos antes de lanzar el nuevo proceso. Si lo hago, se recoge el icono. Si no lo hago, no hay ningún icono para mi aplicación.
He intentado volver a cargar la caché de iconos GTK en lugar de dormir (con gtk-update-icon-cache /usr/share/icons/hicolor
) pero eso no hace el truco.
Alguien sabe cómo puedo evitar este retraso y asegurar el nuevo escrito. .desktop
archivo es recogido? (Estoy limpiando y cerrando el archivo). ¿O tiene una idea mejor que mi solución de hackers?
Actualizar: Interesante, probando un script sencillo que escribe el .desktop
archivo (ya sea manualmente o con xdg-desktop-menu ) y lanza la aplicación, también necesita un retraso de 2 segundos o el icono no se mostrará. Fascinante.
/usr
directorio, a menos que use rutas no estándar para software compartido o permita el acceso de escritura a áreas que normalmente solo son de lectura / ejecución. Quizás te interese investigar el.bundle
formato utilizado por VMware y otros, aunque no puedo recordar si solicita una contraseña..bundle
El formato es como un instalador autoextraíble, consideraría un script de instalación, por lo que preferiría evitarlo. Gracias por tus sugerencias!.bundle
Varias veces me impresionó lo bien que se fue todo. Parece manejar todos los diferentes sabores de Linux, en lugar de.deb
,.rpm
, etc., que están vinculados a grupos de distribución particulares. Básicamente es un archivo de script enorme con binarios incrustados, y debe haber herramientas para construirlo. Por lo que es un script de instalación, pero bastante flexible, y agregó sin problemas los atajos del escritorio y del menú de la aplicación. UNAtar
El archivo debería extraerse en un lugar conocido: estoy bastante seguro de que no se pueden usar rutas como$HOME/
dentro de ella.Respuestas:
Utilizar gtk_window_set_icon o similar (hay una variante de _from_file, y la integración de Glade).
Sin root, no creo que tenga acceso a la caché de iconos, y la carga oportuna del archivo de escritorio no parece ser un método confiable como lo ha descubierto.
fuente