Wie ändere ich die Tastaturbelegung eines einzelnen Geräts (Logitech Presenter)?

20

Mein Logitech R400 Presenter sendet die folgenden Schlüsselcodes:

keycode 112 (keysym 0xff55,  Prior) [page up]
keycode 117 (keysym 0xff56,   Next) [page down]
keycode  60 (keysym   0x2e, period)
keycode  71 (keysym 0xffc2,     F5)
keycode   9 (keysym 0xff1b, Escape)

Grundsätzlich möchte ich diesen Presenter verwenden, um Banshee aus der Ferne zu steuern. Ich möchte also eine Zuordnung Priorzu B, Nextzu Nusw. vornehmen .

Wie kann ich die Tastenbelegung nur für dieses Gerät ändern (da ich diese Tastencodes auf keinen Fall global neu zuordnen möchte)?

Drehmoment
quelle
AFAIU "Slave Pointer" bedeutet, dass es sich um eine Maus handelt, nicht um eine Tastatur. Sie können eine Tastaturbelegung nicht auf eine Maus laden. Sind das wirklich die einzigen Geräte in der xinput-Liste?
Marius Gedminas
@MariusGedminas Ich musste die / dev / input / eventX-Geräte durchgehen und event5 war der Präsentator, also scheint es immerhin eine "Tastatur" zu sein.
htorque

Antworten:

15

Ich habe das nie gemacht, aber ich denke, Sie müssen eine Keymap-Datei erstellen /lib/udev/keymaps/und eine Regel für Ihr Gerät hinzufügen/lib/udev/rules.d/95-keymap.rules


Einzelheiten:

  • Eine udev-Keymap ordnet Scan-Codes Schlüsselcodes zu. Sie müssen also beide finden, um die Keymap-Datei zu erstellen. Führen Sie die folgenden Schritte aus, um die Scan-Codes zu finden, und drücken Sie die Tasten auf dem Gerät:

    sudo /lib/udev/keymap -i input/event5
    

    Möglicherweise müssen Sie für event * unterschiedliche Nummern ausprobieren . Die Ausgabe sollte folgendermaßen aussehen:

    scan code: 0x70037   key code: dot
    scan code: 0x70029   key code: esc
    scan code: 0x7003E   key code: f5
    scan code: 0x7004B   key code: pageup
    scan code: 0x7004E   key code: pagedown
    

    Eine Liste der Schlüsselcodes finden Sie hier .

    Erstellen Sie nun die Keymap-Datei (ich speichere sie als / lib / udev / keymaps / logitech-r400 ):

    0x70037 brightnessdown
    0x70029 brightnessup
    0x7003E brightnessdown
    0x7004B brightnessup
    0x7004E brightnessdown
    

    Tut nichts Sinnvolles - nur einen Test, um zu sehen, ob es funktioniert.

  • Führen Sie Folgendes aus, um die neue Tastaturbelegung vorübergehend zu testen:

    sudo /lib/udev/keymap input/event5 /lib/udev/keymaps/logitech-r400
    

    was zu einer Ausgabe wie dieser führen sollte:

    Remapped scancode 0x70037 to 0xe0 (prior: 0x34)
    Remapped scancode 0x70029 to 0xe1 (prior: 0x01)
    Remapped scancode 0x7003e to 0xe0 (prior: 0x3f)
    Remapped scancode 0x7004b to 0xe1 (prior: 0x68)
    Remapped scancode 0x7004e to 0xe0 (prior: 0x6d)
    

    Die Tasten sollten jetzt die Helligkeit ändern.

  • Wenn Sie diese Änderung dauerhaft machen möchten, müssen Sie eine udev-Regel hinzufügen /lib/udev/rules.d/95-keymap.rules, die die Keymap-Datei auf das Gerät anwendet.

    1. Öffne die Datei: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. Fügen Sie am Ende der Datei, aber vor der LABEL="keyboard_end"Zeile Folgendes hinzu:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. Speichern, schließen und nach einem Neustart sollten die Tasten die Helligkeit ändern.

Florian Diesch
quelle
Oh, wie könnte ich das vergessen (/ lib / udev / keymaps / zepto-znote wurde von mir beigesteuert: D). Ich werde später mehr darüber, wie ich es gemacht habe, zu Ihrer Antwort hinzufügen.
htorque
Ich wollte nur zu dieser Antwort hinzufügen, dass Sie herausfinden können, auf welchem ​​"eventX" Ihre Tastatur läuft /lib/udev/findkeyboards. Daraufhin werden alle derzeit angeschlossenen Tastaturen aufgelistet, sodass Sie nicht so viele ausprobieren müssen. Der logitech r400 erschien mir als "USB keyboard: input / event11".
jat255
Gute Antwort, aber wie finde ich den zu verwendenden ID_VENDOR und das zu verwendende idProduct heraus? Ich habe es versucht /sys/class/dmi/id/sys_vendorund /sys/class/dmi/id/product_nameaber es hat nicht funktioniert.
PutzKipa
2
/lib/udev/keymapund /lib/udev/findkeyboardsexistiert nicht mehr am 13.10. Laut forum.ubuntu-fr.org/viewtopic.php?id=1395051 soll stattdessen evtest verwendet werden.
Stéphane Gourichon
6
Hallo @htorque, könntest du die Antwort auf den neuen Weg aktualisieren? In Ubuntu Trusty existieren all diese Dateien nicht mehr. Sie sind der einzige, den ich im Internet gesehen habe und der die gleiche Ausgabe hat.
London
4

Ich bin auf Ubuntu 16.04. Ich habe eine Anleitung hier

Erkennen mit evtest

sudo evtest

Schauen Sie sich die Geräteliste an:

/dev/input/event0:  Lid Switch
/dev/input/event1:  Power Button
/dev/input/event2:  Sleep Button
/dev/input/event3:  Power Button
/dev/input/event4:  AT Translated Set 2 keyboard
/dev/input/event5:  Video Bus
/dev/input/event6:  USB Optical Mouse
/dev/input/event7:  AlpsPS/2 ALPS DualPoint Stick
/dev/input/event8:  AlpsPS/2 ALPS DualPoint TouchPad
/dev/input/event9:  Logitech USB Receiver
/dev/input/event10: Logitech USB Receiver
/dev/input/event11: HDA Intel PCH Dock Mic
/dev/input/event12: HDA Intel PCH Headset Mic
/dev/input/event13: HDA Intel PCH Dock Line Out
/dev/input/event14: HDA Intel PCH Headphone
/dev/input/event15: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event16: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event18: Integrated Webcam
/dev/input/event19: Dell WMI hotkeys
Select the device event number [0-19]: 9
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc52d version 0x111
Input device name: "Logitech USB Receiver"

Nahm den ersten "Logitech USB Receiver", hier hat er Event ID 9.

Testing ... (interrupt to exit)

OK, jetzt will evtest Eingaben, klicke einfach auf die Logitech-Fernbedienungstasten, ich habe folgendes (vereinfacht):

[>] value 7003e (KEY_PRESENTATION)
[>] value 70029 (KEY_PRESENTATION)
[ ] value 70037 (KEY_DISPLAYTOGGLE)
 <  value 7004b (KEY_PAGEUP)
 >  value 7004e (KEY_PAGEDOWN)

Hinweis: Ich habe festgestellt, dass nach mehrmaligem Klicken auf [>] 7003e, dann 70029, dann 7003e usw. ausgegeben wurden. Ich weiß nicht, warum.

Udev conf ändern

Nachdem wir nun Eingabecodes haben, schauen wir uns udev conf an:

sudo gedit /lib/udev/hwdb.d/60-keyboard.hwdb

Suche nach „R400“ und ersetzen Präsentation & displaytoggle durch das, was Sie wollen, playpause & stopcd Pfeiltasten:

# Logitech Presenter R400
evdev:input:b0003v046DpC52D*
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"   
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"  
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

Wie bereits erwähnt, weil 07003e & 070.029 die gleiche Taste ist, gab ich ihnen die gleiche Leistung oben drücken. Die Modelle 7004b und 7004e werden hier nicht standardmäßig angezeigt, da es sich möglicherweise um native PAGEUP- und PAGEDOWN-Eingänge handelt, die nicht mit "Logitech Presenter R400" zusammenhängen. Fügen wir sie hinzu:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >  

Hier ist meine letzte Bestätigung:

 KEYBOARD_KEY_07004b=previoussong #    top  left  <
 KEYBOARD_KEY_07004e=nextsong     #    top right  >
 KEYBOARD_KEY_070029=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_07003e=playpause    # bottom  left [>] was "presentation"
 KEYBOARD_KEY_070037=stopcd       # bottom right [ ] was "displaytoggle"

(Neue) Regeln neu laden

sudo udevadm hwdb --update

Verwenden Sie dann dieselbe Ereignis-ID wie zuvor, hier Ereignis-ID 9:

sudo udevadm trigger /dev/input/event9

Sie können diese neue Zuordnung in einem Webbrowser überprüfen, zum Beispiel:

$('body').on('keydown', function(e){ console.log(e.key) })

Das gab mir:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight
Ssh-uunen
quelle
Ich habe einige kleine Verbesserungen in Ihrem ursprünglichen logitech-r400-remap.md-Handbuch von GitHub vorgenommen. Wenn Sie möchten, können Sie sie entweder ändern oder auf Ihrer GitHub-Webseite bearbeiten (es ist keine Zuweisung an mich erforderlich). Ihre Antwort wurde abgelehnt, da es sich meiner Meinung nach nur um eine Link-Antwort handelte, und ich habe die Ablehnung ebenfalls aufgehoben.
Karl
Die Downotes wurden entfernt, sodass Ihre Antwort nun die Möglichkeit hat, wie jede andere Antwort hier für sich betrachtet zu werden.
Karl
1
Benutzt euren Führer. Arbeitete wie ein Zauber
Costa