在启动过程的哪个阶段可以修改支持 Linux 输入层 API 的键盘驱动程序的扫描码/键码转换表?

在启动过程的哪个阶段可以修改支持 Linux 输入层 API 的键盘驱动程序的扫描码/键码转换表?

我在用keyfuzz在 Mac 键盘上将 Alt-Eject 映射到 Alt-SysRq(参见这里)。但在最近的 (X)ubuntus 上,首选使用 systemd 服务在启动时运行所需的命令。我想知道我多早可以执行该服务?使用哪些WantedBy=After=Before=属性才能使配置正常工作并且不会被覆盖?那么它在救援模式启动时也能工作吗?

这里是关于不同目标之间依赖关系的一些参考。

编辑:我将其放入了WantedBy=multi-user.target friendly-recovery.target[Install]创建的 .service 文件的一部分。这似乎在恢复模式 root shell 中也有效。

答案1

我将其放入WantedBy=multi-user.target friendly-recovery.target[Install]我创建的 .service 文件的一部分。这似乎在恢复模式 root shell 中也有效。不过,我不知道这是否是最佳配置。

答案2

我没有使用,而是keyfuzz尝试重新映射 scancode->keycode,就像 Danzel 在命令中建议的那样,并根据 /lib/udev/hwdb.d/60-keyboard.hwdb 和这里

我创建了文件 /etc/udev/hwdb.d/10-apple-keyboard.hwdb,内容如下:

evdev:name:Apple, Inc. Apple Internal Keyboard / Trackpad:dmi:bvn*:bvr*:bd*:svnAppleInc.:pn*
 KEYBOARD_KEY_c00b8=sysrq

对于文件,我从输出的第三行获取了设备名称sudo evtest /dev/input/by-id/usb-Apple__Inc._Apple_Internal_Keyboard___Trackpad-evenkbd,通过相同的命令获取了弹出键的扫描码 - 请参阅相关答案- 和来自的键码/usr/include/linux/input-event-codes.h(小写并且不带上面的“key_”前缀。)

但仍然按下弹出按钮会触发 KEY_EJECTCD 而不是 KEY_SYSRQ,如下所示sudo uvtest

Event: time 1567436214.147340, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00b8
Event: time 1567436214.147340, type 1 (EV_KEY), code 161 (KEY_EJECTCD), value 1
Event: time 1567436214.147340, -------------- SYN_REPORT ------------

我无法确认按键映射:

udevadm info /dev/input/by-id/usb-Apple__Inc._Apple_Internal_Keyboard___Trackpad-event-kbd | grep KEYBOARD_KEY

那没有显示任何东西。

相关内容