Ich versuche, den Schieberegler auf der MS-Tastatur funktionsfähig zu machen, aber das funktioniert immer noch nicht.
Was ich schon versucht habe:
im /etc/udev/hwdb.d/61-keyboard-local.hwdb
keyboard:usb:v045Ep00DB*
KEYBOARD_KEY_c022d=up
KEYBOARD_KEY_c022e=down
und
evdev:input:b0003v045Ep00DB*
KEYBOARD_KEY_c022d=up
KEYBOARD_KEY_c022e=down
folgenden
sudo udevadm hwdb --update
sudo udevadm control --reload
und Neustart hat nichts getan.
Im /lib/udev/keymaps/microsoft-ergonomic-keyboard
0xC022D 0xC1 # Zoom Up which we wish to be Scroll up
0xC022E 0xC2 # Zoom Down which we wish to be Scroll down
und Neustart hat nichts getan.
Im /etc/X11/xorg.conf.d/10-keyboard.conf
Section "InputDevice"
Identifier "Keyboard1"
Driver "evdev"
Option "Device" "/dev/input/event9"
Option "event_key_remap" "418=185 419=186 423=101 425=156 421=157"
EndSection
und Neustart hat nichts getan.
Was ich habe ist
> sudo evtest /dev/input/event9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x45e product 0xdb version 0x111
Input device name: "Microsoft Natural® Ergonomic Keyboard 4000"
...
Testing ... (interrupt to exit)
Event: time 1478692111.766327, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d
Event: time 1478692111.766327, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 1
Event: time 1478692111.766327, -------------- SYN_REPORT ------------
Event: time 1478692111.886318, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d
Event: time 1478692111.886318, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 0
Event: time 1478692111.886318, -------------- SYN_REPORT ------------
Event: time 1478692112.678287, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022e
Event: time 1478692112.678287, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 1
Event: time 1478692112.678287, -------------- SYN_REPORT ------------
Event: time 1478692112.798370, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022e
Event: time 1478692112.798370, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 0
Event: time 1478692112.798370, -------------- SYN_REPORT ------------
Der Schieberegler funktioniert also, evtest
kann Ereignisse sehen, xev
zeigt aber nichts an. Kann ich noch etwas versuchen, damit es 2016 funktioniert?
Ich verwende Linux Mint 18 Sarah mit dem 4.4.0-34-generischen Kernel.
linux-mint
keyboard
udev
keyboard-event
user3033648
quelle
quelle
Antworten:
Hintergrund: Ihre Tastatur ist ein HID- USB-Gerät, und der Kernel erkennt die HID-USB-Ereignisse für Ihre Schieberegler ordnungsgemäß und übersetzt sie in Schlüsselcodes (
KEY_ZOOMIN
undKEY_ZOOMOUT
). Insofern funktioniert es also bereits: Sie können die Ereignisse empfangen und etwas Nützliches daraus machen.Die X-Tastaturübersetzungen unterstützen jedoch nur Schlüsselcodes bis zu 255 (siehe diese Antwort , dies ist eine Einschränkung des X-Protokolls). Sie können sie also nicht in X-Keysyms konvertieren. (Und vielleicht ist das sowieso nicht das, was Sie wollen, da das Zoomen normalerweise von Maustastenereignissen in Anwendungen, nämlich den Tasten 4 und 5, übernommen wird. Selbst wenn Sie es in Keysyms konvertieren würden, würden sie nicht vergrößern oder verkleinern).
Nach dem, was Sie versucht haben, möchten Sie sie upund downTasten neu zuordnen , identisch mit den Pfeiltasten nach oben und unten, die bereits als andere Tasten auf der Tastatur verfügbar sind.
Wie in der bereits verknüpften Antwort erwähnt , hat jemand eine gepatchte Variante des X-
evdev
Treibers erstellt , damit X Schlüsselcodes größer als 255 neu zuordnen kann . Sie müssen diese gepatchte Variante also kompilieren und installieren, dann wird die Optionevent_key_remap
erkannt. Es wird vom Standardtreiber nicht erkanntevdev
, daher ist es nicht verwunderlich, dass Ihrxorg.conf
Eintrag nichts bewirkt hat.Das ist wahrscheinlich die sauberste Methode.
Während der Übernahme von Linux verfügt
systemd
anscheinend auch eine eigene Hardwaredatenbank und kann Tastaturzuordnungen überschreiben. Ich bin mir nicht sicher, auf welcher Ebene des Kernels dies funktioniert, daher weiß ich nicht, ob es überhaupt helfen wird, und das Format für die "Hardwaredatenbank" scheint nicht dokumentiert zu sein. Deshalb kann ich Ihnen in dieser Hinsicht nicht viel helfen.Das Format für den Abgleich scheint sich jedoch geändert zu haben. Vielleicht haben Sie mehr Glück, wenn Sie die Busnummer wie beschrieben angeben.
Bearbeiten : Beim Lesen der Kernelquelle stellte ich fest, dass jedes Eingabegerät seinen eigenen Scancode (hardwareabhängig, bis zu 8 Bytes, obwohl an vielen Stellen nur 1/2/4 Bytes im Kernel übertragen werden) zum Schlüsselcode (was Sie sehen) hat
evtest
) Übersetzungszuordnungen. Große Codewerte können eingestellt und mit denEVIOCGKEYCODE_V2
undEVIOCSKEYCODE_V2
ioctls auf dem Gerät abgerufen werden. Ein allgemeines Tool , das dem IR-Empfänger ähneltxmodmap
oderloadkeys/dumpkeys
nicht zu existieren scheint, obwohl einige IR-Empfänger-Tools diese Ioctls anscheinend verwenden. Wenn diesystemd
Datenbank so funktioniert, wäre eine flexiblere Alternative, ein solches Tool in einerudev
Regel zu verwenden (auch einfacher zum Testen). Ich habe ein schnelles C-Programm geschrieben, um das Mapping zu sichern. Vielleicht sollte ich es auf Github setzen ...Grundsätzlich können Sie die Ereignisse bereits mit Ihren eigenen Programmen oder Skripten verarbeiten und alles tun, was Sie möchten. Führen Sie
evtest
es beispielsweise aus, analysieren Sie die Ausgabe mit einem Bash-Skript und rufen Sie esxdotool
mit einem Tastendruck von 4 oder 5 auf, um den gleichen Effekt wie mit einem Maus-Scrollrad für Ihre Schieberegler zu erzielen. Usw., S. (Es gab eine Stapelaustauschfrage mit einem rudimentären Skript für einen ähnlichen Zweck, aber ich kann sie momentan nicht finden. Bei Bedarf kann ich weitere suchen.)quelle