Xdg-menu
xdg-menu是一個用於為以下窗口管理器生成XDG桌面菜單的工具:
KDE, Gnome, Xfce,Enlightenment已經兼容XDG。
安裝
安裝archlinux-xdg-menu包包。
菜單層級結構
- 應用
- 輔助功能
- 附件
- 開發
- 教育
- 遊戲
- 圖形
- 網際網路
- 多媒體
- 辦公
- 其他
- 科學
- 設置
- 系統
配置
Xdg_menu依賴三類信息來生成菜單:一個根菜單(即通常通過命令行傳入的 XML 菜單模板)、上次運行時緩存的信息,以及一系列配置文件。
- 你可以在
/etc/xdg/menus中找到一些XML菜單模板. - 如果更改 xdg_menu 的代碼以更改菜單布局,請確保刪除
~/.xdg_menu_cache中的所有內容,否則你可能將花費數小時試圖弄明白為什麼對Perl腳本所做的修改沒有生效。 - 各個應用程式的配置文件位於
/usr/share/applications。
其他配置文件目錄可以在/usr/share下找到。在大多數情況下,你無需改動這些文件。不過,如果你希望調整菜單的布局,可以通過修改菜單模板以進行小幅調整。若需大幅改動,則需要直接修改Xdg_menu的Perl腳本本身。
如果你發現某些應用程式未顯示在菜單中,或者其名稱顯示異常,那麼你需要檢查 /usr/share/applications 目錄下的相應 .desktop 文件,並參考桌面入口規範。
從其他目錄添加桌面入口
默認情況下,Xdg-menu會加載那些將桌面入口(desktop entry)安裝到/usr/share/applications的應用程式。若要將桌面入口安裝在用戶目錄(例如~/.local/share/applications)中的應用程式也加入菜單的菜單中,需編輯/etc/xdg/menus/arch applications.menu文件,並為相關目錄添加<AppDir>標籤,如下所示:
/etc/xdg/menus/arch-applications.menu
<Menu> <Name>Applications</Name> <Directory>Arch-Applications.directory</Directory> <DefaultAppDirs/> <AppDir>/home/username/.local/share/applications</AppDir> <DefaultDirectoryDirs/> <DefaultMergeDirs/> ...
使用
xdg_menu
xdg_menu [--format <format>] [--desktop <desktop>]
[--charset <charset>] [--language <language>]
[--root-menu <root-menu>] [--die-on-error]
[--fullmenu] [--help]
format - output format
possible formats: twm, WindowMaker, fvwm2, icewm, ion3
blackbox, fluxbox, openbox,
xfce4, openbox3, openbox3-pipe, awesome
readable
default: WindowMaker
fullmenu - output a full menu and not only a submenu
desktop - desktop name for NotShowIn and OnlyShowIn
default: the same as format
charset - output charset
default: <locale>
language - output language
default: <locale>
root-menu - location of root menu file
default: /opt/gnome/etc/xdg/menus/applications.menu
die-on-error - abort execution on any error,
default: try to continue
verbose - print debugging information
help - print this text
update-menus
update-menus 可根據 XDG 數據更新窗口管理器(WM)的菜單,並可配置為自動執行此操作。
該腳本是xdg_menu的一個封裝,依賴於 /etc/update-menus.conf配置文件
要使用它,你需要安裝 archlinux-xdg-menu包 (其中包含xdg_menu)
在/etc/update-menus.conf 文件中,你需要從支持的窗口管理器列表中選擇需要為其生成菜單的WM。配置文件中允許使用#添加注釋。
所有生成的菜單都會存放在/var/cache/xdg-menu/目錄下。有關具體窗口管理器的配置示例,請參閱本頁的「WM特定示例」部分。
示例
Awesome窗口管理器
使用 xdg_menu :
$ xdg_menu --format awesome > ~/.config/awesome/xdg_menu.lua
編輯 rc.lua ,按如下方式更改
- 添加一行require語句,以加載你生成的xdg_menu.lua文件
- 在你的awful.menu對象中添加一個菜單項,調用xgd_menu生成的應用程式菜單
...
xdg_menu = require("xdg_menu")
...
...
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
{ "Applications", xdg_menu },
{ "open terminal", terminal }
}
})
...
IceWM
使用 xdg_menu
$ xdg_menu --format icewm --fullmenu --root-menu /etc/xdg/menus/arch-applications.menu >>~/.icewm/programs
使用 update-menus
- 在 /etc/update-menus.conf 取消對icewm的注釋
- 使用root用戶運行 update-menus 命令
- 將 ~/.icewm/programs 符號連結到 /var/cache/xdg-menu/icewm/programs
Ion3
使用 xdg_menu
$ xdg_menu --format ion3 --root-menu /etc/xdg/menus/arch-applications.menu >~/.ion3/default-session--0/_xdg-menu.lua
之後,將 cfg_menus.lua 更改為包含 _xdg-menu.lua 文件,並將菜單添加到主菜單中。例如:
...
dopath("_xdg-menu")
-- Main menu
defmenu("mainmenu", {
submenu("XDG Menu", "<NAME-OF-FIRST-MENU-IN-_xdg-menu.lua-FILE>"),
submenu("Programs", "appmenu"),
menuentry("Lock screen", "ioncore.exec_on(_, 'xlock')"),
menuentry("Help", "mod_query.query_man(_)"),
menuentry("About Ion", "mod_query.show_about_ion(_)"),
submenu("Styles", "stylemenu"),
submenu("Session", "sessionmenu"),
})
...
使用update-menus
- 在 /etc/update-menus.conf 取消對ion3的注釋
- 使用root用戶運行 update-menus 命令
- 將 cfg_menus.lua 更改為包含 xdg-menu.lua 文件,並將菜單添加到主菜單中
例如:
...
dopath("/var/cache/xdg-menu/ion3/xdg-menu.lua")
-- Main menu
defmenu("mainmenu", {
submenu("XDG Menu", "<NAME-OF-FIRST-MENU-IN-xdg-menu.lua-FILE>"),
submenu("Programs", "appmenu"),
menuentry("Lock screen", "ioncore.exec_on(_, 'xlock')"),
menuentry("Help", "mod_query.query_man(_)"),
menuentry("About Ion", "mod_query.show_about_ion(_)"),
submenu("Styles", "stylemenu"),
submenu("Session", "sessionmenu"),
})
...
FluxBox
使用 xdg_menu
$ xdg_menu --format fluxbox --root-menu /etc/xdg/menus/arch-applications.menu >~/.fluxbox/my-menu
將菜單文件更改為包含生成的菜單。
例如添加行:
[include] (my-menu)
使用 update-menus
- 在 /etc/update-menu.conf 中取消對fluxbox的注釋
- 使用root用戶運行 update-menus
- 將菜單文件更改為包含生成的菜單
例如添加行:
[include] (/var/cache/xdg-menu/fluxbox/boxrc)
OpenBox
使用 xdg_menu
生成菜單:
$ xdg_menu --format openbox3 --root-menu /etc/xdg/menus/arch-applications.menu > xdg-menu.xml
然後手動將其添加到 menu.xml 中。例如,將 xdg-menu.xml 放入 menu.xml 並添加:
<menu id="Applications" />
進入根菜單。
作為管道菜單
使用 xdg_open 作為管道菜單,您可以獲得額外的好處,即在安裝新應用程式時,菜單會自動更新。
在 menu.xml 中的根菜單標記之間添加以下內容:
<menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" />
一個非常基本的例子:
<?xml version="1.0" encoding="UTF-8"?> <openbox_menu xmlns="http://openbox.org/3.4/menu"> <menu id="root-menu" label="Openbox 3"> <menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe --root-menu /etc/xdg/menus/arch-applications.menu" /> <separator /> <item label="Log Out"> <action name="Exit"> <prompt>yes</prompt> </action> </item> </menu> </openbox_menu>
使用 update-menus
- 在 /etc/update-menu.conf 中取消對openbox的注釋
- 以root用戶運行 update-menus
- 將 menu.xml 文件更改為包含生成的菜單
例如,在根菜單中添加以下內容:
<menu id="xdg-menu" label="XDG Menu" execute="cat /var/cache/xdg-menu/openbox/menu.xml"/>
Twm
使用 xdg_menu
使用
$ xdg_menu --format twm --root-menu /etc/xdg/menus/arch-applications.menu >my-twm-menu
並手動添加到 twmrc 中。對於具有m4預處理的twm衍生物,如vtwm或ctwm,可通過添加
sinclude(`/PATH/TO/my-twm-menu')
到 *twmrc.
使用 update-menus
- 在 /etc/update-menu.conf 中取消對twm的注釋
- 添加到 /etc/X11/twm/system.twmrc 文件應用程式菜單中 (添加以下這行:
"apps" f.menu "Applications"
)到菜單中
- 使用root用戶運行 update-menus
- 運行 twm -f /var/cache/xdg-menu/twm/twmrc
(您還需要將其他自定義項添加到 /etc/X11/twm/system.twmrc)
WindowMaker
使用 xdg_menu
使用
$ xdg_menu --format WindowMaker --root-menu /etc/xdg/menus/arch-applications.menu >my-wm-menu
然後添加
#include "my-wm-menu"
到你的 WindowMaker 菜單文件。
您還可以使用WPrefs「應用程式菜單定義」,並將xdg命令作為參數添加到「生成的子菜單」對象中。
使用 update-menus
- 在 /etc/update-menus.conf 取消對 WindowMaker 的注釋
- 用root用戶運行 update-menus
- 添加
#include "/var/cache/xdg-menu/WindowMaker/wmrc"
到你的菜單文件
Fvwm2
使用 xdg_menu
生成菜單
$ xdg_menu --format fvwm2 --root-menu /etc/xdg/menus/arch-applications.menu >fvwm2-menu
然後把菜單添加到根菜單
read fvwm2-menu AddToMenu MenuFvwmRoot "Root Menu" Title + "&0. XDG Menu" Popup xdg_menu
使用 update-menus
- 在 /etc/update-menus.conf 取消對 fvwm2 的注釋
- 使用root用戶運行 update-menus
- 修改你的 .fvwm2rc 以使其包含創建的菜單,示例:
AddToMenu MenuFvwmRoot "Root Menu" Title + "&0. XDG Menu" Popup xdg_menu
read /var/cache/xdg-menu/fvwm2/fvwm2rc
BlackBox
使用 xdg_menu
$ xdg_menu --format blackbox --root-menu /etc/xdg/menus/arch-applications.menu >my-menu
修改你的菜單文件以使其包含創建的菜單
例如添加:
[include] (my-menu)
使用 update-menus
- 在 /etc/update-menus.conf 取消 blackbox 的注釋
- 使用root用戶運行 update-menus
- 更改你的菜單文件以使其包含創建的菜單
例如添加:
[include] (/var/cache/xdg-menu/blackbox/boxrc)