Histórico:
Eu quero:
- Entregue um aplicativo como um TAR simples que os usuários extraem e executam
- Para que o aplicativo tenha um ícone de aplicativo adequado.
Nenhum gerenciador de pacotes, nenhum sudo, nenhum script de instalação.
Eu vejo no padrão e vários artigos que os ícones de aplicativos exigem um arquivo .desktop
que precisa dos caminhos absolutos para o executável (ugh) e ícone do aplicativo. Eu também vejo que o Ubuntu Unity (talvez outros) suporta .desktop
arquivos em ~/.local/share/applications
O Windows suporta isso incorporando ícones em executáveis. O Mac OS X possui uma estrutura de diretórios relativa para aplicativos que inclui o ícone.
Solução "Hackish":
Minha solução "hackish" é, na inicialização do aplicativo, detectar se myApp.desktop
file existe em ~/.local/share/applications/
e, se não, gravá-la (incluindo o caminho absoluto completo para executável e ícone), iniciar um novo processo myApp e sair .
A esperança é que o novo processo myApp capte o ícone do aplicativo. e às vezes faz.
O problema:
Esse problema é, eu tenho que sleep 2
segundos antes de lançar o novo processo. Se eu fizer isso, o ícone é escolhido. Se não tiver, não há ícone para meu aplicativo.
Eu tentei recarregar o cache de ícone do GTK em vez de dormir (com gtk-update-icon-cache /usr/share/icons/hicolor
), mas isso não funciona.
Alguém sabe como posso evitar esse atraso e garantir que o arquivo .desktop
recém-escrito seja retirado? (Eu estou lavando e fechando o arquivo.) Ou ter uma idéia melhor do que a minha solução hackea?
Atualização: Interessante, testando um script simples que grava o arquivo .desktop
(manualmente ou com xdg-desktop-menu ) e inicia o aplicativo, ele também precisa de um atraso de 2 segundos ou o ícone não será exibido. Fascinante.