Simular botón del medio en mouse 8bitdo N30 en Linux

Publicado el 17 de septiembre de 2024

Desde hace un tiempo soy el feliz poseedor de un mouse N30 de 8BitDo, o “el mouse NES” como le digo yo. El mouse es un homenaje al Nintendo Entertainment System, y usa el mismo tipo de botones y paleta de colores. Sinceramente es más “lindo” que “cómodo”, pero al final del día es un mouse, y no uso tanto el ratón a la hora de programar (para cosas como juegos o diseño, más vale usar otro más ergonómico).

Cuenta con los dos botones tradicionales y la superficie entre medio sirve para hacer scroll, a pesar de no tener ninguna indicación visual. Es raro, pero hace scroll, y también podemos usar el d-pad a la izquierda pero el movimiento es un poco más “robótico”. Algo que extrañaba es el botón del medio del mouse, que uso mucho para cerrar pestañas, arrastrar la pantalla en GIMP, o abrir enlaces en pestaña nueva, entre otras interacciones. Por defecto, presionar los dos botones a la vez no simulaba el botón del medio en mi sistema, así que tuve que investigar el tema.

Mouse 8bitdo NES

Mouse 8bitdo NES – Picando Código recomienda lavarse las manos antes de tocar el mouse o controles después de haber comido golosinas…

Encontré que con la herramienta xinput podemos tanto detectar el mouse como cambiar las características habilitadas. Al correr xinput list en mi consola, obtengo la lista de dispositivos:

$ xinput list
xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DELL0820:00 044E:121F Mouse               id=11   [slave  pointer  (2)]
⎜   ↳ DELL0820:00 044E:121F Touchpad            id=12   [slave  pointer  (2)]
⎜   ↳ Keychron K8 Keychron K8                   id=19   [slave  pointer  (2)]
⎜   ↳ MOSART Semi. 2.4G Keyboard Mouse Consumer Control id=22   [slave  pointer  (2)]
⎜   ↳ MOSART Semi. 2.4G Keyboard Mouse          id=25   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
   ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
   ↳ Power Button                              id=6    [slave  keyboard (3)]
   ↳ Video Bus                                 id=7    [slave  keyboard (3)]
   ↳ Video Bus                                 id=8    [slave  keyboard (3)]
   ↳ Power Button                              id=9    [slave  keyboard (3)]
   ↳ Sleep Button                              id=10   [slave  keyboard (3)]
   ↳ DELL0820:00 044E:121F UNKNOWN             id=13   [slave  keyboard (3)]
   ↳ Intel HID events                          id=14   [slave  keyboard (3)]
   ↳ Intel HID 5 button array                  id=15   [slave  keyboard (3)]
   ↳ Dell WMI hotkeys                          id=16   [slave  keyboard (3)]
   ↳ AT Translated Set 2 keyboard              id=17   [slave  keyboard (3)]
   ↳ Keychron K8 Keychron K8                   id=18   [slave  keyboard (3)]
   ↳ Keychron K8 Keychron K8                   id=20   [slave  keyboard (3)]
   ↳ MOSART Semi. 2.4G Keyboard Mouse System Control   id=21   [slave  keyboard (3)]
   ↳ MOSART Semi. 2.4G Keyboard Mouse Consumer Control id=23   [slave  keyboard (3)]
   ↳ MOSART Semi. 2.4G Keyboard Mouse          id=24   [slave  keyboard (3)]

Tiene pinta que es MOSART Semi. 2.4G Keyboard Mouse id=25. Pasándole el nombre a xinput, podemos ver qué propiedades tiene:

$ xinput list-props ‘pointer:MOSART Semi. 2.4G Keyboard Mouse’
Device ‘MOSART Semi. 2.4G Keyboard Mouse’:
       Device Enabled (215):   1
       Coordinate Transformation Matrix (217): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000
, 0.000000, 1.000000
       libinput Natural Scrolling Enabled (352):       0
       libinput Natural Scrolling Enabled Default (353):       0
       libinput Scroll Methods Available (354):        0, 0, 1
       libinput Scroll Method Enabled (355):   0, 0, 0
       libinput Scroll Method Enabled Default (356):   0, 0, 0
       libinput Button Scrolling Button (357): 2
       libinput Button Scrolling Button Default (358): 2
       libinput Button Scrolling Button Lock Enabled (359):    0
       libinput Button Scrolling Button Lock Enabled Default (360):    0
       libinput Middle Emulation Enabled (361):        1
       libinput Middle Emulation Enabled Default (362):        0
       libinput Accel Speed (363):     1.000000
       libinput Accel Speed Default (364):     0.000000
       libinput Accel Profiles Available (365):        1, 1
       libinput Accel Profile Enabled (366):   1, 0
       libinput Accel Profile Enabled Default (367):   1, 0
       libinput Left Handed Enabled (368):     0
       libinput Left Handed Enabled Default (369):     0
       libinput Send Events Modes Available (337):     1, 0
       libinput Send Events Mode Enabled (338):        0, 0
       libinput Send Events Mode Enabled Default (339):        0, 0
       Device Node (340):      “/dev/input/event20”
       Device Product ID (341):        1578, 16641
       libinput Drag Lock Buttons (370):       <no items>
       libinput Horizontal Scroll Enabled (371):       1
       libinput Scrolling Pixel Distance (372):        15
       libinput Scrolling Pixel Distance Default (373):        15
       libinput High Resolution Wheel Scroll Enabled (374):    1

La propiedad de interés es Middle Emulation Enabled, que tiene el valor 0. Para emular el botón del medio, cambio el valor a 1 con:

$ xinput set-prop ‘pointer:MOSART Semi. 2.4G Keyboard Mouse’ ‘libinput Middle Emulation Enabled’ 1

Ahora el tema es hacer que esto se ejecute automáticamente cada vez que inicio el sistema. En esta computadora estoy usando KDE Neon con KDE, así que me metí en las configuraciones del sistema, System > Autostart, y agregué una entrada manual. En “Program” o “Programa” ingresé xinput y en “Arguments” set-prop 'pointer:MOSART Semi. 2.4G Keyboard Mouse' 'libinput Middle Emulation Enabled' 1. Esto agrega un archivo .desktop a ~/.config/autostart y si el mouse está conectado al iniciar el sistema, todo va bien. Si conecto el mouse más tarde, puedo ejecutar el comando a mano desde ese mismo menú.

Y así quedó funcionando la emulación de botón del medio con los dos botones del mouse.

No hay comentarios en este post

Feed de comentarios

Dejar un comentario

Notificarme los nuevos comentarios por correo electrónico. Tambien puedes suscribirte sin comentar.

Toasty!