Fluxbox Keys
Advanced Tips of Fluxbox keys
本文作者:aBiNg
默认读者已知Fluxbox下基本的keys配置。
备份keys文件
代码:
$cp ~/.fluxbox/keys ~/.fluxbox/keys.bak
keys文件书写格式
代码:
<mod> [<mod> <mod>] key [key key] :command <command_options>
- 注:
- 冒号前至少留一格,后不留格;shell命令大小写敏感,但窗口管理命令并不敏感。
- mod可以是Mod1(alt)、Control(ctrl)、Mod4(Super)等;key即为普通键(e,d,F1,F3等)。
- 其中,mod键自身是可选的,没有时用None替代,不用也可。但只用普通字母键,输入文字时会有麻烦。
先看一些例子: 代码:
Mod1 r :ExecCommand urxvt # alt+r启动rxvt-unicode;ExecCommand同Exec,执行命令或脚本 Mod4 4 :Workspace 4 # Super+4切换到工作区4;工作区命令 Menu :RootMenu # Menu键位于右ctrl左边;Fluxbox内建命令 Mod1 F4 :KillWindow # Alt+F4关闭当前进程;窗口管理命令 Mod1 70 :KillWindow # 同上,70是F4的keycode,由xev程序获得,见第3小节 Control m :MacroCmd {Exec firefox} {ResizeTo 800 600} # ctrl+m启动firefox,并调整大小到800x600;复合命令
窗口管理命令详见这部分
Fluxbox内建命令详见这部分
工作区命令详见这部分
复合命令详见这部分
获得keycode,并适当定义xmodmap
i)xev命令
- 注意三点:
- 终端运行xev时,鼠标的运行也会被捕获,所以尽量少动鼠标,除非想获得鼠标键的keycode
- 关闭启动时的窗口即关闭了xev进程
- keycode与keyname在Fluxbox keys文件中同样有效;例如运行xev,按tab键,信息中有一段"keycode 23 (keysym 0xff09, Tab)",23与Tab等价
推荐使用xmodmap获得keycode。例如要获得Tab的keycode,执行: 代码:
$xmodmap -pke | grep -i tab
ii)定义xmodmap 这个通常在需要分清左右非字符键时用到。 代码:
$touch ~/.Xmodmap
简单的示例: 代码:
keycode 115 = Super_L keycode 116 = Super_R clear mod3 add Mod3 = Super_L clear mod4 add Mod4 = Super_R
要让配置在启动Fluxbox时生效,加入命令到startup脚本:xmodmap ~/.Xmodmap &,须在Fluxbox启动命令之前。
这样,在keys文件中,Mod3和Mod4就分别自定义到左Super和右Super键了;本人一般用Super_L+d执行ShowDesktop,用Super_R+l执行xlock(安装xlockmore)锁定桌面。
一些复杂点的应用
i)键盘控制音量 很多键盘上(e.g.笔记本,但本人没有笔记本,不好测试,keycode/keyname获得见第3小节)有音量加减及静音的键,如果Fluxbox(无gnome/kde daemon)默认未定义,可于keys文件中仿照下面语句加入: 代码:
Mod3 KP_Add :ExecCommand amixer sset PCM 10%+ Mod3 KP_Subtract :ExecCommand amixer sset PCM 10%-
Mod3已定义为Super_L,KP_*可由"$xmodmap -pke | grep -i kp"查到;sset或改为set,PCM或改为Master,0,10%+或改为8db+,视硬件和个人要求而定;更复杂的请查看amixer命令(在 alsa-utils包中)的帮助文档。
ii)小程序开关 有时只是查看一下信息,运行一个小程序(例如conky),但又不想让它一直运行,就可使用复合命令ToggleCmd,写入keys文件: 代码:
Mod3 v :ToggleCmd {Exec conky} {Exec pkill conky}
ToggleCmd的作用和Toggle的意思一样,按键一次,切换一次定义的命令。 ToggleCmd的另一个应用就是桌面聚焦和窗口恢复,语句: 代码:
Mod3 d :ToggleCmd {ShowDesktop} {DeIconify all originquiet}
iii)发送窗口到指定工作区,并最小化 这个有时会用到,MacroCmd可以实现;例如发送到工作区3,语句: 代码:
Mod4 F3 :MacroCmd {SendToWorkspace 3} {Iconify}
iv)设定窗口装饰alpha值 设定当前窗口的透明度(窗体透明实现,本文不涉及),记得compiz中用alt+鼠标滚轮(?),Fluxbox也可实现。语句: 代码:
Mod1 Mouse4 :SetAlpha +5 +5 Mod1 Mouse5 :SetAlpha -5 -5 Mod1 KP_Multiply :ToggleDecor
其中,Mouse4/5由xev程序查看到,分别是鼠标上/下滚;alt+*(小键盘)用于开关窗口标题栏。
v)截图/窗口截图 并不复杂,scrot(import也行,个人决定)语句(~/incoming自己建,或者改成别的目录): 代码:
Print :Exec scrot ~/incoming/scrot@$(date +%F_%T).png
选择/窗口截图: 代码:
Mod1 Print :Exec zenity --info --title="Scrot Message" --text="select a window or rectangle to snapshot" && scrot -s ~/incoming/scrot@$(date +%F_%T).png
vi)自定义菜单 Fluxbox1.0rc3之後的版本中提供了自定义菜单的功能($mkdir ~/.fluxbox/customMenus),最合适不过的就是使用键绑定来调用菜单了吧。例如mpd的菜单组合键: 代码:
Mod3 b :CustomMenu ~/.fluxbox/customMenus/mpd
使用mpd的,可以自己写个menu,简单示例如下: 代码:
[begin] (MPD) [exec] (Reload Config File) {killall mpd; mpd ~/.mpdconf} <> [exec] (Update Database) {mpd --creat-db; mpc update && mpc ls | mpc add -} <> [exec] (Play/Pause) {mpc toggle} <> [exec] (Next) {mpc next} <> [exec] (Stop) {mpc stop} <> [submenu] (Repeat) [exec] (On) {mpc repeat on} <> [exec] (Off) {mpc repeat off} <> [end] [exec] (Quit) {mpc stop && killall mpd} <> [end]