Путь к значку в файле .desktop

11

На моем рабочем столе есть файл .desktop. Если я наберу:

Icon=/home/ianbell/Pictures/myLogo.png

значок файла .desktop изменится (ожидаемый результат).

Но если я наберу:

Icon=~/Pictures/myLogo.png

это не работает

Разве это не ~/ярлык /home/$USER?

Якоб Влейм
источник
1
~ коротка для вашего домашнего каталога только в оболочке.
user253751
@JacobVlijm: извините, я заснул, я программирую день и ночь :-)
1
@IanBell Хаха, я знаю это чувство :)
Джейкоб Влейм
/ home / $ USER не будет работать. Кажется, вы ищете - / home / $ (whoami). Смотрите мои комментарии ниже.
Аджай Кумар

Ответы:

10

Использование путей в файле .desktop

В .desktopфайле вам нужно использовать абсолютные и полные пути. Поэтому ~не расширяется.

Это часто совершаемая ошибка :)

Исключения, касающиеся значков, описаны здесь :

Значок для отображения в файловом менеджере, меню и т. Д. Если имя является абсолютным путем, будет использован данный файл. Если имя не является абсолютным путем, для определения значка будет использован алгоритм, описанный в спецификации темы значков.

и здесь :

Поле значка - это значок, который должен использоваться программой запуска, и представляет приложение. Для всех значков, которые находятся в каталоге /usr/share/pixmaps, необязательно указывать полный путь, но имя файла без расширения. Например, если файл значков есть /usr/share/pixmaps/wallch.png, то поле значков должно быть просто «wallch». Для всех остальных значков должен быть указан полный путь.

Больше информации

В .desktopфайле:

В Icon=строке, которые разрешается использовать пробелы:

Icon=/home/jacob/Thema/icon/some folder/some icon.png

Это хорошо.

Однако

В Exec=строке вам не разрешено использовать пробелы, если только в случае аргумента . Во всех остальных случаях вам нужно заключить шаги пути в пробел:

Exec=/home/jacob/Bureaublad/some folder/application

потерпит неудачу, пока

Exec="/home/jacob/Bureaublad/some folder/application"

или

Exec=/home/jacob/Bureaublad/"some folder"/application

будет работать нормально

Якоб Влейм
источник
Итак, как мне ссылаться на путь относительно «домашнего каталога пользователя»?
Аарон Франке
Аарон Франке, вы можете использовать $ (whoami) для получения текущего имени пользователя. Я не пробовал, но это должно работать - для домашнего каталога для текущего пользователя - / home / $ (whoami).
Аджай Кумар
Я пытался, и это работает Аарон.
Аджай Кумар
4

Короче говоря, путь .desktopк Icon=файлу понимает абсолютные пути, но не расширение тильды из-за спецификации, которая определяет, как .desktopфайлы должны работать.

Расширение тильды

  • Где вы могли бы увидеть, что ~расширение tilde ( ) для $HOMEпеременной среды часто находится, например, в bash, которая является обычной оболочкой входа, с которой вы взаимодействуете в командной строке
  • bash и другие POSIX-совместимые оболочки выполняют расширение тильды в $ HOME в соответствии со спецификацией POSIX для оболочек

файлы .desktop

  • Однако .desktopфайл - это не то же самое, что оболочка, это простой текстовый файл конфигурации, поэтому он не обязательно будет работать одинаково, даже если .desktopфайлы и оболочки могут быть найдены в Linux.
  • как .desktopдолжен работать файл, определяется в Спецификации входа рабочего стола Freedesktop

Спецификация рабочего стола, касающаяся Icons, гласит:

Если имя является абсолютным путем, будет использован данный файл.

Вот почему вы смогли использовать абсолютные пути, так как это охватывается спецификацией

Если имя не является абсолютным путем, для определения значка будет использован алгоритм, описанный в спецификации темы значков.

Когда мы проверяем Спецификацию Темы Иконок , ничто не говорит о том, что она вообще должна следовать за расширением тильды POSIX.

Резюме

Таким образом, в связи с техническим Freedesktop относительно .desktop«s Icon=настройки, абсолютные пути поддерживаются, но , как вы обнаружили, POSIX тильда-to $ HOME разложение не являются.

clarity123
источник