Не удается переназначить клавиши на клавиатуре 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скан-коды на некоторых типах клавиатур.

Другие вопросы по тегам