kbd-remap-linux
之前买了一个高斯的GS3104T-Pro键盘(想要全配列的话可挑选的范围就小了ですわ),结果连接到我的Arch Linux下之后发现F1~F12键完全用不了,比如按F1是亮度增加,而按Fn+F1也完全无用。感觉可能是驱动上有点问题,但是高斯官网又没有针对linux的驱动,而github上的开源驱动也只有一个改RGB灯光的(而且看起来不少时间没维护了,to-do list也一直挂着)。
于是我就想,反正按键是有反应的,只是反应不对而已,那我为什么不试试对这些键做重映射呢?
说干就干,从Arch
Wiki上搜索了键盘重映射的方案,找了一个叫evsieve的命令行工具,可以从比较底层的位置读写linux设备事件。试用了一下,果然不错。
1 | sudo timeout 10 evsieve --input /dev/input/event* grab --print |
执行这个命令,就可以把按键事件显示在命令行中了。这里可以看见任意事件的名称以及来源域(domain),比如:
1 | Event: type:code = key:f value = 1 (down) domain = /dev/input/event3 |
这表示从/dev/input/event3读到了事件key:f,状态是1(down)。
于是驱使AI帮我写了一个简单的脚本,可以从yaml配置文件中读取重映射配置,并将这个脚本注册为systemd服务以实现开机自启动以及后台运行。
用着用着发现了一些问题:首先是这把键盘的有线、2.4G无线以及蓝牙是不同的input
event,而且每次开机还会有不同的编号,而编号中又不带有任何的设备名称信息。又经过一番搜索,发现可以用libinput工具列出所有输入设备:sudo libinput list-devices。于是让AI修改了一下,可以让用户指定需要搜索的设备名称关键词,然后使用libinput配合awk进行搜索,把搜索到的匹配的Device的Kernel提取出来。
接着又让AI继续开发了一个前端配置页面,这样就可以愉快地图形化配置重映射了:
该应用已发布到GitHub仓库 LoveApple14434/gs-3104t-pro-remap以及AUR软件源 kbd-drive-remap-git。
这是我第一次向AUR发布。虽然是AI搓的屎山,但是反正github和AUR上本来应该也有不少这种东西了……?
