Это правда, что спецификация FreeDesktop не разрешает относительные пути:
Стандартные ключи
Icon
Значок для отображения в файловом менеджере, меню и т. д. Если имя представляет собой абсолютный путь, будет использоваться данный файл. Если имя не является абсолютным путем, алгоритм, описанный в Спецификации темы значков будет использоваться для поиска значка.
[ . . . ]
Значения типа iconstring
— это имена иконок; это могут быть абсолютные пути или символические имена для значков, расположенных с использованием алгоритма, описанного в теме значков. Спецификация. Такие значения не отображаются пользователем и кодируются в UTF-8.
Обходной путь является адекватным, хотя он, вероятно, не будет работать для меню и панелей запуска. Но если вам удобно исправлять файл рабочего стола при запуске скрипта launcher.sh
, почему бы не установить значок? Вы можете сделать это в две строки:
cp app.svg ~/.local/share/icons/hicolor/48x48/apps/
cp app.svg ~/.local/share/icons/hicolor/scalable/apps/
а потом поставить
Icon=app
в файле рабочего стола (app
— это просто имя файла без расширения).
Это предполагаемый механизм для поиска значков, у которых нет абсолютного пути, и он обеспечит отображение значков в меню и пользовательских средствах запуска. В спецификации говорится следующее:
Итак, вы автор приложения и хотите установить значки приложений, чтобы они работали в меню KDE и Gnome. Как минимум вы должны установить иконку 48x48 в теме hicolor. Это означает установку файла PNG в $prefix/share/icons/hicolor/48x48/apps. По желанию можно установить иконки разных размеров. Например, установка значка svg в $prefix/share/icons/hicolor/scalable/apps означает, что на большинстве рабочих столов будет один значок, который подходит для всех размеров.
Один из способов сделать это — использовать команду xdg-icon-resource
, например
$ xdg-icon-resource install --novendor --context apps --size 48 example-app.png
Однако xdg-icon-resource
не поддерживает изображения SVG, и на практике это выполняет то же самое:
$ cp example-app.svg ~/.local/share/icons/hicolor/48x48/apps/
$ cp example-app.svg ~/.local/share/icons/hicolor/scalable/apps/
(Это не опечатка: поместите файл SVG в папку 48x48/apps
, и меню и панели будут совершенно счастливы.)
Для меню рекомендуется обновить кеш значков после установки.
$ update-icon-caches ~/.local/share/icons
Затем вы можете просто указать iconstring
как example-app
следующим образом:
Icon=example-app
Это не относительный путь, но он решает проблему использования абсолютного пути и не сломается, если файл рабочего стола будет перемещен в другое место.
Что бы это ни стоило, поддержка относительных путей обсуждалась в списке рассылки FreeDesktop еще в сентябре 2008 года:
Магнус Бергмарк magnus.bergmark на gmail.com
Вт 23 сен 01:01:32 PDT 2008
[ . . . ]
Я предлагаю также каким-то образом разрешить использование относительных путей.
Случаи использования
Я использую много файлов .directory, чтобы каталоги, содержащие фильм, имели постер фильма в качестве значка. Такое поведение может применяться к любым формам медиа, таким как комиксы, музыка (обложки альбомов) и фотографии.
Поставщик может захотеть связать значок с частью программного обеспечения, которое они распространяют, с файлом .desktop, который не должен отображаться в меню рабочего стола и, следовательно, все еще находится в каталоге приложения.
https://lists.freedesktop.org/archives/xdg/2008-September/009940.html
Единственный контраргумент, который я смог найти на это предложение, находится здесь:
Файл .desktop, который не предназначен для размещения в стандартном каталоге приложений, почти полностью бесполезен. Возможно, вам следует взглянуть на некоторые из предложений и реализаций пакетов программного обеспечения и вместо этого работать с ними. Другой вариант — скрипты xdg utils для установки файла .desktop и значков в соответствующие места. Я могу только предположить, что ваше удаленное приложение также не намерено следовать спецификациям темы значков и именования значков. И я не считаю настройку значка каталога действительно полезной. Установка значка для фактического исполняемого файла была бы гораздо полезнее, хотя двоичные файлы elf не имеют ресурсов, как двоичные файлы win32.
https://lists.freedesktop.org/archives/xdg/2008-September/009962.html
Связанные вопросы:
Соответствующие ссылки:
person
Nathaniel M. Beaver
schedule
04.08.2020