安装配置fluxbox桌面环境

安装

基本系统Ubuntu 7.10 Gutsy,Xfce桌面。直接安装源里的fluxbox:

aptitude install fluxbox

版本1.0.0-1,大小只有1058k。安装完成后,检查一下/usr/share/xsessions/fluxbox.desktop文件,里面已经有Exec=/usr/bin/startfluxbox,不用修改了。重启X,(应该会自动创建~/.fluxbox/startup配置文件。

在X登录界面,Sessions选择Fluxbox,并设置为默认session。输入用户名密码进入系统之后,只看见一个光板的桌面,下面有一条工具栏,想截屏来着,可按PrintScreen键没反应,作罢。不过说真的,进入桌面的速度真的很快。工具栏上点右键可以调出工具栏的设置,桌面上点中键可以调出虚拟桌面的设置,但在桌面上点右键没反应,原来是fluxbox默认配置的问题(害我瞎折腾半天)。

菜单

fluxbox安装完成后默认的菜单配置文件~/.fluxbox/menu内容如下:

[begin] (fluxbox)
[include] (/etc/X11/fluxbox/fluxbox-menu)
[end]

而include的这个菜单文件根本就不存在,所以就没有菜单出现喽。现在我来手工加点内容吧:

[begin] (fluxbox)
[exec] (Firefox) {/usr/bin/firefox}
[exec] (Bash) {x-terminal-emulator -T "Bash" -e /bin/bash --login}
[include] (/etc/X11/fluxbox/fluxbox-menu)
[end]

现在,不用重启或重开X,在桌面上点右键,怎么样,一个小小的菜单出来了吧,内容只有两项:Bash和Firefox,选中后会打开相应的程序。不过真要这样一个一个的把菜单配置全可就累死了,本来fluxbox自带一个菜单生成程序fluxbox-generate_menu的,但在Gutsy中没有,虽然它只是一个脚本,可以自己去下载一个单独用,不过手动一下:

sudo update-menus

然后再重启Fluxbox就好了,根据当前系统中原有桌面系统(比如Gnome、Xfce)软件安装情况,自动把menu项建好了,生成了刚才缺少的/etc/X11/fluxbox/fluxbox-menu这个文件。

利用这种方式,或者使用fluxbox-generate_menu的好处就是可以随系统中软件安装情况变化,再搭配个人的一些优化设置,使用起来就更顺手了。

关机与重启

Fluxbox菜单中的restart和exit分别对应“重启窗口管理器”和“退出X,回到GDM界面”,没有直接关机或重启的选项,需要自己手工添加:

[submenu]
    [exec] (Reboot System) {sudo /sbin/shutdown -r now}
    [exec] (Reboot System) {sudo /sbin/reboot}      #和上面一句作用相同
    [exec] (Shutdown System) {sudo /sbin/shutdown -h now}
[end]

先别着急用,命令不都带着sudo了么,还要赋予用户不需密码就能够使用/sbin/shutdown的权限,修改/etc/sudoers,添加:

Cmnd_Alias REBOOT = /sbin/reboot
Cmnd_Alias SHUTDOWN = /sbin/shutdown

fwolf ALL=(ALL) NOPASSWD: REBOOT, SHUTDOWN

再调用关机或重启,虽然使用到sudo,也不再需要输入密码,而是直接就执行了。(参考1参考2

如果一定要需要用户输入自己的密码才能关机的话,也是可以实现的,那就是通过shell来执行sudo,在新开的shell窗口中会提示用户输入sudo时的密码,输入密码不正确时就拒绝执行sudo了,比如这样(参考):

[exec] (Shutdown) {konsole -T "Shutdown" -e sudo shutdown now -h}
[exec] (Shutdown) {gnome-terminal -t "Shutdown" -e "sudo shutdown now -h"}
[exec] (Shutdown) {xfce4-terminal -t "Shutdown" -e "sudo shutdown now -h"}

挂起与休眠

首先安装hibernate,源里有的,然后用root命令运行hibernate或者hibernate-disk就是休眠(信息写入磁盘,不耗电),运行hibernate-ram就是挂起(信息写入内存,会耗一点点的电)。如果运行了gnome-power-manager(在状态栏上会有电池图标),就可以设定合上笔记本时就休眠。菜单项和sudoers文件的修改和上面的关机和重启一样:

Cmnd_Alias SUSPEND = /usr/sbin/hibernate-ram
Cmnd_Alias HIBERNATE = /usr/sbin/hibernate-disk

fwolf ALL=(ALL) NOPASSWD: REBOOT, SHUTDOWN, SUSPEND, HIBERNATE

感觉挂起没有休眠好用,有时候从挂起状态恢复时会死掉,得重启X。

rxvt-uincode的daemon模式

超节省资源的fluxbox当然要搭配同样节省资源的rxvt-unicode来使用才更好,rxvt-unicode的daemon模式就更好了,可以在菜单中这样配置:

[exec] (rxvt-unicode) {urxvtc "$@"; if [ $? -eq 2 ]; then urxvtd -q -o -f; urxvtc "$@"; fi}

这样就可以自动启动守护程序urxvcd了(参见官方文档)。使用中rxvt-unicode到gedit或者scribes这样的程序粘贴内容有点问题,Ctrl-V不管用,不过用鼠标中键可以粘贴过来,而Shift+Insert只在rxvt-unicode里起作用。也有人说可以用autocutsel来同步两个剪贴板。

其它设置

快捷键

快捷键设置的默认定义文件为$HOME/.fluxbox/keys,注意Mod1代表Alt, Control代表Ctrl, Mod4代表Windows键,Mouse2是鼠标中键,Mouse4、5则是鼠标滚轮下滚、上滚。比如音量调节:

Control Mod1 Up :Exec amixer sset Master 1+ unmute
Control Mod1 Down :Exec amixer sset Master 1- unmute
Control Mod1 Left :Exec amixer sset Master mute

界面字体

默认设置下,如果菜单中有中文,那么配置完成后只能看见两个小方框,这并不是说fluxbox菜单不支持中文,而是字体没设置好。其它窗口标题栏等地方的中文也是类似的情况。可以在$HOME/.fluxbox/overlay文件中设置字体、字号的选项(这个文件的本来作用是定义Style切换中的保留设置),比如如下的内容:

# 菜单标题的字体
menu.title.font: Simsun-10
# 菜单组标题的对齐方式
menu.title.justify: center
# 菜单项目的字体
menu.frame.font: Simsun-10
# 菜单项目的对齐方式
menu.frame.justify: left
# 窗口标题栏文字的字体
window.font: Simsun-10
# 窗口标题栏文字的对齐方式
window.justify: center
# 窗口标题聚焦时的背景颜色|5/5/f
window.label.focus.color: rgb:4e/8f/cf
window.label.focus.colorTo: rgb:4e/8f/cf
# 时钟的字体
toolbar.clock.font: Simsun-10
# 工作区名称的字体
#toolbar.workspace.font: Simsun
# 图标栏的字体
toolbar.iconbar.focused.font: Simsun-10
toolbar.iconbar.unfocused.font: Simsun-10

字体名称后面-11为字体大小,再后面跟:bold表示黑体显示,中间都没有空格。

自启动程序

自启动程序可以在$HOME/.fluxbox/startup中配置,写在exec /usr/bin/fluxbox一句的前面,并且**一定要在后面加上表示后台运行的&符号。比如为了优化GTK程序的运行,可以加上:

GSDPID=`pidof gnome-settings-daemon`
if [ "x$GSDPID" == "x" ]; then
    gnome-settings-daemon &
fi
gnome-power-manager
gnome-volume-manager -daemon=yes &

gnome-power-manager是电源管理程序,用来管理笔记本的电源,台式机可以不用;gnome-volume-manager则是卷管理器,只有加载了它,插入u盘或者移动硬盘之后才能自动挂载。

程序属性apps

$HOME/.fluxbox/apps这个文件我还是第一次见过,它可以定义窗口的各项属性,比如:

[app] (name=xfce4-terminal)
[Position]  (LOWERLEFT) {0 55}
[end]

[group]
    [app] (name=urxvt) (class=URxvt)
        [Position] (LOWERLEFT) {0 25}
[end]

第一个[app]是定义了程序xfce4-terminal启动时的窗口位置为相对于屏幕左下角0,55的坐标,这样每次启动程序的时候就不用再手工移动窗口到自己舒服的位置了。fluxbox没有gnome那样窗口自动dock到屏幕边缘的功能,这算是另外一种方式的补充。

第二个[group]则是定义在本group范围之内的app,启动之后自动tab到一起,tab是fluxbox的特有功能,有点类似xfce4-terminalgnome-terminal开多个tab的功能(我也正是利用这点来模拟rxvt-unicode的多tab),这样打开多个rxvtc的时候,就自动tab到一个窗口去了,不用再手工按鼠标中键把一个标题栏拖到另外一个标题栏上。如果再在keys文件中配上Ctrl+PageDown切换到下一个Tab的功能:

Control Prior :PrevTab
Control Next :NextTab

多Tab shell窗口功能就近乎完美了,几乎可以完全淘汰xfce4-terminal了(字体颜色设置上还略有些不太习惯)(这样还把xfce4-terminal自身的tab切换功能给屏蔽了,调成用Mod1/Alt来组合也不错)。如果你想,在group中加上其它程序也是可以的。

apps文件很重要,不过如果手工在设定窗口保存属性的话,会被系统自动改写,为了保存手工编写代码的美观性,可以把这个文件的属性设置为444,编辑时再用w!强行写入。

桌面图片随机轮换

这一点简直太适合我了,我就喜欢设定一个目录,用里面的图片随机作为桌面,只需要把下面这个命令仍到crontab里就可以了:

env DISPLAY=":0.0" fbsetbg -F -R /path/to/your/wallpaper/

注意这个目录中不能有非图片文件。记得安装feh,虽然不装的话也能用,装上以后图片显示速度和拉伸效果都更好一些。

参考

Update @ 2007-12-16

安装了feh之后,发现mutt看邮件的图片附件时也会自动调用它,并且速度与效果比原来的imagemagic要好得多。

Update @ 2008-01-25

apps文件中要用到的窗口class可以用xprop查询到。