Setelah melakukan penelitian lebih lanjut, sepertinya tidak mungkin menentukan jalur relatif untuk ikon di file entri desktop sejauh yang saya bisa lihat.
Solusi yang saya gunakan adalah menambahkan kode berikut di akhir skrip launcher.sh saya:
mv myapp.desktop myapp.desktop-bak
sed -e "s,Icon=.*,Icon=$PWD/app.svg,g" myapp.desktop-bak > myapp.desktop
rm myapp.desktop-bak
Ini akan memperbarui jalur ikon setiap kali skrip peluncur dijalankan, dan karena file .desktop menunjuk ke skrip peluncur, mengeklik file .desktop memperbarui ikonnya secara efektif.
Saya tahu Anda bisa menggunakan cat
atau opsi -i untuk mempersingkat kode di atas tetapi saya telah membaca bahwa solusi yang saya gunakan lebih dapat diandalkan. Jika ada yang memiliki informasi lebih lanjut tentang itu, silakan kirim komentar.
Benar bahwa spesifikasi FreeDesktop tidak mengizinkan jalur relatif:
Kunci Standar
Icon
Ikon untuk ditampilkan di pengelola file, menu, dll. Jika namanya adalah jalur absolut, file yang diberikan akan digunakan. Jika nama bukan jalur absolut, algoritme yang dijelaskan dalam Spesifikasi Tema Ikon akan digunakan untuk menemukan ikon.
[ . . . ]
Nilai jenis
iconstring
adalah nama ikon; ini mungkin jalur absolut, atau nama simbolis untuk ikon yang terletak menggunakan algoritme yang dijelaskan dalam Spesifikasi Tema Ikon. Nilai tersebut tidak dapat ditampilkan oleh pengguna, dan dikodekan dalam UTF-8.
Solusinya memadai, meskipun mungkin tidak akan bekerja untuk menu dan peluncur panel. Namun jika Anda merasa nyaman untuk menambal file desktop saat menjalankan launcher.sh
skrip, mengapa tidak memasang ikonnya? Anda dapat melakukannya dalam dua baris:
cp app.svg ~/.local/share/icons/hicolor/48x48/apps/
cp app.svg ~/.local/share/icons/hicolor/scalable/apps/
lalu taruh
Icon=app
di file desktop (app
hanyalah nama file tanpa ekstensi file).
Ini adalah mekanisme yang dimaksudkan untuk menemukan ikon yang tidak memiliki jalur absolut, dan akan memastikan ikon muncul di menu dan peluncur khusus. Spesifikasinya berbunyi:
Jadi, Anda adalah pembuat aplikasi, dan ingin menginstal ikon aplikasi agar berfungsi di menu KDE dan Gnome. Minimal Anda harus memasang ikon 48x48 di tema hicolor. Ini berarti menginstal file PNG di $prefix/share/icons/hicolor/48x48/apps. Secara opsional, Anda dapat menginstal ikon dalam berbagai ukuran. Misalnya, memasang ikon svg di $prefix/share/icons/hicolor/scalable/apps berarti sebagian besar desktop akan memiliki satu ikon yang berfungsi untuk semua ukuran.
Salah satu cara yang dapat dilakukan adalah dengan xdg-icon-resource
perintah, mis.
$ xdg-icon-resource install --novendor --context apps --size 48 example-app.png
Namun, xdg-icon-resource
tidak mendukung gambar SVG, dan dalam praktiknya ini menyelesaikan hal yang sama:
$ cp example-app.svg ~/.local/share/icons/hicolor/48x48/apps/
$ cp example-app.svg ~/.local/share/icons/hicolor/scalable/apps/
(Itu bukan salah ketik:letakkan file SVG di 48x48/apps
folderdan menu dan panel akan sangat senang.)
Untuk menu, sebaiknya perbarui cache ikon setelah menginstal.
$ update-icon-caches ~/.local/share/icons
Kemudian Anda cukup memberikan iconstring
sebagai example-app
seperti ini:
Icon=example-app
Ini bukan jalur relatif, tetapi menyelesaikan masalah keharusan menggunakan jalur absolut dan tidak akan rusak jika file desktop dipindahkan ke lokasi lain.
Untuk apa nilainya, dukungan untuk jalur relatif telah dibahas di milis FreeDesktop pada bulan September 2008:
Magnus Bergmark magnus.bergmark di gmail.com
Sel 23 Sep 01:01:32 PDT 2008
[ . . . ]
Saya mengusulkan agar kami juga mengizinkan penggunaan jalur relatif dalam beberapa cara.
Kasus penggunaan
Saya menggunakan banyak file .directory untuk membuat direktori yang berisi film dengan ikon poster film. Perilaku ini dapat berlaku untuk segala bentuk media, seperti buku komik, musik (seni album), dan foto.
Vendor mungkin ingin memaketkan ikon ke perangkat lunak yang mereka distribusikan ulang dengan file .desktop yang tidak boleh masuk ke menu desktop dan karena itu masih berada di direktori aplikasi.
https://lists.freedesktop.org/archives/xdg/2008-September/009940.html
Satu-satunya argumen tandingan yang dapat saya temukan untuk proposal ini ada di sini:
File .desktop yang tidak dimaksudkan untuk masuk ke direktori aplikasi standar hampir seluruhnya tidak berguna. Mungkin Anda harus melihat beberapa proposal dan implementasi bundel perangkat lunak, dan bekerja dengan menggunakan itu, sebagai gantinya. Pilihan lainnya adalah skrip utils xdg, untuk menginstal file .desktop dan ikon di tempat yang sesuai. Saya hanya dapat berasumsi bahwa aplikasi Anda yang dihapus juga bermaksud untuk tidak mengikuti spesifikasi Tema Ikon dan Penamaan Ikon. Dan saya tidak menganggap menyetel ikon direktori sebagai sesuatu yang berguna. Menyetel ikon untuk executable sebenarnya akan jauh lebih berguna, meskipun binari elf tidak memiliki sumber daya seperti binari win32.
https://lists.freedesktop.org/archives/xdg/2008-September/009962.html
Pertanyaan terkait:
- 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
Tautan yang relevan:
- 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