Как я могу на Java или другом языке программирования добавить новую группу программ в меню приложений как в KDE, так и в Gnome?
Я тестирую Ubuntu и Kubuntu 8. Помещение простого файла .menu в ~ / .config / menus / applications-merged работало в Kubuntu, но та же процедура ничего не дает в Ubuntu.
Содержание моего файла следующее:
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
<Menu>
<Menu>
<Name>My Program Group</Name>
<Include>
<Filename>shortcut.desktop</Filename>
</Include>
</Menu>
</Menu>
Обратите внимание, что файл .desktop правильно размещен в ~ / .local / share / applications.
Ps: В исходном вопросе не указывалось, что я хочу решение программным способом.





В Gnome используйте System -> Settings -> Menu, затем просто выберите New Menu или New Entry.
Может быть, xdg-desktop-menu это делает? См. man xdg-desktop-menu или http://manpages.ubuntu.com/manpages/hardy/en/man1/xdg-desktop-menu.html.
Вместо того, чтобы копировать эти файлы самому, лучше использовать для работы xdg-desktop-menu.
Спасибо, Оливер. Я использовал xdg-desktop-menu, а затем проанализировал его вывод. Правильный файл меню должен явно называть внешнее меню (Приложения) следующим образом:
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
<Menu>
<Name>Applications</Name>
<Menu>
<Name>My Program Group</Name>
<Include>
<Filename>shortcut.desktop</Filename>
</Include>
</Menu>
</Menu>
Это прекрасно работало в Kubuntu, Ubuntu и Fedora Core 9. Однако не удалось заставить его работать в openSUSE.
Я рекомендую вам изучить стандарты freedesktop.org, которые охватывают это. Актуальный список доступен здесь:
http://www.freedesktop.org/wiki/Specifications/menu-spec
Последний на данный момент 1.0:
http://standards.freedesktop.org/menu-spec/1.0/
Стандартам FreeDesktop.org следуют Gnome, KDE и XFCE, поэтому он должен работать в любом дистрибутиве.
Я взглянул на стандарт, но кажется, что каждый рабочий стол реализует стандарт по-своему. Например, я обнаружил, что в openSUSE файл .directory является обязательным, иначе программная группа не отображается, а в других дистрибутивах она не нужна.
Не уверен, что именно вы имели в виду, говоря «в openSUSE файл .directory является обязательным, иначе программная группа не появится»; в общем, я полагаю, вам нужно дважды вызвать xdg-desktop-menu (один раз для группы программ и один раз для самой программы), и поэтому вам также нужно предоставить два разных файла .directory. Если группа программ пуста, имеет смысл скрыть ее на рабочем столе.
(Но, может быть, я вас совершенно неправильно понял :-) и сам никогда не использовал xdg-desktop-menu).
Я не хотел использовать xdg-desktop-menu. Я сам пытался создать файлы в правильных папках, и в openSUSE у вас должен быть файл каталога, но в Ubuntu и Kubuntu он не пропущен. Но теперь я думаю, что использование xdg-desktop-menu напрямую - лучшее решение.
Вы пытаетесь сделать это в сценарии?