Wie funktioniert der MS Natural Ergonomic 4000-Schieberegler unter Linux Mint?

8

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, evtestkann Ereignisse sehen, xevzeigt 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.

user3033648
quelle
Haben Sie jemals diese (eher kurze + einfache) Lösung überprüft ?
Frank Nocke

Antworten:

6

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_ZOOMINund KEY_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.

  1. Wie in der bereits verknüpften Antwort erwähnt , hat jemand eine gepatchte Variante des X- evdevTreibers 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 Option event_key_remaperkannt. Es wird vom Standardtreiber nicht erkannt evdev, daher ist es nicht verwunderlich, dass Ihr xorg.confEintrag nichts bewirkt hat.

    Das ist wahrscheinlich die sauberste Methode.

  2. Während der Übernahme von Linux verfügt systemdanscheinend 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 den EVIOCGKEYCODE_V2und EVIOCSKEYCODE_V2ioctls auf dem Gerät abgerufen werden. Ein allgemeines Tool , das dem IR-Empfänger ähnelt xmodmapoder loadkeys/dumpkeysnicht zu existieren scheint, obwohl einige IR-Empfänger-Tools diese Ioctls anscheinend verwenden. Wenn die systemdDatenbank so funktioniert, wäre eine flexiblere Alternative, ein solches Tool in einer udevRegel 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 ...

  3. 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 evtestes beispielsweise aus, analysieren Sie die Ausgabe mit einem Bash-Skript und rufen Sie es xdotoolmit 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.)

dirkt
quelle