窗口管理器 Openbox 入门指南 (2)
说明:本系列文章仍在撰写中,尚未最终完成,请大家暂时不要转载。待完成后,我会出一个 PDF 版本,方便大家阅读。
目录表
配置 Openbox
当 Openbox 安装完成后,其默认的选项设置可能并不合你意。因此,你可以根据自己的使用习惯来对 Openbox 进行配置。要配置 Openbox,既可以采用图形化的工具,也可以直接编辑文件手动配置。
使用 ObConf
ObConf 是一个图形化的 Openbox 配置工具,可以完成一些基本的配置,包括:
- 安装、选用或打包 Openbox 主题
- 配置外观 (像窗口按钮布局、字体等) 及窗口行为
- 配置虚拟桌面及桌面边距
- 配置 Dock
可以使用以下指令来安装 ObConf。
在 Archlinux 中,可以执行:
pacman -S obconf
Debian/Ubuntu 用户可以执行:
sudo apt-get install obconf
Fedora 用户可执行:
yum install obconf
启动后的 ObConf 如下图所示:

鉴于 ObConf 的操作非常直观,在此就不赘述了。大家花点时间琢磨一下,很快就可以上手。
创建菜单
最直接配置 Openbox 的方式是手工编辑其配置文件。不过,在编辑之前,一些语法规则是需要我们掌握的。Openbox 默认的菜单文件 (系统级) 位于:
/etc/xdg/openbox/menu.xml
当你在桌面右击鼠标时,将显示 Openbox 的 Root 菜单。通过此菜单,用户可以执行启动应用程序、注销、退出等操作。
为了避免更新 Openbox 程序时该文件被覆盖,复制一份到:
mkdir ~/.config/openbox
cp /etc/xdg/openbox/menu.xml ~/.config/openbox/
从 menu.xml 文件的扩展名我们可以看出这是一个 XML 文件。使用任何文本编辑器皆可打开该文件。除了文件首行的 XML 声明外,所有的 Openbox 菜单项目都是由 <openbox_menu> 标签所包围的。
1、一级菜单
首先,让我们来创建一个一级菜单。要定义一个菜单,我们需要使用 <menu> 标签。该标签具有 id、label、以及 execute 属性:
- id:每一个菜单项目都必须指定一个唯一的 id,以用来区分其他菜单项目。
- label:用来描述一个菜单的名称。
- execute:执行一个命令,常用于创建动态菜单。
例如,我们可以将 Openbox 的 Root 菜单定义如下:
<menu id="root-menu" label="Openbox Root Menu">
...
</menu>
如果一个菜单中没有任何项目,我想是不能称其为真正的菜单吧。所以,我们还需要为菜单创建具体的菜单项目。要定义菜单项目,我们可以使用 <item> 标签。与 <menu> 标签一样,<item> 标签也具有描述菜单项目名称的 label 属性。我们试着扩展上面的例子:
<menu id="root-menu" label="Openbox Root Menu">
<item label="URxvt">
...
</item>
...
</menu>
现在,我们已经有了一个名为 URxvt 的菜单项目。根据该名称的命名初衷,我们当然希望通过该菜单项目能够启动 URxvt 终端程序。要完成这个任务,我们需要使用 <action> 标签。该标签主要用来执行一个操作,比如启动程序。<action> 标签具有 name 属性。我们继续扩展先前的例子:
<menu id="root-menu" label="Openbox Root Menu">
<item label="URxvt">
<action name="Execute">
...
</action>
</item>
...
</menu>
该例中 name 属性已经包含了“Execute”值,其作用是启动一个程序。
我想,你已经猜到接下来我们需要做什么了。要启动程序,没有具体的命令是不行的。这可以通过 <command> 标签来完成。我们仍以前面的例子来说明:
<menu id="root-menu" label="Openbox Root Menu">
<item label="URxvt">
<action name="Execute">
<command>urxvt</command>
</action>
</item>
...
</menu>
值得一提的是,命令可以附带路径或选项参数。
2、几个特殊的菜单项目
在此,我们介绍几个较为特殊的菜单项目:
- 分隔线:可以使用 <separator> 标签在菜单项目间绘制一条分隔线。<separator> 标签同样具有 label 属性。需要注意的是,因为 <separator> 标签没有具体的内容,所以在关闭该标签时,应照下面的方式进行:
<separator />这是另一个例子,包含 label 属性:
<separator label="tools" /> - 重新配置 Openbox:使用该菜单项目的好处是,当你对 Openbox 的配置文件进行修改后,不必注销系统便可即时生效。该菜单项目定义如下:
<item label="Reconfigure"> <action name="Reconfigure" /> </item>注意,这里 <action> 标签的关闭方式与 <separator> 一样。
- 重新启动 Openbox:
<item label="Restart"> <action name="Restart" /> </item> - 退出 Openbox:
<item label="Exit"> <action name="Exit" /> </item> - 注销会话:
<item label="Session Logout"> <action name="SessionLogout" /> </item>注意,需要启动带会话支持的 Openbox 才有效。
3、二级菜单
掌握了创建一级菜单的方法,二级菜单则如法炮制即可。当二级菜单创建完毕之后,可按以下方法加入一级菜单:
<menu id="tool-menu" />
附:我的 menu.xml 文件,仅供参考。
[待续]
这个顶起来。收藏起来。
又想试试openbox了。。。等写完再说。
定制性很强,呵呵。
toy这么快出了,支持
有个pipe menu功能,在官方有个位置链接可以找到,自动生成系统安装了的软件,然后可以通过pipe menu功能在菜单中显示出来,不过一直使用fbpanel, xfce4-panel所以很久也没用那菜单了,
这个不顶,还顶啥?!!!:)
太响应人民需求了,这么快就出来了,赞,现在正在openbox下对照这篇文章学习
等TOY写完这一系列,我有时间会写一些关于xmonad、wmii、dwm、awesomewm等tiling WM的介绍
@phabulosa: 期待 phabulosa 兄的大作。
等pdf出来打印一份,呵呵
我觉得用习惯一个WM/Desktop,换另一种又要改习惯。。头大。。
腾讯Linux QQ竟不能在openbox中运行,运行时QQ界面狂闪。
两个问题!
1. 我有pypanel,怎么设置它?我想调整宽度,变大一点,想把上面的时间也调大一点,小的看的累
2. 有没有什么办法设定进入openbox 就能调用pypanel.不用去点击它才出来.
谢谢
@cagewang
1.编辑 ~/.pypanelrc 文件。
2.可以加入 Openbox 的自动启动脚本,或 ~/.xinitrc。