udev更改按键映射

udev更改按键映射

通过更改udev的规则实现敲击a键获得s的输出

安装evtest

  首先安装evtest检测键盘的扫描码
1
2
3
4
5
6
7
8
9
# apt install evtest
# sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Power Button
/dev/input/event1: Lid Switch
/dev/input/event2: Power Button
/dev/input/event3: AT Translated Set 2 keyboard
Select the device event number [0-3]:

选择device的数字后,敲击a键可以得到一下信息:

1
2
3
4
5
6
7
Event: time 1521361797.053598, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1e
Event: time 1521361797.053598, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1521361797.053598, SYN_REPORT
aEvent: time 1521361797.148844, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1e
Event: time 1521361797.148844, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1521361797.148844, SYN_REPORT

  结果进行了简化,第一个SYN_REPORT代表a键按下,第二个SYN_REPORT代表a键松开,其中可以得到a的扫描码为1e

修改udev

  使用编辑器编辑udev规则
1
# sudo vim /lib/udev/hwdb.d/60-keyboard.hwdb

在文件最后添加以下几行

1
2
evdev:input:b0011v0001p0001*
KEYBOARD_KEY_1e=a

  第一行为一系列规则代表匹配的设备,其中evdev:input:代表输入设备,后面为一些ID,在evtest中输入device的数字之后会有一行输出为

1
2
Input device ID: bus 0x11 vendor 0x1 product 0x1 version 0xab41

其中’b0011’,‘v000v’,‘p0001’分别与bus,vendor,product对应,’*'代表了之后的通配符号

  第二行为对设备的映射,行首需要空格否则无效,KEYBOARD_KEY_后跟扫描码,=号右为键值

更新udev

  使用以下命令更新,需要将event3换为自己输入的数字
1
sudo udevadm hwdb --update && sudo udevadm trigger /dev/input/event3