Я просмотрел файлы .desktop в моей системе Ubuntu 12.04, и у многих из них нет полного пути к файлу значков. Это скорее что-то вроде:
Icon=anjuta
или
Icon=vlc
или
Icon=application-x-clementine
Есть ли общий путь, по которому значки могут быть сохранены, чтобы это могло работать? Если нет, то как это работает? Если я попытаюсь сделать то же самое с моими собственными значками, мне придется указать полный путь.
например.
Icon=/usr/local/share/my-icon.png
работает нормально, но
Icon=my-icon.png
не работает.
Приветствуется любая помощь!
Да, поиск довольно сложный. Вот спецификации значков freedesktop для макетов каталогов:
Значки и темы ищутся в наборе каталогов. По умолчанию приложения должны искать в $ HOME / .icons (для обратной совместимости), в $ XDG_DATA_DIRS / icons и в / usr / share / pixmaps (именно в таком порядке) . Приложения могут также добавлять свои собственные каталоги значков в этот список, и пользователи могут расширять или изменять список (в приложении / на рабочем столе специфическими способами) .В каждом из этих каталогов темы хранятся как подкаталоги. Тема может быть распределена по нескольким базовым каталогам. имея подкаталоги с тем же именем. Таким образом пользователи могут расширить и переопределить системные темы.
Чтобы сторонние приложения могли устанавливать свои иконки всегда должна существовать тема под названием "hicolor" 1 . Данные для темы hicolor можно скачать по адресу: http://www.freedesktop.org/software/icon-theme/ . Реализации требуется искать в теме "hicolor", если значок не был найден в текущая тема.
Каждая тема хранится как подкаталоги базовых каталогов. В внутреннее имя темы - это имя подкаталога, хотя видимое пользователем имя, указанное в теме, может отличаться. Следовательно, имена тем чувствительны к регистру и ограничены ASCII. символы. Имена тем также не могут содержать запятую или пробел.
По крайней мере в одном из каталогов тем должен быть файл с именем index.theme, который описывает тему. Первая найденная index.theme при поиске в базовых каталогах по порядку. Этот файл описывает общие атрибуты темы.
В каталоге темы также есть набор подкаталогов, содержащих файлы изображений. Каждый каталог содержит значки, предназначенные для определенного номинальный размер значка, как описано в файле index.theme. В подкаталоги могут иметь несколько уровней глубины, например в подкаталог «48x48 / apps» в теме «hicolor» окажется в $ basedir / hicolor / 48x48 / apps.
Файлы изображений должны быть одного из типов: PNG, XPM или SVG, а расширение должно быть «.png», «.xpm» или «.svg» (нижний регистр). Поддержка для файлов SVG не является обязательным. Реализации, не поддерживающие SVG следует просто игнорировать любые файлы ".svg". В дополнение к этому может быть дополнительный файл с дополнительными значками-данными для каждого файла. Он должен иметь то же базовое имя, что и у файла изображения, с расширением ".icon". например если файл значка называется "mime_source_c.png", соответствующий файл будет называться "mime_source_c.icon".
Полные спецификации гораздо более исчерпывающи, чем это, но суть в том, что есть заданные каталоги, в которые вы можете просто поместить значки, и рабочий стол их найдет. Что из этого лучше всего подходит вам, зависит от вашей проблемы и вашего терпения :)
Если вы поместите значки в / usr / share / icons /
(для всей системы) или в свой домашний ~ / .icons
, то вы может использовать только имя файла значка без расширения в файле .desktop. Например,
Icon=vlc
В противном случае необходимо использовать абсолютный путь к значку в файле .desktop. Например,
Icon=/usr/local/share/my-icon.png
У меня есть опыт работы только с эмблемами, а не с иконками, но это должно сработать:
mkdir -p $HOME/.icons/hicolor/48x48/
поместите иконку в этом каталоге, предположим, это myicon.png
cp myicons.png $HOME/.icons/hicolor/48x48/
Добавьте файл описания:
gedit $HOME/.icons/hicolor/48x48/myicon.icon
с содержимым:
[Icon Data]
DisplayName=myicon
, и теперь ваша строка Icon = myicon
должна работать. Он работает с эмблемами, если вы поместите их в подкаталог emblems:
Благодаря @Oli теперь я знаю , почему это работает :-)