Переназначение клавиш клавиатуры: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «Задача: сделать так, чтобы некоторая клавиша клавиатуры (например, {{cmd|Sleep}}) начала распоз…»)
 
Нет описания правки
Строка 42: Строка 42:
  $ systemd-hwdb query 'evdev:input:b0003v0461p0010*'
  $ systemd-hwdb query 'evdev:input:b0003v0461p0010*'
  KEYBOARD_KEY_10082=f14
  KEYBOARD_KEY_10082=f14
* (7) '''Повтороная регистрация клавиатуры''': {{prg|udevadm trigger /dev/input/event5}}
* (7) '''Повторная регистрация клавиатуры''': {{prg|udevadm trigger /dev/input/event5}}
* (8) '''Проверка'''. Можно снова запустить {{prg|evtest /dev/input/event5}}, чтобы убедиться, что при нажатии {{cmd|Sleep}} выводилось что-то вроде
* (8) '''Проверка'''. Можно снова запустить {{prg|evtest /dev/input/event5}}, чтобы убедиться, что при нажатии {{cmd|Sleep}} выводилось что-то вроде
  Event: time 1557768424.373223, type 4 (EV_MSC), code 4 (MSC_SCAN), value 10082
  Event: time 1557768424.373223, type 4 (EV_MSC), code 4 (MSC_SCAN), value 10082

Версия от 18:03, 13 мая 2019

Задача: сделать так, чтобы некоторая клавиша клавиатуры (например, Sleep) начала распознаваться по-другому (например, как F14).

Это нужно в двух случаях:

  • чтобы при нажатии Power, Sleep или им подобным не запускалось соответствующее действие
  • чтобы при нажатии редкой или вообще не распознаваемой клавиши приезжал известный код (к которому можно привязать или уже привязаны действия)

PS/2

TODO с помощью setkeycodes и loadkeys

USB

Настройку различных внешних устройств делает udev. Для тонкой настройки он пользуется специальной базой данных — HWDB. Стандартная настройка HWDB лежит в файлах каталога /lib/udev/hwdb.d/ (там можно посмотреть примеры), дополнительная — в файлах подкаталога /etc/udev/hwdb.d. После исправления HWDB надо пересобирать (файл /etc/udev/hwdb.bin) и сообщать udev-у, что устройство изменилось.

  • (0) Отключение реакции по умолчанию. Если вы (как я) пытаетесь переопределить клавишу Power или Sleep, сначала надо временно отключить обработку этой клавиши со стороны systemd-logind или acpid, иначе при каждом нажатии компьютер будет выключаться/засыпать.
  • (1) Определение устройства. В системе есть несколько input-устройств, чтобы выбрать нужное, надо запустить evtest и понажимать на нужную клавишу.
    • Одна клавиатура может распознаваться как несколько, в моём случае основные клавиши видны на event4, а Sleep оказалась на event5
    • Смотрим на значение VALUE поля MSC_SCAN
$ evtest
$ No device specified, trying to scan all of /dev/input/event*
$ Available devices:
$ /dev/input/event0:      USB Laser Game Mouse
$ /dev/input/event1:      USB Laser Game Mouse
$ /dev/input/event2:      USB Laser Game Mouse Consumer Control
$ /dev/input/event3:      USB Laser Game Mouse
$ /dev/input/event4:      NOVATEK USB Keyboard
$ /dev/input/event5:      NOVATEK USB Keyboard System Control
$ /dev/input/event6:      NOVATEK USB Keyboard Consumer Co
...
Select the device event number [0-23]: 5
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x461 product 0x10 version 0x110
Input device name: "NOVATEK USB Keyboard System Control"
...
Event: time 1557767075.173940, type 4 (EV_MSC), code 4 (MSC_SCAN), value 10082
...
  • (3) Идентификатор устройства. Есть несколько способов идентифицировать устройство в настройке HWDB, самый простой — по USB ID, который виден в выводе evtest: bus 0x3 vendor 0x461 product 0x10
    • TODO: другие способы?
  • (4) Файл настройки. Создадим файл настройки /etc/udev/hwdb.d/20-kbd.hwdb, заменяющий код клавиши на F14; обратите внимание на аббревиатуру, она повторяет предыдущую строку
evdev:input:b0003v0461p0010*
KEYBOARD_KEY_10082=f14
  • (5) Обновление базы: systemd-hwdb -s update
  • (6) Проверка заполнения HWDB:
$ systemd-hwdb query 'evdev:input:b0003v0461p0010*'
KEYBOARD_KEY_10082=f14
  • (7) Повторная регистрация клавиатуры: udevadm trigger /dev/input/event5
  • (8) Проверка. Можно снова запустить evtest /dev/input/event5, чтобы убедиться, что при нажатии Sleep выводилось что-то вроде
Event: time 1557768424.373223, type 4 (EV_MSC), code 4 (MSC_SCAN), value 10082
Event: time 1557768424.373223, type 1 (EV_KEY), code 184 (KEY_F14), value 1
  • (9) Включение реакции по умолчанию. Имеет смысл вернуть на место обработку клавиши, если она нажата не на клавиатуре, а на корпусе, например.