Не удается переназначить клавиши на клавиатуре Microsoft с HWDB
Я пытаюсь переназначить LCtrlи CapsLockна своей Microsoft Wired Keyboard 600 с помощью HWDB, но по какой-то причине система не видит внесенные мной изменения.
Вот как мой
hwdb
правило выглядит так:
evdev:input:b*v045Ep07F8*
KEYBOARD_KEY_3a=leftctrl
KEYBOARD_KEY_1d=capslock
Коды производителя и модели взяты из
lsusb
и были подтверждены в
/sys/devices/pci0000:00/*
После копирования файла конфигурации в
/etc/udev/hwdb.d
, Бег
systemd-hwdb update
и выпуск
udevadm trigger
никаких изменений в конфиге клавиатуры нет.
Я также пробовал:
- Перезагружался - не помогло.
- Явное указание шины как
0003
— не помогло. - Подтверждение с помощью
evtest
что коды клавиш, которые я использую, подходят для моей клавиатуры — да, это правильные коды клавиш. - Подтверждение примененных правил, перечисленных в
sudo udevadm info /sys/class/input/eventX
— да, новые правила перечислены, значит , они успешно применены? Тем не менее, клавиши ведут себя так же, как и раньше.
E: KEYBOARD_KEY_1d=capslock
E: KEYBOARD_KEY_3a=leftctrl
E: ID_USB_DRIVER=usbhid
Когда я использую
evdev:atkbd:dmi:*
поскольку вместо идентификатора устройства изменение правильно применяется к клавиатуре моего ноутбука, поэтому я знаю правило, и процесс, который я использую для переназначения клавиш, должен быть правильным, это должно быть проблемой с неправильным идентификатором (хотя я в пять раз проверил).
Любая помощь будет оценена.
1 ответ
Оказывается, я указывал неправильные скан-коды. При получении кодов ключей с
evtest
, вы получите следующий вывод (при условии, что нажата левая кнопка Shift):
...
Event: time xxx.xxx, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time xxx.xxx, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 0
...
Код, который я использовал, был стандартным кодом ключа (42). Но, как оказалось, это неправильно.
Фактический код, который вы должны указать в файле hwdb, — это скан -код из
MSC_SCAN
линия (в данном примере это
700e1
, перед которым стоит слово
value
)
Это работает:
evdev:input:b*v045Ep07F8*
KEYBOARD_KEY_70039=leftctrl
KEYBOARD_KEY_700e0=capslock
Ссылка: Rebinding Keyboard Keys @ altlinux.org (это на русском языке, но это самая полная статья, которую я нашел в Интернете, в которой подчеркивается этот нюанс)
Я хорошо помню, как использовал базовые скан-коды на своих ноутбуках, и они работали. Я не совсем уверен, почему это так. Возможно, они совпадают с
EV_MSC
скан-коды на некоторых типах клавиатур.