Desktop entries (Русский)
Спецификация XDG Desktop Entry определяет стандарт для приложений для интеграции в среду рабочего стола. Ярлыки приложений — это файлы конфигурации, описывающие, как запускается приложение и какие данные оно может обрабатывать. Они также настраивают, как и с каким значком отображаются приложения в меню, по спецификации XDG Desktop Menu.
Основы
Каждый ярлык должен иметь ключи Type
и Name
и может опционально определять свой вид в меню приложений.
Существует три типа ярлыков:
- Application
- Ярлык приложения, который указывает способ его запуска и типы MIME, которые оно поддерживает (используется в XDG MIME Applications). С помощью XDG Autostart можно реализовать автозапуск приложений, помещая их в определённые каталоги. Ярлыки приложений используют расширение файла
.desktop
. Смотрите раздел #Ярлык приложения.
- Link
- Ярлык на URL-адрес. Ссылки используют расширение файла
.desktop
.
- Directory
- Определяет внешний вид подменю в меню приложения. Используется расширение файла
.directory
.
В следующих разделах кратко описывается, как они создаются и проверяются.
Ярлык приложения
Ярлыки приложений, или файлы .desktop
, как правило, представляют собой комбинацию метаинформационных ресурсов и ярлыков приложений. Эти файлы обычно находятся в /usr/share/applications/
или /usr/local/share/applications/
для приложений, установленных в системе, или ~/.local/share/applications/
для пользовательских приложений. Пользовательские ярлыки имеют приоритет над системными ярлыками.
Пример файла
Ниже приведён пример его структуры с дополнительными комментариями. Этот пример предназначен только для быстрого ознакомления и не демонстрирует все возможные ключи. Полный список ключей можно найти в спецификации freedesktop.org.
[Desktop Entry] # Тип ярлыка Type=Application # Версия спецификации ярлыков приложений, которой соответствует этот файл Version=1.0 # Название приложения Name=jMemorize # Комментарий, который может/будет использоваться в качестве подсказки Comment=Flash card based learning tool # Путь к папке, в которой выполняется исполняемый файл Path=/opt/jmemorise # Исполняемый файл приложения, возможно с аргументами. Exec=jmemorize # Имя значка, который будет использоваться для отображения этого ярлыка. Icon=jmemorize # Описывает, должно ли это приложение запускаться в терминале или нет Terminal=false # Описывает категории, в которых должна отображаться этот ярлык Categories=Education;Languages;Java;
Type
и Name
являются обязательными.Определение ключа
Все распознаваемые ключи описаны на сайте freedesktop.org.
Например, ключ Type
определяет три типа ярлыков: Application (тип 1), Link (тип 2) и Directory (тип 3).
- Ключ
Version
обозначает версию спецификации, которой соответствует файл ярлыка, а не версию приложения.
Name
,GenericName
иComment
часто содержат избыточные значения в виде комбинаций из них, например:
Name=Pidgin Internet Messenger GenericName=Internet Messenger
или
Name=NoteCase notes manager Comment=Notes Manager
Этого следует избегать, поскольку это только будет запутывать пользователей. Ключ Name
должен содержать только имя или хотя бы аббревиатуру/акроним, если они доступны.
GenericName
должен указывать на категорию приложения, которая обозначает особый признак этого конкретного приложения (например, Firefox это «Веб-браузер»).Comment
должен содержать любую полезную дополнительную информацию.
Проверка
Некоторые ключи со временем объявляются устаревшими. Вы можете проверить наличие устаревших ключей в своих ярлыках с помощью инструмента desktop-file-validate(1), который является частью пакета desktop-file-utils. Чтобы проверить, выполните
$ desktop-file-validate ваш-desktop-файл
Это даст вам очень подробные и полезные предупреждения и сообщения об ошибках.
Установка
Используйте desktop-file-install(1) для установки ярлыка в целевой каталог. Например:
$ desktop-file-install --dir=$HOME/.local/share/applications ~/app.desktop
Обновление базы данных ярлыков
Чтобы ярлыки из каталога ~/.local/share/applications
заработали, выполните следующую команду:
$ update-desktop-database ~/.local/share/applications
-v
(verbose).Значки
Смотрите также спецификация тем значков.
Распространённые форматы изображений
Ниже приведён краткий обзор форматов изображений, обычно используемых для значков.
Расширение | Полное имя и/или описание | Тип графики | Формат-контейнер | Поддерживаемый |
---|---|---|---|---|
.png | Portable Network Graphics | Растровая | Нет | Да |
.svg(z) | Scalable Vector Graphics | Векторная | Нет | Да (опционально) |
.xpm | X PixMap | Растровая | Нет | Да (устаревший) |
.gif | Graphics Interchange Format | Растровая | Нет | Нет |
.ico | MS Windows Icon Format | Растровая | Да | Нет |
.icns | Apple Icon Image | Растровая | Да | Нет |
Преобразование значков
Если вы наткнулись на значок, который находится в формате, который не поддерживается стандартом freedesktop.org (например, gif
или ico
), вы можете использовать инструмент convert (который является частью пакета imagemagick), чтобы преобразовать его в поддерживаемый/рекомендованный формат, например:
$ convert <icon name>.gif <icon name>.png
Если вы преобразуете из формата-контейнера, такого как ico
, вы получите все изображения, которые содержались в файле ico
в форме <icon name>-<number>.png
. Если вы хотите узнать размер изображения или количество изображений в файле контейнера, например ico
, вы можете использовать инструмент identify (также часть пакета imagemagick):
$ identify /usr/share/vlc/vlc48x48.ico
/usr/share/vlc/vlc48x48.ico[0] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[1] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[2] ICO 128x128 128x128+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[3] ICO 48x48 48x48+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[4] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[5] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb
Как вы можете видеть, на примере файла ico, что по названию можно предположить одно изображение размером 48x48, но на самом деле оно содержит не менее 6 разных размеров, из которых один больше 48x48, а именно 128x128.
Кроме того, вы можете использовать icotool (из icoutils) для извлечения png-изображений из контейнера ico:
$ icotool -x <icon name>.ico
Для извлечения изображений из контейнера .icns вы можете использовать icns2png (предоставленный libicns):
$ icns2png -x <icon name>.icns
Получение значков
Хотя пакеты, которые уже поставляются с файлом .desktop, наверняка содержат значок или набор значков, иногда бывает, что разработчик не создал файл .desktop, но тем не менее может предоставлять значки. Поэтому неплохо начать поиск значков в исходном пакете. Вы можете, например, сначала фильтровать расширение с помощью find, а затем использовать grep для дальнейшей фильтрации по определённым ключевым словам, таких как имя пакета, «icon», «logo» и т.д., если изображений достаточно много в исходном пакете.
$ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"
Если разработчики приложения не включают значки в свои исходные пакеты, тогда следующим шагом будет поиск значков на их сайте. В некоторых проектах, например, tvbrowserAUR, есть страница с изображениями и логотипами, где могут быть найдены дополнительные значки. Если проект мультиплатформенный, может случиться так, что в пакете linux/unix отсутствует значок, тогда пакет Windows может предоставить его. Если в проекте используется система управления версиями, например CVS/SVN и т.д., и у вас есть некоторый опыт работы с ней, то можно попробовать поискать значки там. Если ничего не получается — возможно, у проекта просто ещё нет логотипа.
Расположение значков
Стандарт freedesktop.org определяет, в каких каталогах и в каком порядке программы должны искать значки:
$HOME/.icons
(для обратной совместимости)$XDG_DATA_DIRS/icons
/usr/share/pixmaps
Инструменты
arronax
Arronax — это графическая программа для создания и изменения ярлыков приложений и мест.
alacarte
alacarte — это графический редактор меню для GNOME, использующий спецификацию меню freedesktop.org. Он также поддерживает переопределение ярлыков.
gendesk
gendesk стартовал как инструмент, специально предназначенный для Arch Linux для генерации файлов .desktop, путём сбора необходимой информации непосредственно из файлов PKGBUILD. Теперь это общий инструмент, который принимает аргументы командной строки.
Значки могут быть автоматически загружены из openiconlibrary, если они доступны. (Источник значков можно легко изменить в будущем).
Как использовать
- Добавьте
gendesk
в makedepends
- В начале функции
prepare()
добавьте:
gendesk --pkgname "$pkgname" --pkgdesc "$pkgdesc"
- Если файл значка уже есть (например, $pkgname.png), используйте флаг
-n
для отключения скачивания значка или использования значка по умолчанию. Пример:
gendesk -n --pkgname "$pkgname" --pkgdesc "$pkgdesc"
$srcdir/$pkgname.desktop
будет создан и может быть установлен в функцииpackage()
с помощью:
install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
- Значок можно установить с помощью:
install -Dm644 "$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"
- Используйте
--name='Program Name'
для выбора имени для пункта в меню.
- Для установки поля exec используйте
--exec='/opt/some_app/elf --with-ponies'
.
- Смотрите проект gendesk для получения дополнительной информации.
lsdesktopf
lsdesktopfAUR может отображать доступные файлы .desktop или искать их содержимое.
$ lsdesktopf $ lsdesktopf --list $ lsdesktopf --list gtk zh_TW,zh_CN,en_GB
Он также может выполнять поиск по типу MIME. Смотрите приложения по умолчанию#lsdesktopf.
fbrokendesktop
Скрипт fbrokendesktopAUR с использованием команды which для обнаружения сломанного Exec
, который указывает на не существующий путь. Без каких-либо параметров он использует предварительно установленные каталоги в массиве DskPath
. Он показывает только сломанный .desktop с полным отсутствием пути и имени файла.
Примеры
$ fbrokendesktop $ fbrokendesktop /usr $ fbrokendesktop /usr/share/xsessions/icewm.desktop
Советы и рекомендации
Запуск ярлыка через терминал
Если установлен gtk3, выполните gtk-launch приложение.desktop
.
Или установите dex и выполните dex /путь/к/приложению.desktop
.
Изменение ярлыков
Если файл .desktop, который вы хотите отредактировать, является системным (то есть предоставляется пакетом), сперва скопируйте его (например, из /usr/share/applications/
) в $XDG_DATA_HOME/applications/
(например, ~/.local/share/applications/
). Это предотвратит перезапись ваших изменений во время обновления системы. Локальные пользовательские файлы .desktop имеют приоритет над общесистемными файлами. Теперь вы можете изменять свой локальный файл .desktop как вам угодно.
$XDG_CONFIG_HOME/autostart
уже есть копия ярлыка, согласно XDG Autostart. Если вы хотите изменить поведение только при автозапуске, отредактируйте только эту копию. В противном случае, если вы хотите изменить поведение во всех ситуациях, вам следует:
- Переместить ярлык из
$XDG_CONFIG_HOME/autostart/
в$XDG_DATA_HOME/applications/
. - С помощью команды
ls -l
убедиться, что этот ярлык является обычным файлом, который можно редактировать, а не ссылкой на общесистемный файл. Если это ссылка, замените её копией оригинала, как описано выше. - Создайте символическую ссылку в каталоге автозапуска (в этом примере команды подставлены стандартные пути к каталогам XDG для удобства):
ln -s ~/.local/share/applications/ярлык ~/.config/autostart/
Теперь для автозапуска и для обычного ярлыка будет использоваться один и тот же файл.
Изменение переменных окружения
Чтобы прописать переменные окружения в файле .desktop, измените строку Exec=
, добавив в неё использование команды env(1) для установки переменных. Пример (исходная строка закомментирована):
~/.local/share/applications/abiword.desktop
... # Exec=abiword %U Exec=env LANG=he_IL.UTF-8 abiword %U ...
Изменение аргументов командной строки
Чтобы изменить или добавить аргументы командной строки, измените строку Exec=
, добавив в неё нужные параметры. Пример (исходная строка закомментирована):
~/.local/share/applications/steam.desktop
... # Exec=/usr/bin/steam-runtime %U Exec=/usr/bin/steam-runtime -no-browser %U ...
Скрытие ярлыков
Видимость ярлыка можно контролировать несколькими способами. Дополнительную информацию смотрите в Desktop Entry Specification. Добавьте одну из следующих строк в файл .desktop:
- Все среды рабочего стола, выберите один из следующих вариантов (или оба):
- Добавьте строку
NoDisplay=true
для приложений, которые вы не хотите отображать в меню. - Добавьте строку
Hidden=true
для приложений, которые вы считаете удалёнными и не хотите отображать в меню.
- Добавьте строку
- Определённые среды рабочего стола — выберите один из следующих вариантов, где
названия_сред
- список сред рабочего стола, разделённых точкой с запятой (например,GNOME
,GNOME;Xfce;KDE;
):- Добавьте строку
NotShowIn=названия_сред
, чтобы скрыть запись только в указанных средах рабочего стола. - Добавьте строку
OnlyShowIn=названия_сред
, чтобы показать запись только в указанных средах рабочего стола.
- Добавьте строку