Entregando um ícone de aplicativo Linux sem instalador/gerenciador de pacotes

Entregando um ícone de aplicativo Linux sem instalador/gerenciador de pacotes

História de fundo:

Eu quero:

  1. Entregue um aplicativo como um TAR simples que os usuários extraem e executam
  2. Para que esse aplicativo tenha um ícone de aplicativo adequado.

Sem gerenciador de pacotes, sem sudo, sem script de instalação.

Eu vejo desde opadrãoevários artigosque os ícones do aplicativo exigem um .desktoparquivo que precisa dos caminhos absolutos para o executável (ugh) e o ícone do aplicativo. Também vejo que o Ubuntu Unity (talvez outros) suporta .desktoparquivos em~/.local/share/applications

O Windows suporta isso incorporando ícones em executáveis. O Mac OS X possui uma estrutura de diretório relativa para aplicativos que inclui o ícone.

Solução “hackeada”:

Minha solução “hackeada” é, na inicialização do aplicativo, detectar se myApp.desktopo arquivo existe ~/.local/share/applications/e, se não, escrevê-lo (incluindo o caminho absoluto completo para o executável e o ícone), iniciar um novo processo myApp e sair.

A esperança é que o novo processo myApp selecione o ícone do aplicativo. eàs vezesisso acontece.

O problema:

Esse problema é que preciso de sleep 2alguns segundos antes de iniciar o novo processo. Se eu fizer isso, o ícone será selecionado. Caso contrário, não haverá ícone para meu aplicativo.

Tentei recarregar o cache de ícones do GTK em vez de dormir (com gtk-update-icon-cache /usr/share/icons/hicolor), mas isso não resolve.

Alguém sabe como posso evitar esse atraso e garantir que o .desktoparquivo recém-escrito seja coletado? (Estou liberando e fechando o arquivo.) Ou tem uma ideia melhor do que minha solução hackeada?

Atualizar:Interessante, testar um script simples que grava o .desktoparquivo (manualmente ou comxdg-desktop-menu) e inicia o aplicativo, ele também precisa de um atraso de 2 segundos ou o ícone não aparecerá. Fascinante.

Responder1

Usargtk_window_set_iconou similar (há uma variante _from_file e integração Glade).

Sem root, não acho que você tenha acesso ao cache de ícones, e o carregamento oportuno do arquivo da área de trabalho não parece ser um método confiável, como você descobriu.

informação relacionada