web-dev-qa-db-fra.com

Comment changer le clavier d'un seul appareil (présentateur Logitech)?

Mon présentateur Logitech R400 envoie les codes de clé suivants:

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)

Fondamentalement, je souhaite utiliser ce présentateur pour contrôler Banshee à distance. J'aimerais donc remapper Prior en B, Next en N, etc.

Comment puis-je modifier le clavier pour cet appareil uniquement (car je ne souhaite certainement pas remapper ces codes de clé globalement)?

20
htorque

Je ne l'ai jamais fait, mais je pense que vous devez créer un fichier de clé dans /lib/udev/keymaps/ et ajouter une règle pour votre appareil à /lib/udev/rules.d/95-keymap.rules


Détails:

  • Un clavier udev mappe les codes de balayage en codes de clés. Vous devez donc trouver les deux pour créer le fichier de clavier. Pour trouver les codes de balayage, procédez comme suit et appuyez sur les boutons de l'appareil:

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

    Vous devrez peut-être essayer différents numéros pour l'événement * . Le résultat devrait ressembler à ceci:

    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
    

    Une liste de codes de clé peut être trouvée ici .

    Maintenant, créez le fichier de clavier (je le stocke sous le nom /lib/udev/keymaps/logitech-r400 ):

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

    Ne fait rien d'utile - juste un test pour voir facilement si cela fonctionne.

  • Pour tester temporairement le nouveau keymap, exécutez:

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

    ce qui devrait produire une sortie comme ceci:

    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)
    

    Les boutons devraient maintenant changer la luminosité.

  • Si vous souhaitez rendre cette modification permanente, vous devez ajouter à /lib/udev/rules.d/95-keymap.rules une règle udev qui applique le fichier de mappage de clés au périphérique.

    1. Ouvrez le fichier: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. Au bas du fichier, mais avant la ligne LABEL="keyboard_end", ajoutez:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. Enregistrer, fermer et après un redémarrage, les boutons doivent modifier la luminosité.

15
Florian Diesch

Je suis sur Ubuntu 16.04. J'ai fait un guide ici

Détecter avec evtest

Sudo evtest

Regardez la liste des appareils:

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

Pris le premier "Logitech USB Receiver", ici il a l'identifiant de l'événement 9.

Testing ... (interrupt to exit)

OK, evtest veut maintenant des entrées, il suffit de cliquer sur les boutons de la télécommande Logitech, j'ai ceci (simplifié):

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

Remarque: J'ai découvert par la suite que cliquer plusieurs fois sur [>] donnait 7003e, puis 70029, puis 7003e, etc. Je ne sais pas pourquoi.

Modification de udev conf

Maintenant que nous avons les codes d'entrée, regardons udev conf:

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

Recherchez "R400" et remplacez la présentation & displaytoggle par ce que vous voulez, playpause & stopcd touches fléchées:

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

Comme indiqué précédemment, comme 07003e et 070029 sont le même bouton, je leur ai donné la même sortie up . Les 7004b et 7004e n'apparaissent pas ici par défaut, peut-être parce qu'il s'agit d'entrées natives PAGEUP & PAGEDOWN et non liées à "Logitech Presenter R400". Ajoutons-les:

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

Voici ma 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"

Rechargement (nouveau) règles

Sudo udevadm hwdb --update

Ensuite, en utilisant le même identifiant d’événement que nous avions choisi auparavant, voici l’événement id 9:

Sudo udevadm trigger /dev/input/event9

Vous pouvez vérifier ce nouveau mappage dans un navigateur Web, par exemple:

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

Cela m'a donné:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight
4
Ssh-uunen