Linux X11修改caps lock键功能

date: 2019.04.09; modification:2019.04.09

目录:

本文举例说明通过修改X11的键盘设置, 修改caps lock键的功能.

1 交换caps lock键与左ctrl

sudo vi /usr/share/X11/xkb/symbols/pc

将这两行:
key <CAPS> {  [ Caps_Lock     ]   };
key <LCTL> {  [ Control_L     ]   };
改为:
//key <CAPS> {  [ Caps_Lock     ]   };
//key <LCTL> {  [ Control_L     ]   };
key <CAPS> {    [ Control_L ]   };
key <LCTL> {    [ Caps_Lock     ]   };

2 设置为除ctrl, shift, alt之外的, 另一个辅助键.

对于vim重度使用者来说, 希望有一种方法能够把hjkl的方向控制功能, 映射到各个软件, 对于terminal, 浏览器等, 都有相应的方法可以做到: 传送门

但是如果想在任何时候都能使用这种映射呢? 甚至在ssh登录到任何机器的时候都能使用这种映射呢? 此处就介绍一种方法:

sudo vi /usr/share/X11/xkb/symbols/pc

将该行:
key <CAPS> {    [ Caps_Lock     ]   };
改为:
//key <CAPS> {  [ Caps_Lock     ]   };
key <CAPS> {    [ Mode_switch       ]   };


将该行:
modifier_map Mod5   { <LVL3>, <MDSW> };
改为:
//modifier_map Mod5   { <LVL3>, <MDSW> };
modifier_map Mod5   { <LVL3>, <MDSW>, Mode_switch };

上面这个修改的意思是, 将caps键的功能, 改成Mode_switch, 这使得每个按键(如字母键)在除小写, 大写(按住shift)两个值之外, 又多了一个第三值, 即按住caps lock键.

然后:

sudo vi /usr/share/X11/xkb/symbols/us # 此处的us为系统对应的键盘布局设置

在想要修改的按键之后, 增加想要的第三值. 例如:

key <AC06> {    [     h,    H       ], [ Left ] };
key <AC07> {    [     j,    J       ], [ Down ] };
key <AC08> {    [     k,    K       ], [ Up ]   };
key <AC09> {    [     l,    L       ], [ Right ]    };

key <AD07> {    [     u,    U       ], [ Home       ]   };
key <AB07> {    [     m,    M       ], [ End        ]   };

这样, 按住caps再按hjkl, 就几乎可以在任何时候(手指不用离开主键位区)进行方向操作了.

注: 作者想了很久, 只有caps lock来做这个第三值的组合键比较合适, 因为这是键盘上唯一一个没啥用, 但是几乎所有型号的键盘有带有, 而且键位确定的键. 其他的按键基本上都不符合这特性. 不过用caps lock来做这个键的副作用, 就是它和tab以及shift的位置离的太近了, 当偶尔需要在它们之间来回切换时, 可能会按错.