¿Cómo cambio el mapa de teclas de un solo dispositivo (presentador de Logitech)?

19

Mi presentador Logitech R400 envía los siguientes códigos clave:

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)

Básicamente, quiero usar este presentador para controlar de forma remota Banshee, por lo que me gustaría volver a asignar Prior a B , Next a N , y así sucesivamente.

¿Cómo puedo cambiar el mapa de teclas solo para este dispositivo (ya que ciertamente no quiero volver a asignar esos códigos clave globalmente)? ​​

    
pregunta htorque 20.10.2011 - 14:51

2 respuestas

15

Nunca lo hice, pero creo que debes crear un archivo de mapa de teclas en /lib/udev/keymaps/ y agregar una regla para tu dispositivo a /lib/udev/rules.d/95-keymap.rules

Detalles:

  • Un mapa de teclas de udev correlaciona los códigos de escaneo con los códigos clave, por lo que debe encontrar ambos para crear el archivo de mapa de teclas. Para encontrar los códigos de escaneo, ejecute lo siguiente y presione los botones en el dispositivo:

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

    Es posible que deba probar diferentes números para evento * . La salida debería verse así:

    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
    

    Se puede encontrar una lista de códigos clave aquí .

    Ahora crea el archivo de mapa de teclas (lo estoy almacenando como / lib / udev / keymaps / logitech-r400 ):

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

    No hace nada útil, solo una prueba para ver fácilmente si funciona.

  • Para probar temporalmente el nuevo mapa de teclas, ejecuta:

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

    que debería generar resultados como este:

    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)
    

    Los botones ahora deberían cambiar el brillo.

  • Si desea que el cambio sea permanente, debe agregar una regla de udev a /lib/udev/rules.d/95-keymap.rules que aplique el archivo de mapa de teclas al dispositivo.

    1. Abra el archivo: gksudo gedit /lib/udev/rules.d/95-keymap.rules
    2. En la parte inferior del archivo, pero antes de la línea LABEL="keyboard_end" , agregue:

      ENV{ID_VENDOR}=="Logitech*", ATTRS{idProduct}=="c52d", RUN+="keymap $name logitech-r400"
      
    3. Guardar, cerrar y después de reiniciar, los botones deberían cambiar el brillo.

respondido por el Florian Diesch 22.10.2011 - 18:38
3

Estoy en Ubuntu 16.04. Hice una guía aquí

  

Detectando con evtest

sudo evtest
     

Mira la lista de dispositivos:

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

Tomó el primer "Receptor USB de Logitech", aquí tiene el id. de evento 9.

Testing ... (interrupt to exit)
     

Ahora bien, evtest quiere entradas, solo haga clic en los botones del control remoto de Logitech,   Obtuve esto (simplificado):

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

Nota: descubrí después de que al hacer clic varias veces en [& gt;] estaba dando 7003e, luego 70029, luego 7003e, etc. No sé por qué.

     

Modificación de udev conf

     

Ahora que tenemos códigos de entrada, echemos un vistazo a conf de udev:

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

Busque "R400" y reemplace la presentación & amp; displaytoggle por lo que   want, playpause & amp; stopcd teclas de flecha:

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

Como se indicó anteriormente, porque 07003e & amp; 070029 son el mismo botón, yo   les dio la misma clave de salida arriba . El 7004b y amp; 7004e no aparece   aquí de manera predeterminada, tal vez porque son PAGEUP nativos & amp; PÁGINA ABAJO   entradas y no relacionadas con "Logitech Presenter R400". Vamos a agregarlos:

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

Aquí está mi confirmación final:

 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"
     

Reglas de recarga (nuevas)

sudo udevadm hwdb --update
     

Luego, utilizando el mismo ID de evento que elegimos antes, aquí identificador de evento 9:

sudo udevadm trigger /dev/input/event9
     

Puede verificar esta nueva asignación en un navegador web, por ejemplo:

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

Eso me dio:

[>] ArrowUp
[ ] ArrowDown
 <  ArrowLeft
 >  ArrowRight
    
respondido por el Ssh-uunen 26.01.2017 - 11:28

Lea otras preguntas en las etiquetas