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

20

Mon présentateur Logitech R400 envoie les codes clés 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 veux utiliser ce présentateur pour contrôler à distance Banshee, donc j'aimerais remapper Priorvers B, Nextvers N, etc.

Comment puis-je modifier la carte des touches pour cet appareil uniquement (car je ne veux certainement pas remapper ces codes clés à l'échelle mondiale)?

htorque
la source
AFAIU "pointeur esclave" signifie que c'est une souris, pas un clavier. Vous ne pouvez pas charger un clavier sur une souris. Est-ce vraiment les seuls appareils présents dans la liste xinput?
Marius Gedminas
@MariusGedminas J'ai dû passer par les périphériques / dev / input / eventX et event5 était le présentateur, donc il semble être un "clavier" après tout.
htorque

Réponses:

15

Je n'ai jamais fait ça, mais je pense que vous devez créer un fichier keymap /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 numérisation aux codes clés, vous devez donc trouver les deux pour créer le fichier de clavier. Pour trouver les codes de numérisation, exécutez ce qui 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 * . La sortie 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 des codes clés peut être trouvée ici .

    Créez maintenant le fichier keymap (je le stocke sous / 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 clavier, exécutez:

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

    ce qui devrait entraîner une sortie comme celle-ci:

    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 une règle udev à /lib/udev/rules.d/95-keymap.rulescelle qui applique le fichier de clavier à l'appareil.

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

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

Florian Diesch
la source
Oh, comment pourrais-je oublier cela (/ lib / udev / keymaps / zepto-znote a été contribué par moi: D). J'ajouterai plus tard comment je l'ai fait fonctionner à votre réponse.
htorque
Je voulais juste ajouter à cette réponse que vous pouvez vous concentrer sur quel "eventX" votre clavier pourrait être en exécutant /lib/udev/findkeyboards. Cela répertoriera tous les claviers actuellement connectés afin que vous n'ayez pas à en essayer autant. Le logitech r400 est apparu comme "clavier USB: entrée / événement11" pour moi.
jat255
Bonne réponse, mais comment découvrir l'ID_VENDOR et l'idProduct à utiliser? J'ai essayé /sys/class/dmi/id/sys_vendoret /sys/class/dmi/id/product_nameça n'a pas marché.
PutzKipa
2
/lib/udev/keymapet /lib/udev/findkeyboardsn'existent plus le 13.10. forum.ubuntu-fr.org/viewtopic.php?id=1395051 dit d'utiliser evtest à la place.
Stéphane Gourichon
6
Bonjour @htorque, pourriez-vous mettre à jour la réponse à la nouvelle façon? Dans Ubuntu Trusty, tous ces fichiers n'existent plus. Tu es le seul que j'ai vu sur le net avoir la même chose.
londumas
4

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"

A pris le premier "Logitech USB Receiver", ici il a l'ID d'événement 9.

Testing ... (interrupt to exit)

OK maintenant, evtest veut des entrées, cliquez simplement sur les boutons de la télécommande Logitech, j'ai obtenu 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 après 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 des codes d'entrée, jetons un œil à udev conf:

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

Recherchez "R400" et remplacez la présentation et l'affichage par ce que vous voulez, les touches fléchées playpause et 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"

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

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

Voici ma dernière 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"

Rechargement (nouvelles) règles

sudo udevadm hwdb --update

Ensuite, en utilisant le même identifiant d'événement que nous avons choisi auparavant, voici l'identifiant d'événement 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
Ssh-uunen
la source
J'ai apporté quelques petites améliorations à votre guide original logitech-r400-remap.md de GitHub. N'hésitez pas à les modifier ou à les modifier dans votre page Web GitHub si vous le souhaitez (aucune attribution à moi n'est nécessaire). Votre réponse a été rejetée parce que c'était une réponse de lien uniquement à mon avis, j'ai donc également annulé le vote négatif.
karel
Les rétrogradations ont été supprimées, donc maintenant votre réponse a la possibilité d'être considérée en tant que telle comme toute autre réponse ici.
karel
1
J'ai utilisé votre guide. A fonctionné comme un charme :)
Costa