xdg-menu
xdg-menu 是一个生成 XDG 桌面菜单的工具,适用于以下 窗口管理器
KDE、GNOME、Xfce 和 Enlightenment 已支持 XDG。
安装
菜单层次结构
- 应用程序
- 辅助功能
- 附件
- 开发
- 教育
- 游戏
- 图形
- 网络
- 多媒体
- 办公
- 其他
- 科学
- 设置
- 系统
配置
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 将填充将其桌面条目安装到 /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: /etc/xdg/menus/arch-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 中,您必须从窗口管理器列表中选择要为其生成菜单的窗口管理器。允许使用 # 的注释。
所有生成的菜单都放在 /var/cache/xdg-menu/。有关更多信息,请参阅本页的 WM 特定 #示例 部分。
示例
Awesome
使用 xdg_menu
生成菜单
$ xdg_menu --format awesome > ~/.config/awesome/xdg_menu.lua
然后,像下面那样编辑文件 ~/.config/awesome/rc.lua。
- 为您的新
menu.lua文件添加一个 require 语句。 - 为您的
awful.menu对象添加一个调用xdg-menu的新菜单条目。
...
xdg_menu = require("xdg_menu")
...
...
mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
{ "Applications", xdgmenu },
{ "open terminal", terminal }
}
})
...
Blackbox
使用 xdg_menu
生成菜单
$ xdg_menu --format blackbox > ~/.blackbox/xdg_menu
修改文件 ~/blackbox/menu 以包含生成的菜单。例如,添加此行
[include] (xdg_menu)
使用 update-menus
- 在
/etc/update-menus.conf中取消注释 blackbox。 - 以 root 身份运行
update-menus。 - 修改文件
~/blackbox/menu以包含生成的菜单
[include] (/var/cache/xdg-menu/blackbox/boxrc)
Fluxbox
使用 xdg_menu
生成菜单
$ xdg_menu --format fluxbox > ~/.fluxbox/xdg_menu
修改文件 ~/fluxbox/menu 以包含生成的菜单。例如,添加此行
[include] (xdg_menu)
使用 update-menus
- 在
/etc/update-menus.conf中取消注释 fluxbox。 - 以 root 身份运行
update-menus。 - 修改文件
~/fluxbox/menu以包含生成的菜单
[include] (/var/cache/xdg-menu/fluxbox/boxrc)
Fvwm
使用 xdg_menu
生成菜单
$ xdg_menu --format fvwm2 > ~/.fvwm/xdg_menu
修改文件 ~/.fvwm/config 以读取生成的菜单并将其添加到根菜单中
read xdg_menu ... AddToMenu MenuFvwmRoot "Fvwm" Title ... + "&0. Applications" Popup xdg_menu ...
使用 update-menus
- 在
/etc/update-menus.conf中取消注释 fvwm2。 - 以 root 身份运行
update-menus。 - 修改文件
.fvwm以读取生成的菜单并将其添加到根菜单中
read /var/cache/xdg-menu/fvwm2/fvwm2rc ... AddToMenu MenuFvwmRoot "Fvwm" Title ... + "&0. Applications" Popup xdg_menu ...
IceWM
使用 xdg_menu
将以下行添加到 ~/.icewm/menu
includeprog xdg_menu --format icewm
或者只需运行以下命令以添加到 Programs 菜单下方
$ xdg_menu --format icewm >> ~/.icewm/programs
使用 update-menus
- 在
/etc/update-menus.conf中取消注释 icewm。 - 以 root 身份运行
update-menus。 - 将以下行添加到
~/.icewm/menu
include "/var/cache/xdg-menu/icewm/programs"
或者只需在 ~/.icewm/programs 中创建指向 /var/cache/xdg-menu/icewm/programs 的符号链接,以添加到 Programs 菜单下方。
JWM
使用 xdg_menu
将以下行添加到 ~/.jwmrc 的 <RootMenu> 元素下方
<Include>exec: xdg_menu --format jwm --fullmenu</Include>
使用 update-menus
- 在
/etc/update-menus.conf中取消注释 jwm。 - 以 root 身份运行
update-menus。 - 将以下行添加到
~/.jwmrc的<RootMenu>元素下方
<Include>/var/cache/xdg-menu/jwm/menu.xml</Include>
Openbox
将 xdg_open 用作管道菜单,它提供了自动更新菜单的额外好处,当您安装新应用程序时。
将以下行添加到 ~/.config/openbox/menu.xml 的 <menu id="root-menu"> 元素下方
<menu id="applications" label="Applications" execute="xdg_menu --format openbox3-pipe" />
一个非常基本的示例
<?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" />
<separator />
<item label="Log Out">
<action name="Exit">
<prompt>yes</prompt>
</action>
</item>
</menu>
</openbox_menu>
使用 update-menus
- 在
/etc/update-menus.conf中取消注释 openbox。 - 以 root 身份运行
update-menus。 - 将以下行添加到
~/.config/openbox/menu.xml的<menu id="root-menu">元素下方
<menu id="applications" label="Applications" execute="cat /var/cache/xdg-menu/openbox/menu.xml"/>
twm
使用 xdg_menu
使用
$ xdg_menu --format twm > my-twm-menu
并手动将其添加到 ~/.twmrc。对于带有 m4 预处理的 twm 派生版本,如 vtwm 或 ctwm,可以通过添加以下内容包含:
sinclude(`/PATH/TO/my-twm-menu')
到 *twmrc。
使用 update-menus
- 在
/etc/update-menus.conf中取消注释 twm。 - 在
/etc/X11/twm/system.twmrc中添加一个应用程序菜单文件(将其添加到defops menu中)
"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 > 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"
到您的菜单文件中。