Entrega de un ícono de aplicación de Linux sin instalador / administrador de paquetes


1

Backstory:

Quiero:

  1. Entregar una aplicación como un simple TAR que los usuarios extraen y ejecutan.
  2. 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.


Si desea instalar para todos los usuarios, necesitará privilegios de root para copiar archivos en el /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.
AFH

"Si desea instalar para todos los usuarios, necesitará privilegios de root para copiar archivos en el directorio / usr", a la derecha, y si sigo adelante y hago un script de instalación, puede que pregunte, luego configure el archivo .desktop. Pero no me gustan los scripts del instalador, especialmente los que se descargan de Internet y solicitan root. De ahí mi petición de simplicidad de "extraer y ejecutar". Si .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!
Jeff Ward

He instalado el VMware .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. UNA tar El archivo debería extraerse en un lugar conocido: estoy bastante seguro de que no se pueden usar rutas como $HOME/ dentro de ella.
AFH

1
No usar paquetes es un mal estilo. Por lo general, debe proporcionar rpm y deb al menos.
Nils

Respuestas:


1

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.


Ooh, interesante, voy a ver esto, gracias!
Jeff Ward
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.