Linux下修改Control_L与Caps_Lock按键
一般的键盘中,Caps按键位于“A”的左侧,长期占据着键盘上的一个重要位置。而它的使用繁率确非常的低。对于Linux下的用户,尤其使用Emacs与Vim的用户,Control按键是使用非常多的一个按键,所以将Caps变为Control是一个很好的想法。
码农神器HHKB Pro2的键位设计就是把Control放在了“A”键的左侧。
在Linux下面,可以利用xmodmap交换键盘上面的键位。
获取keycode,通过命令
xev |grep keycode
可以获取按键的keycode.xev |grep state 0x10, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES, state 0x12, keycode 66 (keysym 0xffe5, Caps_Lock), same_screen YES, state 0x10, keycode 37 (keysym 0xffe3, Control_L), same_screen YES, state 0x14, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
编辑
~/.xmodmaprc
,填写如下内容clear Lock clear Control keycode 37 = Control_L keycode 66 = Control_L keycode 108 = Caps_Lock add Control = Control_L Control_R
将Caps与左Ctrl全部设置为Control_L,将右Alt设置为了Caps_Lock
使用命令
xmodmap ~/.xmodmaprc
生效通过
xmodmap -pke |grep -i Control
查看修改后是否生效
通过以上步骤可以将键盘上面的铵键交换。但是,我发现当键盘USB重插时设置就不生效了,需要重新执行 xmodmap ~/.xmodmaprc
发现udev可以提供让设备在指定条件下执行指定的脚本。规则配置位于 /etc/udev/rules.d
在这个目录下新建个文件,比方说20-usb-keyboards.rules
,格式为
#!bash
ACTION=="add", ATTRS{idVendor}=="1006", ATTRS{idProduct}=="0022", OWNER=="imbugs", RUN+="/home/imbugs/.udev.sh"
你需要把里面的内容替换一下,首先需要知道你的键盘的 USB 设备号,用 lsusb
可以看到,例如我的键盘对应的是这行
#!bash
Bus 003 Device 012: ID 046a:010d Cherry GmbH
里面的 046a:010d
分别对应 ATTRS{idVendor}
和 ATTRS{idProduct}
后面的 OWNER
和 RUN
好理解,是用户名和要执行的脚本
RUN
里的 /home/imbugs/.udev.sh
可以这么写
#!bash
#!/bin/bash
sudo -u imbugs /usr/bin/xmodmap -display :0 /home/imbugs/.xmodmaprc >/dev/null 2>&1 &
注意 OWNER
是判断条件,而非赋值,无论如何 RUN
里的脚本都是以 root 身份执行的。 为了让 /etc/udev/rules.d
里的配置生效,还需要命令
#!bash
sudo udevadm control --reload-rules
现在重装插拔 USB 键盘应该都能正常了