Файлы ярлыков приложений (".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

1K постов15.5K подписчиков

Добавить пост

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

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

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

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Спасибо @balaev84av, вроде и много времени прошло, а я нашёл в этой не большой статье ответ на свой вопрос, плюс чуть-чуть нового узнал.

P.S. Ответ был в строке  ~/.local/share/applications

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку