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/ - описания ссылок на приложения (ярлыков) меню.
/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 -->
<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 -->
....
<!-- Other -->
<Menu>
<Name>Other</Name>
<Directory>lxde-other.directory</Directory>
<Include>
<And>
<Category>Other</Category>
</And>
</Include>
</Menu>
<!-- End Other -->
....
Далее. Меня не устраивает ограниченный набор разделов меню для группирования программ.
К сожалению, как я понял, сейчас генератор меню XDG не работает с произвольными категориями, оперируя только списком зарегистрированных в стандарте. Потому приходится выбирать из того, что есть. В частности, мне понадобились следующие категории для группирования приложений:
Geography
RemoteAccess
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
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
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 -->
....
<!-- 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;
....
....
# Categories=Application;Network;
Categories=Geography;
....
Для скрытия отображения приложения в меню правим параметр "NoDisplay", применяя ему значение "true":
# cat /usr/share/applications/google-earth.desktop
[Desktop Entry]
....
NoDisplay=true
....
....
NoDisplay=true
....
В общем-то, на этом всё. Как правило, в работе более тридцати-сорока приложений не бывает, а из них лишь пять-десять отображаются не там, где хотелось-бы; думаю, что пробежаться по такому небольшому количеству конфигурационных файлов, расположенных в одном месте, не составит труда.
Меню перерисовывается из шустро реагирующего на изменения "кеша" с каждым его запросом, так что никаких команд перечитывания конфигурации отдавать не нужно. Но, на всякий случай:
$ killall lxpanel
$ find ~/.cache/menus -name '*' -type f -print0 | xargs -0 rm
$ lxpanel -p LXDE &
$ find ~/.cache/menus -name '*' -type f -print0 | xargs -0 rm
$ lxpanel -p LXDE &
Если установлено приложение "lxpanelctl", то дело делается ещё проще:
$ lxpanelctl restart
Gnome меня никогда не привлекал, уж и не знаю почему. KDE, после выпуска четвёртой версии, просто с треском вынесло из зоны моих интересов. За последний год я перебрал кучку DE, пока не остановился на LXDE. Давно не нуждаюсь в "свистелках и перделках", так что эта легковесная среда, где реально нет ничего лишнего, полностью меня устраивала, за исключением бестолкового меню. Теперь я просто доволен.
3 июня 2012 в 21:52
4 июня 2012 в 10:31
4 июня 2012 в 12:59
27 сентября 2012 в 18:44
27 сентября 2012 в 19:44