udev 규칙의 느낌표는 무엇을 의미합니까?

udev 규칙의 느낌표는 무엇을 의미합니까?

Arch Linux x64에서 밝기 제어 키(fn + 화살표)가 작동하도록 하려고 합니다.

그래서 다음 명령을 사용하여 통합 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.

소스 코드에 있는 것 외에는 "문서"가 없는 것 같습니다 systemd. hwdb(7)관련된 언급은 없습니다.

관련 정보