Fluxbox Keys

来自Ubuntu中文
跳到导航跳到搜索

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]