Dopo aver fatto qualche ricerca in più, non sembra possibile specificare i percorsi relativi per un'icona in un file di voce del desktop, per quanto posso vedere.
La soluzione alternativa che ho usato è stata quella di aggiungere il seguente codice alla fine del mio script launcher.sh:
mv myapp.desktop myapp.desktop-bak
sed -e "s,Icon=.*,Icon=$PWD/app.svg,g" myapp.desktop-bak > myapp.desktop
rm myapp.desktop-bak
Questo aggiornerà il percorso dell'icona ogni volta che viene eseguito lo script di avvio e poiché il file .desktop punta allo script di avvio, facendo clic sul file .desktop si aggiorna effettivamente la sua icona.
So che potresti usare cat
o l'opzione -i per abbreviare il codice sopra, ma ho letto che la soluzione che ho usato è più affidabile. Se qualcuno ha ulteriori informazioni in merito, è pregato di pubblicare un commento.
È vero che la specifica FreeDesktop non consente percorsi relativi:
Chiavi standard
Icon
Icona da visualizzare in file manager, menu, ecc. Se il nome è un percorso assoluto, verrà utilizzato il file specificato. Se il nome non è un percorso assoluto, verrà utilizzato l'algoritmo descritto nella specifica del tema dell'icona per individuare l'icona.
[ . . . ]
Valori di tipo
iconstring
sono i nomi delle icone; questi possono essere percorsi assoluti o nomi simbolici per le icone individuate utilizzando l'algoritmo descritto nella specifica del tema delle icone. Tali valori non sono visualizzabili dall'utente e sono codificati in UTF-8.
La soluzione alternativa è adeguata, anche se probabilmente non funzionerà per i menu e i pannelli di avvio. Ma se ti senti a tuo agio nel correggere il file desktop quando esegui launcher.sh
script,perché non installare effettivamente l'icona?Puoi farlo in due righe:
cp app.svg ~/.local/share/icons/hicolor/48x48/apps/
cp app.svg ~/.local/share/icons/hicolor/scalable/apps/
e poi metti
Icon=app
nel file desktop (app
è solo il nome del file senza estensione).
Questo è il meccanismo previsto per individuare le icone che non hanno un percorso assoluto e assicurerà che le icone vengano visualizzate nei menu e nei programmi di avvio personalizzati. Le specifiche dicono quanto segue:
Quindi, sei un autore di applicazioni e vuoi installare le icone delle applicazioni in modo che funzionino nei menu di KDE e Gnome. Come minimo dovresti installare un'icona 48x48 nel tema hicolor. Ciò significa installare un file PNG in $prefix/share/icons/hicolor/48x48/apps. Facoltativamente è possibile installare icone di diverse dimensioni. Ad esempio, l'installazione di un'icona svg in $prefix/share/icons/hicolor/scalable/appssignifica che la maggior parte dei desktop avrà un'icona che funziona per tutte le dimensioni.
Un modo per farlo è con il xdg-icon-resource
comando, ad esempio
$ xdg-icon-resource install --novendor --context apps --size 48 example-app.png
Tuttavia, xdg-icon-resource
non supporta le immagini SVG, e in pratica questo fa la stessa cosa:
$ cp example-app.svg ~/.local/share/icons/hicolor/48x48/apps/
$ cp example-app.svg ~/.local/share/icons/hicolor/scalable/apps/
(Non è un errore di battitura:metti il file SVG nel 48x48/apps
cartellae i menu e i pannelli saranno perfettamente felici.)
Per i menu, è una buona idea aggiornare la cache delle icone dopo l'installazione.
$ update-icon-caches ~/.local/share/icons
Quindi puoi semplicemente dare iconstring
come example-app
come questo:
Icon=example-app
Questo non è un percorso relativo, ma risolve il problema di dover utilizzare un percorso assoluto e non si interromperà se il file desktop viene spostato in una posizione diversa.
Per quel che vale, il supporto per i percorsi relativi è stato discusso nella mailing list di FreeDesktop nel settembre 2008:
Magnus Bergmark magnus.bergmark su gmail.com
Mar 23 settembre 01:01:32 PDT 2008
[ . . . ]
Propongo di consentire in qualche modo anche l'uso di percorsi relativi.
Casi d'uso
Uso molti file .directory per fare in modo che le directory contenenti un film abbiano la locandina del film come icona. Questo comportamento potrebbe applicarsi a qualsiasi forma di media, come fumetti, musica (copertine degli album) e foto.
Un venditore potrebbe voler raggruppare un'icona in un pezzo di software che sta distribuendo per andare con un file .desktop che non deve andare nel menu del desktop e quindi si trova ancora nella directory dell'applicazione.
https://lists.freedesktop.org/archives/xdg/2008-September/009940.html
L'unica controargomentazione che sono riuscito a trovare a questa proposta è qui:
Un file .desktop che non è destinato a entrare in una directory di applicazioni standard è quasi del tutto inutile. Forse dovresti dare un'occhiata ad alcune delle proposte e delle implementazioni dei bundle di software, e lavorare invece usando quelle. Un'altra opzione sono gli script xdg utils, per installare il file .desktop e le icone nelle posizioni appropriate. Posso solo presumere che anche l'applicazione disinstallata intenda non seguire le specifiche del tema delle icone e dei nomi delle icone. E non vedo l'impostazione dell'icona della directory come utile davvero. Impostare un'icona per l'eseguibile vero e proprio sarebbe molto più utile, anche se i binari elf non hanno risorse come i binari di win32.
https://lists.freedesktop.org/archives/xdg/2008-September/009962.html
Domande correlate:
- https://askubuntu.com/questions/277190/how-to-package-an-application-icon-properly
- https://unix.stackexchange.com/questions/404955/is-there-a-home-directory-location-for-overriding-icons
- https://unix.stackexchange.com/questions/428992/why-do-freedesktop-desktop-files-not-allow-relative-paths
- https://unix.stackexchange.com/questions/585997/assign-an-icon-to-a-custom-mimetype
Link rilevanti:
- https://gitlab.freedesktop.org/xdg/xdg-utils/-/issues/82
- https://bugs.kde.org/show_bug.cgi?id=68507
- https://bugs.kde.org/show_bug.cgi?id=73463
- https://lists.freedesktop.org/archives/xdg/2008-September/009940.html
- https://lists.freedesktop.org/archives/xdg/2011-April/011883.html
- https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html