Desktop entries (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Desktop entries. Дата последней синхронизации: 26 октября 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Спецификация 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).

Значки

Смотрите также спецификация тем значков.

Распространённые форматы изображений

Ниже приведён краткий обзор форматов изображений, обычно используемых для значков.

Поддержка форматов изображений для значков, указанных в стандарте freedesktop.org.
Расширение Полное имя и/или описание Тип графики Формат-контейнер Поддерживаемый
.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 определяет, в каких каталогах и в каком порядке программы должны искать значки:

  1. $HOME/.icons (для обратной совместимости)
  2. $XDG_DATA_DIRS/icons
  3. /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=названия_сред, чтобы показать запись только в указанных средах рабочего стола.

Смотрите также