Переназначение клавиш клавиатуры: различия между версиями
(Новая страница: «Задача: сделать так, чтобы некоторая клавиша клавиатуры (например, {{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) ''' | * (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 |
Версия от 21: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) Включение реакции по умолчанию. Имеет смысл вернуть на место обработку клавиши, если она нажата не на клавиатуре, а на корпусе, например.