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

19

Il 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, voglio usare questo relatore per controllare a distanza Banshee, quindi mi piacerebbe rimappare Prior in B , Next in N , e così via.

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

    
posta htorque 20.10.2011 - 16:51

2 risposte

15

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

dettagli:

  • Una keymap udev associa i codici di scansione ai codici chiave, quindi è necessario trovare 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 evento * . L'output dovrebbe essere simile a questo:

    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 può essere trovato 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 mappa dei tasti, esegui:

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

    che dovrebbe dare come risultato:

    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)
    

    Ora i pulsanti dovrebbero cambiare la luminosità.

  • Se vuoi rendere permanente la modifica, devi aggiungere una regola udev a /lib/udev/rules.d/95-keymap.rules 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 riga LABEL="keyboard_end" , 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à.

risposta data Florian Diesch 22.10.2011 - 20:38
3

Sono su Ubuntu 16.04. Ho creato una guida qui

  

Rilevamento 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 l'ID evento 9.

Testing ... (interrupt to exit)
     

OK, ora evtest vuole input, basta fare clic sui pulsanti del telecomando 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 [& gt;] stavo dando 7003e, quindi 70029, quindi 7003e, ecc. Non so perché.

     

Modifica di 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 & amp; displaytoggle by what you   voglio, playpause & amp; Tasti freccia 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 notato in precedenza, perché 07003e & amp; 070029 sono lo stesso pulsante, I   dato loro lo stesso tasto su . Il 7004b & amp; 7004e non appare   qui di default, forse perché sono nativi PAGEUP & amp; PAGINA GIÙ   ingressi e non relativi a "Logitech Presenter R400". Aggiungiamoli:

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

Ecco la mia ultima conf:

 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 (nuova) regole

sudo udevadm hwdb --update
     

Quindi utilizzando lo stesso ID evento che abbiamo scelto prima, ecco l'ID evento 9:

sudo udevadm trigger /dev/input/event9
     

Puoi 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
    
risposta data Ssh-uunen 26.01.2017 - 12:28

Leggi altre domande sui tag