![在启动过程的哪个阶段可以修改支持 Linux 输入层 API 的键盘驱动程序的扫描码/键码转换表?](https://linux22.com/image/1014679/%E5%9C%A8%E5%90%AF%E5%8A%A8%E8%BF%87%E7%A8%8B%E7%9A%84%E5%93%AA%E4%B8%AA%E9%98%B6%E6%AE%B5%E5%8F%AF%E4%BB%A5%E4%BF%AE%E6%94%B9%E6%94%AF%E6%8C%81%20Linux%20%E8%BE%93%E5%85%A5%E5%B1%82%20API%20%E7%9A%84%E9%94%AE%E7%9B%98%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%89%AB%E6%8F%8F%E7%A0%81%2F%E9%94%AE%E7%A0%81%E8%BD%AC%E6%8D%A2%E8%A1%A8%EF%BC%9F.png)
我在用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
那没有显示任何东西。