UMGUM.COM 

Причёсываем главное меню LXDE ( Упорядочиваем главное меню приложений рабочего окружения LXDE для Debian Lenny/Squeeze. )

19 февраля 2012  (обновлено 29 декабря 2014)

OS: Debian Linux Lenny/Squeeze.
DE: LXDE (Lightweight X11 Desktop Environment).

Задача: причесать растрёпанное "главное меню", где приложения распределены инсталляторами по разделам самым произвольным и бестолковым образом.

Меню KDE или Gnome очень удобно редактируется с помощью специальных приложений, входящих в комплекты соответствующих дистрибутивов. Для LXDE пока ничего, кроме правки конфигурационных файлов вручную не придумали. Если не углубляться в детали спецификации XDG (X Desktop Group), описывающей свойства и методы построения окружения "рабочего стола" пользователя, то для изменения представления меню следует воздействовать на три набора конфигурационных файлов:

/etc/xdg/menus/ - непосредственно описание "главного меню" (в нашем случае это файл "lxde-applications.menu");
/usr/share/desktop-directories/ - описания разделов (директорий) меню;
/usr/share/applications/ - описания ссылок на приложения (ярлыков) меню.


Естественно, что перед корректировкой конфигурационного файла мы сохраним его резервную копию. Понятно, что оригинальный файл всегда можно достать из дистрибутивного набора, но такова традиция и лучше ей следовать, чем забывать о резервировании до тех пор, пока не случится "упс":

# cp /etc/xdg/menus/lxde-applications.menu /etc/xdg/menus/lxde-applications.menu.dist

Первым делом удаляем из конфигурационного файла описание раздела "Other", в который сваливается перечень всего установленного в системе программного обеспечения. Для балующегося ежемесячной установкой новых дистрибутивов это может и хорошо - можно посмотреть, чего разработчики натыкали, вплоть до мелких утилит; но в реальной работе вываливание неструктурированного месива из ссылок на приложения при каждом движении мыши по меню раздражает.

В общем, удаляем всё, что находится между соответствующими тегами (включительно, разумеется):

# cat /etc/xdg/menus/lxde-applications.menu

....
<!-- Other -->
  <Menu>
    <Name>Other</Name>
  ....
  </Menu>
<!-- End Other -->
....

Можно не удалять раздел, а предписать ему отображать подборку программ, обусловленную названием (например: "Other"). Правда, я не встречал ПО, тегированное в "desktop"-файле таким образом, но тем забавнее - вдруг обнаружится:

# cat /etc/xdg/menus/lxde-applications.menu

....
<!-- Other -->
  <Menu>
    <Name>Other</Name>
    <Directory>lxde-other.directory</Directory>
    <Include>
      <And>
        <Category>Other</Category>
      </And>
    </Include>
  </Menu>
<!-- End Other -->
....

Далее. Меня не устраивает ограниченный набор разделов меню для группирования программ.

К сожалению, как я понял, сейчас генератор меню XDG не работает с произвольными категориями, оперируя только списком зарегистрированных в стандарте. Потому приходится выбирать из того, что есть. В частности, мне понадобились следующие категории для группирования приложений:

Geography
RemoteAccess

Прежде чем включать новые разделы в список отображаемых меню, требуется описать их соответствующими "directory"-файлами, укладывающимися, в соответствии со спецификацией, в следующих местах: "/usr/share/desktop-directories" и "~/.local/share/desktop-directories".

Готовим описание двух разделов для меню:

# touch /usr/share/desktop-directories/lxde-geography.directory

[Desktop Entry]
Name=Geography
Name[ru]=География
Comment=Geography menu
Comment[ru]=География
# Icon=applications-geography
Icon=applications-other
Type=Directory

# touch /usr/share/desktop-directories/lxde-remoteaccess.directory

[Desktop Entry]
Name=RemoteAccess
Name[ru]=Удалённый доступ
Comment=RemoteAccess menu
Comment[ru]=Удалённый доступ
# Icon=applications-remoteaccess
Icon=applications-other
Type=Directory

После того, как описания разделов подготовлены, включим их в общий список, обозначив, при этом, какие категории программного обеспечения будут в них отображаться:

# cat /etc/xdg/menus/lxde-applications.menu

....
<!-- Geography -->
  <Menu>
    <Name>Geography</Name>
    <Directory>lxde-geography.directory</Directory>
    <Include>
      <And>
        <Category>Geography</Category>
      </And>
    </Include>
  </Menu>
<!-- End Geography -->
....
<!-- RemoteAccess -->
  <Menu>
    <Name>RemoteAccess</Name>
    <Directory>lxde-remoteaccess.directory</Directory>
    <Include>
      <And>
        <Category>RemoteAccess</Category>
      </And>
    </Include>
  </Menu>
<!-- End RemoteAccess -->
....

Теперь, когда мы описали достаточное количество дополнительных разделов, следует распределить по ним приложения. Есть простенькая программка написанная на Java (http://sourceforge.net/projects/lxmed/), которая вроде как претендует на звание первого динозавра в цепочке эволюции редакторов меню, но она не умеет создавать дополнительных категорий и работает только с базовым набором таковых (AudioVideo, Development, Education, Game, Graphics, Network, Office, Settings, System, Utility), что для моих нужд смехотворно мало. Потому будем творить руками.

В общем-то, для выполнения поставленной цели, удобного распределения приложений по разделам и сокрытия ненужных, никаких сверхъестественных усилий применять не нужно. Достаточно отредактировать "desktop"-файл приложения, заменив категорию или установив флаг "неотображения". В соответствии со спецификацией "desktop"-файлы устанавливаемых приложений раскладываются по директориям "~/.local/share/applications" и "/usr/share/applications".

Для смены категории отображения правим значение параметра "Categories", перечисляя "теги" через точку с запятой:

# cat /usr/share/applications/google-earth.desktop

[Desktop Entry]
....
# Categories=Application;Network;
Categories=Geography;
....

Для скрытия отображения приложения в меню правим параметр "NoDisplay", применяя ему значение "true":

# cat /usr/share/applications/google-earth.desktop

[Desktop Entry]
....
NoDisplay=true
....

В общем-то, на этом всё. Как правило, в работе более тридцати-сорока приложений не бывает, а из них лишь пять-десять отображаются не там, где хотелось-бы; думаю, что пробежаться по такому небольшому количеству конфигурационных файлов, расположенных в одном месте, не составит труда.

Меню перерисовывается из шустро реагирующего на изменения "кеша" с каждым его запросом, так что никаких команд перечитывания конфигурации отдавать не нужно. Но, на всякий случай:

$ killall lxpanel
$ find ~/.cache/menus -name '*' -type f -print0 | xargs -0 rm
$ lxpanel -p LXDE &

Если установлено приложение "lxpanelctl", то дело делается ещё проще:

$ lxpanelctl restart

Gnome меня никогда не привлекал, уж и не знаю почему. KDE, после выпуска четвёртой версии, просто с треском вынесло из зоны моих интересов. За последний год я перебрал кучку DE, пока не остановился на LXDE. Давно не нуждаюсь в "свистелках и перделках", так что эта легковесная среда, где реально нет ничего лишнего, полностью меня устраивала, за исключением бестолкового меню. Теперь я просто доволен.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )