89

Файлы ярлыков приложений (".desktop") и их меню

В Linux значки и описания программ (приложений) хранятся отдельно от исполняемых файлов. Для GUI-программ составляют "файлы рабочего стола" (desktop files), схожие по назначению с ярлыками в Windows. Более удобного имени нет, поэтому пусть и здесь будут ярлыками.


Расширение - ".desktop"; имя любое. Формат ярлыков схож с форматом файлов ".ini" в Windows. То есть это структурированный текст, разделённый на группы; имя группы в квадратных скобках; в группах заданы строки-параметры вида "ключ=значение"; строка-комментарий начинается с #.


Общие ярлыки приложений хранят в /usr/share/applications; свои - в ~/.local/share/applications. Для примера - сценарий оболочки и его ярлык.


Сценарий:


#/usr/bin/env bash


# Сценарий top10t.sh

# Хранить следует здесь: ~/.local/bin/

# Сделать исполняемым: chmod u+x ~/.local/bin/top10t.sh


# Десять самых жадных до процессора процессов/потоков.

# Процессы отсортированы по убыванию жадности.

# Ежесекундное обновление.


/usr/bin/watch -p -n 1 \

"ps k -%cpu -eL -o pid,comm,%cpu | head"


# Завершить - Ctrl C.


Ярлык:


# ~/.local/share/applications/top10t.sh.desktop


# Общее название группы для всех файлов ".desktop".

# Строка [Desktop Entry] - первая; прочие - в любом порядке.

[Desktop Entry]


# Какой версии спецификации соответствует сам этот файл.

# Свежая - 1.1. Не обязательно.

Version=1.0


# Кодировка самого файла. Обычно - UTF-8.

# Списки есть, например, у iconv. Не обязательно (устарело).

# Encoding=UTF-8


# Тип объекта: Application - приложение;

# Directory - категория; Link - ссылка на ресурс Интернета.

Type=Application


# "Категория" здесь - это заголовок подменю

# в общем меню приложений. Здесь не переводится.

# В значении может быть несколько частей,

# их отделять символом ;.

# И в конце строки рекомендуется поставить символ ;.

# Если символ ; используется сам по себе - экранировать: \;.

Categories=System;Utility;


# Команда для запуска. Желательно указать полный путь.

# Можно короткое имя, если программа доступна через $PATH.

# Если нужно запустить с правами суперпользователя,

# то нужно начинать команду, например, с gksudo -gk.

# Понадобится установить программу gksudo или kdesudo.

Exec=top10t.sh


# Рабочий каталог. Не обязательно.

Path=/home/student


# Нужно ли сначала открыть окно эмулятора терминала,

# а потом запустить в нём значение Exec.

# "Да" - true; "нет" - false. Обычно "нет".

Terminal=true


# Файл значка. Обычно указывают короткое имя без расширения.

# Стандартные форматы файлов: PNG, SVG (SVGZ).

# Значки обычно хранят в /usr/share/icons.

Icon=utilities-terminal


# Нужно ли оповещать о запуске: помигать указателем мыши

# или аплетом списка задач и тому подобное. Обычно "да".

StartupNotify=true


# Название ярлыка, видимое как подпись к значку или

# как имя пункта в меню. Здесь на английском.

Name=Top 10 greedy threads


# Желательно перевести. Список условных обозначений

# языков есть, например, у locale.

Name[ru]=Десять самых жадных потоков


# Описание, обычно видимое как всплывающая подсказка.

Comment=Shows Top 10 cpu eating processes/threads


# Желательно перевести.

Comment[ru]=Показывает 10 самых жрущих ЦПУ процессов/потоков


# Не показывать в меню. Обычно "нет".

# Файловые ассоциации, если есть, будут работать.

NoDisplay=false


# Не показывать в меню, убрать из файловых ассоциаций.

# И вообще сделать вид, что приложения не существует.

# Обычно "нет".

Hidden=false


# Показывать только в указанной рабочей среде:

# GNOME, KDE, Xfce, ещё какие-нибудь через ;.

# OnlyShowIn=GNOME;


# Не показывать в указанных рабочих средах.

# В файле должен быть только один из параметров:

# либо OnlyShowIn, либо NotShowIn.

NotShowIn=KDE;


Такие файлы можно помещать на Рабочий стол по необходимости: перетаскиванием; или же копированием/ссылкой файла в ~/Рабочий стол (англоязычный - ~/Desktop). Расположение каталога рабочего стола может быть указано в файле ~/.config/user-dirs.dirs. Его читает программа xdg-user-dirs-update, создавая указанные каталоги.


Проверить синтаксическую корректность ярлыка можно программой desktop-file-validate.


Если нужно на Рабочий стол добавить каталог, то может быть достаточно символьной ссылки. Или составить ярлык, где в Exec будет имя диспетчера файлов либо xdg-open, а потом аргумент - путь к каталогу:


Exec=xdg-open /home/student/Загрузки


В среде GNOME разработчики пытаются запретить размещение файлов на Рабочем столе. Может понадобиться специальное расширение для GNOME Shell.


Ярлык для адреса Интернета имеет другое значение Type и вместо ключа Exec содержит URL:


# Помимо прочего:

Type=Link

URL=https://www.freedesktop.org/wiki/


Адрес будет открыт браузером по умолчанию. Если нужен другой браузер, следует сделать обычный ярлык с Type=Application, далее в Exec задать имя браузера с аргументом-URL.


Есть сколько-то общепринятых категорий в спецификации к файлам меню: Audio, Education, Graphics, System и другие. Файлы категорий синтаксически аналогичны файлам ярлыков. Расширение - ".directory". Хранят их обычно в /usr/share/desktop-directories. Свои - в ~/.local/share/desktop-directories. Пример файла для категории "Система" (условное имя файла - system.directory). Не используйте его как есть.


[Desktop Entry]

Version=1.0

Type=Directory

Icon=preferences-system

Name=System

Name[ru]=Система

Comment=System tools and utilities

Comment[ru]=Средства администрирования системы


Графическая среда обычно автоматически при запуске каждого сеанса пересобирает меню из имеющихся ярлыков и категорий для каждого пользователя.


Формат файлов меню - XML. Расширение - ".menu". Только пример, без пояснений. Не используйте его как есть.


<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE Menu

PUBLIC '-//freedesktop//DTD Menu 1.0//EN'

'http://standards.freedesktop.org/menu-spec/menu-1.0.dtd'>

<Menu>

<Name>System</Name>

<Directory>system.directory</Directory>

<DefaultAppDirs/>

<DefaultDirectoryDirs/>

<MergeDir>applications-merged</MergeDir>

<Layout>

<Merge type="menus" />

<Filename>top10t.sh.desktop</Filename>

<Merge type="files" />

</Layout>

</Menu>


Проверить синтаксическую корректность меню можно программой xmllint. Все меню не проходят валидацию (не находится DTD), вероятно, из-за беспорядка на сайте FreeDesktop.org.


Редакторы меню для GUI: KMenuEdit для KDE; LXMenuEditor (lxmed) для LXDE, требует Java; MenuLibre для GNOME, XFCE; Mozo для Mate.


Свои меню хранят в ~/.config/menus. Точнее, в $XDG_CONFIG_DIRS/menus/${XDG_MENU_PREFIX}applications.menu. Здесь XDG_MENU_PREFIX - это "gnome-", "kde-" и тому подобное.


Своё меню вроде как должно перекрывать (заменять собой) автоматическое. Добавочные (не перекрывание, а слияние) меню хранят в $XDG_CONFIG_DIRS/menus/applications-merged/.


Документация: ярлыки; меню. Для семейства программ xdg-* и desktop-* есть man-страницы. XDG (X Desktop Group) - старое название сообщества FreeDesktop.org.


У Debian (и производных) есть своя система меню, отличающаяся от XDG. Эти меню применяют в разных небольших диспетчерах окон: awesome, fvwm, openbox и других. Документация - в пакете menu.

GNU/Linux

1.2K постов15.6K подписчиков

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества