Переназначение мультимедийной клавиатуры

Переназначение мультимедийной клавиатуры

У меня есть пульт дистанционного управления G7BTS, на котором есть и клавиатура, и кнопки мультимедиа. Большинство кнопок работают хорошо, за исключением кнопки "OK".

Кнопка OK имеет код клавиши 353, что означает KEY_SELECT. Но моя Ubuntu 20.04 его не распознает.

Ниже приведены некоторые проведенные мной исследования:

  1. sudo evtest

выход:

/dev/input/event9:  G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
  1. grep "" /sys/class/input/event11/device/id/*

выход:

/sys/class/input/event11/device/id/bustype:0005
/sys/class/input/event11/device/id/product:0041
/sys/class/input/event11/device/id/vendor:045e
/sys/class/input/event11/device/id/version:0300
  1. sudo evtest /dev/input/event11

выход:

Testing ... (interrupt to exit)
Event: time 1640250050.701930, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640250050.701930, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1
Event: time 1640250050.701930, -------------- SYN_REPORT ------------
  1. /etc/udev/hwdb.d/60-keyboard.hwdb

Я попытался переназначить кнопку «ОК» на «ввод».

Содержимое файла 60-keyboard.hwdb:

# G7BTS
evdev:input:b0005v045Ep0041*
 KEYBOARD_KEY_c0041=enter
  1. sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'

выход:

KEYBOARD_KEY_c0041=enter

До сих пор я не вижу никаких выходных данных в xev при нажатии кнопки ОК.

Любые предложения и помощь будут оценены по достоинству.

решение1

Всем спасибо.

Мне потребовалось несколько дней, чтобы найти решение, и наконец я нашел правильный путь.

Ссылка

Сопоставьте скан-коды с кодами клавиш

Фон

Версия 11 протокола X поддерживает только однобайтовые коды клавиш. Поэтому коды клавиш выше 255 игнорируются. Ubuntu 20.04 LTS до сих пор использует версию 11 протокола X.

На моей удаленной клавиатуре G7BTS есть кнопка «OK». У этой кнопки код клавиши 353. В «xev» при нажатии этой кнопки ничего не происходит.

Решение

Вкратце, решение заключается в создании файла конфигурации hwdb, который используется для переназначения определенных клавиш на другие клавиши.

удев

udev предоставляет встроенную функцию hwdb для поддержки индекса базы данных оборудования в /etc/udev/hwdb.bin. База данных скомпилирована из файлов с расширением .hwdb, расположенных в каталогах /usr/lib/udev/hwdb.d/, /run/udev/hwdb.d/ и /etc/udev/hwdb.d/. Файл сопоставления сканкодов и кодов клавиш по умолчанию — /usr/lib/udev/hwdb.d/60-keyboard.hwdb.

Универсальные устройства ввода (также USB-клавиатуры), идентифицируемые псевдонимами ядра usb:

evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>

где <bus_id>, <vendor_id> и <version_id> — это 4-значные шестнадцатеричные заглавные идентификаторы поставщика, продукта и версии.

Как найти эти идентификаторы выше - это ключ

install hardinfo
sudo apt install hardinfo
software – System Profiler – Input Devices – G7BTS Comsumer Control
Device Information
 Name       G7BTS Comsumer Control
 Type       keyboard
 Bus        0x0005
 Vender     0x045e
 Product    0x0041
 Version    0x0300

Еще одна важная вещь — получить скан-код кнопки «ОК».

install evtest
sudo apt-get install evtest
sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:    Lid Switch
/dev/input/event1:    Sleep Button
/dev/input/event2:    Power Button
/dev/input/event3:    AT Translated Set 2 keyboard
/dev/input/event4:    SynPS/2 Synaptics TouchPad
/dev/input/event5:    TPPS/2 IBM TrackPoint
/dev/input/event6:    ThinkPad Extra Buttons
/dev/input/event7:    Video Bus
/dev/input/event8:    Integrated Camera: Integrated C
/dev/input/event9:    G7BTS Keyboard
/dev/input/event10:    G7BTS Mouse
/dev/input/event11:    G7BTS Consumer Control
/dev/input/event12:    G7BTS System Control
/dev/input/event13:    HDA Intel PCH Mic
/dev/input/event14:    HDA Intel PCH Dock Mic
/dev/input/event15:    HDA Intel PCH Headphone
/dev/input/event16:    HDA Intel PCH Dock Headphone
/dev/input/event17:    HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11:    HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event19:    HDA Intel PCH HDMI/DP,pcm=8
Select the device event number [0-19]: ^C

Обратите внимание на «/dev/input/event11»

sudo evtest /dev/input/event11

Затем нажмите кнопку «ОК», и результат будет показан ниже.

Event: time 1640238746.775220, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640238746.775220, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0
Event: time 1640238746.775220, -------------- SYN_REPORT ------------

Обратите внимание на «значение c0041». Это значение c0041 является скан-кодом кнопки «ОК».

Создайте файл hwdb

Теперь у нас есть нужные нам идентификаторы и скан-код. Вставляем их в «Универсальные устройства ввода (также USB-клавиатуры), идентифицированные модальностями ядра usb» выше, и, наконец, у нас есть файл конфигурации G7BTS.hwdb ниже:

evdev:input:b0005v045Ep0041e0300*
 KEYBOARD_KEY_c0041=enter

В контексте кнопка «ОК» отображается на клавишу «ввод». Вы можете назначить ее на любую клавишу, которую захотите.

Поместите файл в место назначения

sudo mv G7BTS.hwdb /etc/udev/hwdb.d/

Обновлять

sudo udevadm hwdb --update
sudo udevadm trigger --verbose 

Тест

sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'

результат есть

KEYBOARD_KEY_c0041=enter

Конец

Вот и все шаги по переназначению клавиш. Эти переназначения продолжают работать после перезагрузки.

решение2

Я заставил работать внешнюю клавиатуру в Ubuntu 20.04, используя информацию изhttps://www.foell.org/justin/remapping-keyboard-keys-in-ubuntu-with-udev-evdev/

  1. используйте sudo evtestдля поиска информации о вашей клавиатуре, например:
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
Input device name: "Keychron K6 Keyboard"
  1. используйте sudo evemu-describeдля поиска свойств клавиатуры, включая начальные нули. В выводе вы можете найти что-то вроде:
# Properties:
N: Keychron K6 Keyboard
I: 0005 05ac 024f 011b
  1. создайте файл .hwdb, как вы это сделали, новключить все ведущие 000, илюбые шестнадцатеричные символы следует ставить в верхнем регистренравиться:
# Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
# evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
evdev:input:b0005v05ACp024F*

  1. Вам не нужно перезагружать систему, просто сделайте следующее:
$ sudo systemd-hwdb update
$ sudo udevadm trigger
  1. Вы можете проверить, правильно ли сопоставлена ​​ваша клавиатура, используя $ udevadm info /dev/input/event20(замените event20 на событие для вашей клавиатуры)

Связанный контент