udev规则中的感叹号是什么意思?

udev规则中的感叹号是什么意思?

我正在尝试让亮度控制键(fn + 箭头)在 Arch Linux x64 上工作。

因此,我使用以下命令查看我的集成 ps/2 笔记本电脑键盘的 udev 规则 udevadm info

P: /devices/platform/i8042/serio0/input/input4/event4
N: input/event4
L: 0
S: input/by-path/platform-i8042-serio-0-event-kbd
E: DEVPATH=/devices/platform/i8042/serio0/input/input4/event4
E: DEVNAME=/dev/input/event4
E: MAJOR=13
E: MINOR=68
E: SUBSYSTEM=input
E: USEC_INITIALIZED=26133209
E: KEYBOARD_KEY_74=prog1
E: KEYBOARD_KEY_75=www
E: KEYBOARD_KEY_78=mail
E: KEYBOARD_KEY_82=!switchvideomode
E: KEYBOARD_KEY_83=!battery
E: KEYBOARD_KEY_84=!prog1
E: KEYBOARD_KEY_86=!wlan
E: KEYBOARD_KEY_88=!brightnessup
E: KEYBOARD_KEY_89=!brightnessdown
E: KEYBOARD_KEY_b1=!prog2
E: KEYBOARD_KEY_b3=!prog3
E: KEYBOARD_KEY_b4=!wlan
E: KEYBOARD_KEY_c5=!prog3
E: KEYBOARD_KEY_d5=!wlan
E: KEYBOARD_KEY_f7=!f22
E: KEYBOARD_KEY_f9=!f23
E: ID_INPUT=1
E: ID_INPUT_KEY=1
E: ID_INPUT_KEYBOARD=1
E: ID_BUS=i8042
E: ID_SERIAL=noserial
E: ID_PATH=platform-i8042-serio-0
E: ID_PATH_TAG=platform-i8042-serio-0
E: LIBINPUT_DEVICE_GROUP=11/1/1:isa0060/serio0
E: DEVLINKS=/dev/input/by-path/platform-i8042-serio-0-event-kbd
E: TAGS=:power-switch:

https://wiki.archlinux.org/index.php/Map_scancodes_to_keycodes说语法构造KEYBOARD_KEY_<scancode>=<keycode>将键码绑定到扫描码。可以找到可用键码列表这里

正如我们所看到的,88 和 89 扫描码与亮度键码绑定(或不绑定?)。这是绝对正确的 - 我尝试在运行时按亮度键evtest- 这会生成 88 和 89 扫描码(但缺少键码信息)。运行时按此键将打印journactl -f以下内容:atkbd serio0: Unknown key pressed (translated set 2, code 0x88 on isa0060/serio0).

所以,问题是,我只是不明白,“!”的作用是什么?键码之前的符号是什么意思?我在 udev 文档中找不到这个语法案例。

我猜想这种结构从扫描代码中解除了密钥的绑定 - 然后我就不知所措了:为什么编写此规则的开发人员会解除这个绝对正确的密钥的绑定?

答案1

/lib/udev/hwdb.d/60-keyboard.hwdb

# An '!' as the first character of the key identifier string
# will add the scan code to the AT keyboard's list of scan codes
# where the driver will synthesize a release event and not expect
# it to be generated by the hardware.

除了源代码中的内容之外,似乎没有其他“文档” systemdhwdb(7)没有提及任何相关内容。

相关内容