Ich habe eine G7BTS-Fernbedienung, die sowohl über Tastatur- als auch Multimediatasten verfügt. Die meisten Tasten funktionieren einwandfrei, außer der „OK“-Taste.
Die OK-Schaltfläche hat den Tastencode 353, was KEY_SELECT bedeutet. Aber mein Ubuntu 20.04 erkennt ihn nicht.
Nachfolgend sind einige Untersuchungen aufgeführt, die ich durchgeführt habe:
sudo evtest
Ausgabe:
/dev/input/event9: G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
grep "" /sys/class/input/event11/device/id/*
Ausgabe:
/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
sudo evtest /dev/input/event11
Ausgabe:
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 ------------
/etc/udev/hwdb.d/60-keyboard.hwdb
Ich habe versucht, die OK-Taste auf „Eingabe“ umzuordnen.
Inhalt der Datei 60-keyboard.hwdb:
# G7BTS
evdev:input:b0005v045Ep0041*
KEYBOARD_KEY_c0041=enter
sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'
Ausgabe:
KEYBOARD_KEY_c0041=enter
Bisher kann ich immer noch keine Ausgabe in xev sehen, wenn ich die OK-Taste drücke.
Wir sind für alle Vorschläge und Hilfe dankbar.
Antwort1
Vielen Dank an alle.
Ich habe mehrere Tage gebraucht, um die Lösung zu finden, und schließlich habe ich den richtigen Weg gefunden.
Referenz
Scancodes den Schlüsselcodes zuordnen
Hintergrund
Version 11 des X-Protokolls unterstützt nur einbytelange Tastencodes. Tastencodes über 255 werden daher ignoriert. Ubuntu 20.04 LTS verwendet bisher noch Version 11 des X-Protokolls.
Meine G7BTS-Ferntastatur hat eine „OK“-Taste. Diese Taste hat den Tastencode 353. Innerhalb von „xev“ passiert nichts, wenn diese Taste gedrückt wird.
Lösung
Kurz gesagt besteht die Lösung darin, eine hwdb-Konfigurationsdatei zu erstellen, die dazu verwendet wird, bestimmte Tasten anderen Tasten zuzuordnen.
udev
udev bietet eine integrierte Funktion namens hwdb, um den Hardware-Datenbankindex in /etc/udev/hwdb.bin zu verwalten. Die Datenbank wird aus Dateien mit der Erweiterung .hwdb kompiliert, die sich in den Verzeichnissen /usr/lib/udev/hwdb.d/, /run/udev/hwdb.d/ und /etc/udev/hwdb.d/ befinden. Die Standard-Zuordnungsdatei für Scancodes zu Tastencodes ist /usr/lib/udev/hwdb.d/60-keyboard.hwdb.
Allgemeine Eingabegeräte (auch USB-Tastaturen), die durch die USB-Kernel-Modalien identifiziert werden:
evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
wobei <bus_id>, <vendor_id> und <version_id> die 4-stelligen hexadezimalen Großbuchstaben für Hersteller-, Produkt- und Versions-IDs sind
Wie man diese IDs oben findet, ist der Schlüssel
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
Eine weitere wichtige Sache ist, den Scan-Code der Schaltfläche „OK“ zu erhalten.
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
Achten Sie auf „/dev/input/event11“
sudo evtest /dev/input/event11
Drücken Sie dann die Taste „OK“ und die Ausgabe ist unten
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 ------------
Achten Sie auf den „Wert c0041“. Dieser Wert c0041 ist der Scancode der Schaltfläche „OK“.
Erstellen Sie die hwdb-Datei
Jetzt haben wir die IDs und den Scan-Code, die wir brauchen. Tragen Sie diese in die oben stehenden „Generic input devices (also USB keyboards) identified by the usb kernel modalias“ ein, und schließlich haben wir die folgende Konfigurationsdatei G7BTS.hwdb:
evdev:input:b0005v045Ep0041e0300*
KEYBOARD_KEY_c0041=enter
In diesem Kontext ist die Schaltfläche „OK“ der Taste „Eingabe“ zugeordnet. Sie können sie jeder beliebigen Taste zuordnen.
Datei am Ziel ablegen
sudo mv G7BTS.hwdb /etc/udev/hwdb.d/
Aktualisieren
sudo udevadm hwdb --update
sudo udevadm trigger --verbose
Prüfen
sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'
Das Ergebnis ist
KEYBOARD_KEY_c0041=enter
Das Ende
Das sind alle Schritte zum Neuzuordnen von Tasten. Diese Neuzuordnung funktioniert auch nach dem Neustart noch.
Antwort2
Ich habe eine externe Tastatur in Ubuntu 20.04 zum Laufen gebracht, mit den Informationen vonhttps://www.foell.org/justin/remapping-keyboard-keys-in-ubuntu-with-udev-evdev/
- Verwenden Sie diese Option
sudo evtest
, um Informationen zu Ihrer Tastatur zu finden, etwa:
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
Input device name: "Keychron K6 Keyboard"
- verwenden
sudo evemu-describe
, um die Eigenschaften der Tastatur zu finden, einschließlich der führenden Nullen. In der Ausgabe finden Sie etwas wie:
# Properties:
N: Keychron K6 Keyboard
I: 0005 05ac 024f 011b
- Erstellen Sie die .hwdb-Datei wie Sie es getan haben, aberalle führenden 000, UndSetzen Sie alle hexadezimalen Symbole in Großbuchstabenwie:
# 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*
- Sie müssen Ihr System nicht neu starten. Führen Sie einfach Folgendes aus:
$ sudo systemd-hwdb update
$ sudo udevadm trigger
- Sie können überprüfen, ob Ihre Tastatur richtig zugeordnet wurde, indem Sie Folgendes verwenden
$ udevadm info /dev/input/event20
(ersetzen Sie event20 durch das Ereignis für Ihre Tastatur).