Источник, спасибо автору
Немного раскрою тему создания и редактирования пунктов системного меню.
Проще всего, конечно, использовать для этого стандартные графические утилиты. Например, подобная в среде Gnome называется
alacarte, запускается такой же командой или из меню по пункту
Главное меню из раздела
Параметры.
В KDE есть аналогичная по функционалу программа —
kmenuedit.Но
могут возникнуть ситуации, где использование подобных инструментов
будет невозможно. Например, лично я столкнулась с этой проблемой, когда
установила среду
LXDE. В ней есть панель (lxpanel) с
меню. И в идеале меню там формируется автоматически на основе списка
установленных программ, но в моём случае, видимо, что-то пошло не так, и
в имевшемся меню не хватало приличного количества пунктов. А
графической утилиты для редактирования не предоставляется, более того:
почти везде написано, что мол меню само формируется и все установленные
программы будут помещены в него. Но ведь оно формируется на основе
чего-то, а следовательно, это что-то должно быть можно править как-то
напрямую и таким образом влиять на это самое меню.
В ходе подобных изысканий, натолкнулась на информацию о
desktop-файлах. Собственно, они-то мне и оказались нужны и именно на их основе в lxde и других средах формируется меню.
Полный охват вопроса не гарантирую, посколько только начала ковырять эту тему, но самые основы тут изложу.
Итак, системное меню формируется на основе всех существующих desktop-файлов. Как несложно догадаться, это файлы с расширением
*.desktop.
Лежат все эти файлы в директории
/usr/share/applications/.
Появлется такой файл там при установке соответствующей программы.
Варианты для определённого пользователя хранятся внутри его домашней
директории по адресу
~/.local/share/applications/.
Соответственно, прежде всего используются файлы из домашней директории, а
всё остальное из общей. И если нужно что-то исправить, то лучше всего
это делать именно в файлах из домашней папки.
Хотя тут зависит и от задачи. Может понадобиться, например, создать
пункт меню для всех пользователей системы. Тогда, конечно, надо работать
с общей папкой с правами суперпользователя. Но нужно учитывать, что
файлы из домашней директории точно не будут затронуты при обновлениях, а
вот насчёт директории
/usr/share/ я не поручусь.
Проще всего понять, как работать с desktop-файлами, просто посмотрев
содержание одного из них. Щелчком на таком файле в файловом менеджере не
всегда получится его открыть — у меня из наутилуса заупускается
соответствующая программа (на которую ссылается сам файл) и через
контекстное меню выбрать нужную программу для открытия тоже нельзя, но
файл открывается из текстового редактора (через меню «Открыть») или из
консоли.
Вот, например, содержание файла
baobab.desktop:
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Disk Usage Analyzer
Comment=Check folder sizes and available disk space
Exec=baobab
Icon=baobab
Terminal=false
Categories=GTK;GNOME;Utility;
NotShowIn=KDE;
|
Строки не обязательно должны быть только эти и не обязательно все
эти, но для начала сгодятся. Все строки, кроме первой, имеют вид
Ключ=Значение.
Соответственно количество возможных ключей ограничено и они описаны
спецификацией. А значения могут быть различными, общие требования — в
них не должны использоваться зарезервированные символы
;,
#,
\, а если используются, то должны быть экранированы символом
\.
Значений у одного ключа может быть несколько и они должны быть
разделены точкой с запятой. Игнорируются пустые строки и начинающиеся с
решётки (закомментированные). Порядок строк может быть любым, кроме
первой, которая всегда должна быть первой.
Теперь разберём по строкам:
- [Desktop Entry] — такая строка должна быть в начале любого desktop-файла по спецификации формата
- Encoding= — указывает кодировку файла; практически всегда это UTF-8
- Type= — тип пункта, описываемого файлом; почти
всегда это Application — приложение, но может быть ещё Link или
Directory (ссылка или директория)
- Name= —
— название приложение, которое будет отображаться в меню, если не
настроена локализация интерфейса или не указано при этом название на
языке локализации
- Comment= — описание пункта (появляется, например, при наведении на пункт меню в Gnome)
- Exeс= — команда запуска приложения; пишется либо
полный пусть к исполняемому файлу, либо просто название — тогда файл с
таким названием система сама будет искать по путям, указанным в
системной переменной PATH (обычно туда входят, например, /bin/ и /usr/bin/)
- Icon= — иконка приложения; можно указывать или
полный путь к файлу иконки, или просто название — тогда иконка будет
браться из текущей темы иконок системы, если такая там есть (темы лежат в
/usr/share/icons/ или в ~/.icons/)
- Terminal= — задаёт, будет ли приложение запускаться в терминале или нет; в данном случае приложение не консольное, поэтому значение false, иначе было бы true
- Categories= — группа в меню, где будет находится
приложение; в данном примере — группа Utility (в русском варианте
интерфейса — Стандартные), остальные группы имеют отношение к
создаваемым меню в различных средах, отличных от Gnome (подробно
рассматривать эту тему слишком долго)
- NotShowIn= — определяет, в каких средах данного
пункта меню не будет видно; в данном случае анализатор диска —
стандартная утилита Gnome, поэтому её не видно в KDE, что, впрочем,
можно исправить как раз редактированием этого desktop-файла
Другие возможные строки:
- Name[ru]= — название приложения на русском языке
(понятно, что для других языков ключ выглядит похоже, но с другими
значениями в квадратных скобках)
- Comment[ru]= — то же самое, что выше, только для описания пункта меню
- NoDisplay= — если значение true, пукт меню будет скрыт
- Hidden= — если значение true, пукт меню будет скрыт и невозможно будет открыть этим приложением какой-либо файл из файлового менеджера
- OnlyShowIn= — при использовании нескольких сред, определяет в какой среде исключительно будет видно данный пункт в меню
Есть и ещё несколько ключей, о которых можно прочитать в
спецификации данного формата.
Для начала, я воспользовалась данной информацией, чтобы поместить значок запуска программы
ДубльГис в системное меню гнома. Программа идёт под вайном и сама ярлык не создаёт, поэтому нужно создать файл
~/.local/share/applications/2gis.desktop следующего содержания:
[Desktop Entry]
Encoding=UTF-8
Type=Application
Categories=
Exec="/home/opossum/.wine/drive_c/Program Files/2gis/3.0/grym.exe"
Icon="/home/opossum/.icons/2gis"
Terminal=false
Name=2gis
Name[ru]=ДубльГис
|
Если категория не определена, как тут, то приложение будет помещено в
подпункт меню «Прочие». Иконка, естественно, должна быть помещена по
тому пути, что прописан в файле.
Ещё, пожалуй, стоит сказать о строке запуска. В значении ключа
Exec
после команды запуска программы могут находиться некоторые аргументы.
Впервые я с ними столкнулась, когда просто редактировала пункты меню
Gnome через программу
alacarte и никто не смог ответить, что же это такое. Поиск тогда тоже результата не дал, а сейчас как-то нашлось само.
Так вот эти аргументы имеют отношение больше не к пункту, отображаемому в меню, а к контекстному меню файлового менеджера.
- %f — один файл
- %F — список файлов
- %u — одна ссылка (URL)
- %U — список ссылок
То есть из контекстного меню файлового менеджера можно будет открыть только один файл какой-либо программой, если в строке
Exec её desktop-файла проставлен аргумент
%f,
и можно будет открыть сразу несколько файлов (если программа это
позволяет), выделив их и выбрав соответствующий пункт контекстного меню,
если в desktop-файле прописан аргумент
%F.
Это тоже можно найти в спецификации. Аргументов есть ещё несколько.