2008-09-21

wmii tips

wmii最酷的地方在于它的设计理念,从Plan 9 "偷"过来的:control via filesystem interface. wmii提供了一个虚拟文件系统,它可以通过9P协议的create, read, ls, remove, rm, write来访问,从而完成对wmii的各种配置。这种进程间通信方式完全独立于语言,并且极其简单。比如:
# wmiir ls /
client/
colrules
ctl
event
keys
lbar/
rbar/
tag/
tagrules

# wmiir read /rbar/status
RX: 5.2 MB TX: 1.1 MB | 0.16 0.17 0.22 | Sun Sep 21 21:25:28 CST 2008
1. wmii的配置文件
wmii的全局配置文件在 /etc/X11/wmii-x.y/ 下,下面有两个文件 rc.wmii,还有 wmiirc。但大部分时候后者才是有效的,在系统总存在Plan 9运行时的情况下则启用前者。吾开始没主意,屁颠屁颠的修改 rc.wmii,没有任何作用,甚为郁闷。

2. 为wmii添加命令
快捷键Modkey-a使得wmii列出wmii快捷命令,默认有exec, rehash, wmiirc等等。在任何一个wmii配置文件所在目录下放置一个可执行文件,都会使得系统中多一条命令,命令名即为可执行文件的文件名。比如我在 $HOME/.wmii-3.5/ 下放置了一个名为`lock'的脚本:
#!/bin/sh
# lock the screen

xscreensaver -no-splash &
xscreensaver-command --lock
这样modkey-a中便会列出`lock', 选中它执行之,便会锁定屏幕。

3.1 键绑定 - MODKEY
和多数TWM一样,wmii默认快捷键的主键是modkey,当MODKEY=mod1时,modkey-a便是`ALT-a',这是默认设置,设成mod1时在PC上很不方便,不妨将其设为mod4,也就是窗口键。

3.2 键绑定 - 添加绑定
为wmii添加键绑定同样相当直观且方便。在 wmiirc 文件中的 "key bindings"区域(100行左右)添加一条就是了。规则为:
Key keybinding
command
比如:
key $MODKEY-u
foobar
保存以下,modkey-a执行wmiir,使得配置生效,然后modkey-u便会执行命令`foobar'。

3.3 键绑定 - 音效键
用Gnome的时候笔记本上的音效键工作的相当完美。换到wmii后则仿佛回到刀耕火种,茹毛饮血时代。开始添加了一个命令到`alsamixer',感觉还是很不方便,于是我想着怎么让音效键也工作。其实,很简单 -- 步骤如下:
a) 运行 xev 找到音效键的键码,我的系统中是这样:静音(160),降低(174),增高(176)。
b) 运行 xmodmap 添加键盘布局设置。
# cat ~/.Xmodmap; xmodmap ~/.Xmodmap
keycode 160 = XF86AudioMute
keycode 174 = XF86AudioLowerVolume
keycode 176 = XF86AudioRaiseVolume
最后,在wmiirc下添加如下绑定:
Key XF86AudioLowerVolume
amixer -c 0 set PCM 2dB-
Key XF86AudioRaiseVolume
amixer -c 0 set PCM 2dB+
Key XF86AudioMute
amixer -c 0 set PCM toggle
4. 中文标题
默认wmii选用的字体是'fixed',这样应用程序的标题中如果含有中文则会显示为乱码,修改一下 wmiirc 就行了:
WMII_FONT='-misc-*-medium-r-normal--13-*-*-*-*-*-*-uni'
5. 标签规则
由于wmii是个TWM,这样打开任何应用程序的时候都会试图根据当前平铺模式将其铺满窗口,运行xeye则满屏是个大眼睛,不妥当。系统默认已经添加了mplayer的规则,我们可以添加xev的规则,使得事件测试窗口不铺满屏幕。在tagrules中添加一行:
/Event.*/ -> ~
6. 修改状态条
wmii的状态条有两个lbar, rbar。分别用来控制状态条的左、右面。左面是各个tag,右面则用来当前时间,系统负载:其实就是uptime和date的输出。当然我们可以很方便的加上网卡接收、发送数据的统计,稍微修改一下 wmiirc 脚本中的`status'函数即可。
# Status Bar Info
status() {
echo -n $(ifconfig eth1 | awk -F "[)(]" '/RX bytes/{print "RX:",$2}') \
$(ifconfig eth1 | awk -F "[)(]" '/TX bytes/{print "TX:",$4}') \
'|' $(uptime | sed 's/.*://; s/,//g') \
'|' $(date)
}

标签:

0 Comments:

发表评论

<< Home