Come posso cambiare la mappa dei tasti di un singolo dispositivo (Logitech presenter)?


20

Il mio presentatore Logitech R400 invia i seguenti codici chiave:

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)

Fondamentalmente, io voglio usare questo presentatore di controllare a distanza Banshee, quindi mi piacerebbe rimappare Priora B, Nexta N, e così via.

Come posso cambiare la mappa dei tasti solo per questo dispositivo (dato che certamente non voglio rimappare quei codici chiave a livello globale)?


"Puntatore slave" AFAIU significa che è un mouse, non una tastiera. Non è possibile caricare una keymap su un mouse. Questi sono davvero gli unici dispositivi presenti nell'elenco xinput?
Marius Gedminas,

@MariusGedminas Ho dovuto passare attraverso i dispositivi / dev / input / eventX ed event5 era il presentatore, quindi dopo tutto sembra essere una "tastiera".
htorque,

Risposte:


15

Non l'ho mai fatto, ma penso che devi creare un file keymap /lib/udev/keymaps/e aggiungere una regola per il tuo dispositivo/lib/udev/rules.d/95-keymap.rules


Dettagli:

  • Una keymap udev associa i codici di scansione ai codici chiave, quindi è necessario trovarli entrambi per creare il file keymap. Per trovare i codici di scansione, eseguire quanto segue e premere i pulsanti sul dispositivo:

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

    Potrebbe essere necessario provare numeri diversi per l' evento * . L'output dovrebbe essere simile al seguente:

    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
    

    Un elenco di codici chiave è disponibile qui .

    Ora crea il file keymap (lo sto memorizzando come / lib / udev / keymaps / logitech-r400 ):

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

    Non fa nulla di utile - solo un test per vedere facilmente se funziona.

  • Per testare temporaneamente la nuova keymap, eseguire:

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

    che dovrebbe tradursi in un output del genere:

    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)
    

    I pulsanti dovrebbero ora cambiare la luminosità.

  • Se si desidera rendere permanente tale modifica, è necessario aggiungere una regola udev a /lib/udev/rules.d/95-keymap.rulesquella che applica il file keymap al dispositivo.

    1. Apri il file: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. Nella parte inferiore del file, ma prima della LABEL="keyboard_end"riga, aggiungi:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. Salva, chiudi e dopo un riavvio i pulsanti dovrebbero cambiare la luminosità.


Oh, come potrei dimenticarmene (/ lib / udev / keymaps / zepto-znote è stato contribuito da me: D). In seguito aggiungerò ulteriori informazioni su come l'ho fatto funzionare alla tua risposta.
htorque,

Volevo solo aggiungere a questa risposta che puoi concentrarti su quale "eventX" potrebbe essere la tua tastiera eseguendo /lib/udev/findkeyboards. Questo elencherà tutte le tastiere attualmente collegate in modo da non doverne provare così tante. Il logitech r400 si presenta come "Tastiera USB: input / event11" per me.
jat255,

Bella risposta, ma come posso scoprire ID_VENDOR e idProduct da utilizzare? Ci ho provato /sys/class/dmi/id/sys_vendore /sys/class/dmi/id/product_namenon ha funzionato.
PutzKipa,

2
/lib/udev/keymape /lib/udev/findkeyboardsnon esiste più il 13.10. forum.ubuntu-fr.org/viewtopic.php?id=1395051 dice invece di usare evtest.
Stéphane Gourichon,

6
Ciao @Htorque, potresti aggiornare la risposta al nuovo modo? In Ubuntu Trusty tutti questi file non esistono più. Sei l'unico che ho visto in rete con la stessa domanda.
Londra,

4

Sono su Ubuntu 16.04. Ho fatto una guida qui

Rilevando con evtest

sudo evtest

Guarda l'elenco dei dispositivi:

/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"

Ha preso il primo "Logitech USB Receiver", qui ha ID evento 9.

Testing ... (interrupt to exit)

OK ora evtest vuole input, basta fare clic sui pulsanti remoti Logitech, ho ottenuto questo (semplificato):

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

Nota: ho scoperto che dopo aver fatto clic più volte su [>] è stato visualizzato 7003e, quindi 70029, quindi 7003e, ecc. Non so perché.

Modifica udev conf

Ora che abbiamo i codici di input, diamo un'occhiata a udev conf:

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

Cerca "R400" e sostituisci la presentazione e attiva / disattiva display con i tasti freccia desiderati, playpause e stopcd :

# 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"

Come indicato in precedenza, a causa 07003e e 070.029 sono lo stesso tasto, ho dato loro la stessa uscita su chiave. 7004b e 7004e non vengono visualizzati qui per impostazione predefinita, forse perché sono input PAGEUP e PAGEDOWN nativi e non correlati a "Logitech Presenter R400". Aggiungiamoli:

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

Ecco il mio conf finale:

 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"

Ricarica (nuove) regole

sudo udevadm hwdb --update

Quindi utilizzando lo stesso ID evento che abbiamo scelto prima, qui ID evento 9:

sudo udevadm trigger /dev/input/event9

È possibile controllare questa nuova mappatura in un browser Web, ad esempio:

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

Questo mi ha dato:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight

Ho apportato alcuni piccoli miglioramenti alla tua guida logitech-r400-remap.md originale di GitHub. Sentiti libero di cambiarli o modificarli nella tua pagina web GitHub se vuoi (non è necessaria alcuna attribuzione a me). La tua risposta è stata sottovalutata perché a mio avviso era solo un link, quindi ho annullato anche il downvote.
Karel,

I punti negativi sono stati rimossi, quindi ora la tua risposta ha l'opportunità di essere considerata per i suoi meriti come qualsiasi altra risposta qui.
Karel,

1
Ho usato la tua guida. Ha funzionato come un fascino:)
Costa
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.