95 - Exprimir teclado, ratón y touchpad en Linux

95 - Exprimir teclado, ratón y touchpad en Linux

xinput es una herramienta que te permite afinar la respuesta de los controladores de teclado, ratón y touchpad en Linux. Y xinput-gui su versión gráfica.

1:25
-3:15

Sin lugar a dudas uno de los problemas que puedes tener como usuario de una distribución Linux son los drivers o controladores. Si, es cierto que la mayoría de los dispositivos funcionan, por no decirte todos o casi todos. Sin embargo, no todos esos dispositivos funcionan todo lo bien que debería o no les puedes sacar todo el provecho y la funcionalidad que tienen. Esa manía que tienen los fabricantes por no liberar sus controladores.

Probablemente por miedo a que la competencia los copie. Sin embargo, al que están perjudicando no es a su competencia, que seguro que ya le han copiado utilizando para ello ingeniería inversa, si lo hubieran necesitado, que probablemente no. Al que realmente perjudican es al usuario de a pie, a ti y a mi. Pero también se perjudica el propio fabricante. Y es que la forma de crecer no es ir ocultando información. Hay que crecer a lo grande, con la información por delante, sin miedo a que te copien tus controladores, con investigación e innovación. Si te copian es que lo estás haciendo bien. Dicho todo esto, que solución tienes para configurar tus dispositivos si no tienes controlador. ¿Como configurar tu touchpad, tu ratón o tu teclado? xinput

Es cierto que algunos entornos de escritorio con Plasma o GNOME, tienen herramientas para configurar estos dispositivos. Pero sinceramente, no todas las opciones funcionan, ni funcionan para todos los dispositivos. Y como te decía anteriormente esto se debe a los malditos controladores. Esta es precisamente una de las razones de que en su día implementara Touchpad Indicator, al cual, le dediqué el episodio 48 sobre gestionar el touchpad, y que precisamente, todavía sigue utilizando xinput para parte de su funcionamiento, a la espera de una solución mejor.

Así en este nuevo episodio del podcast te voy a hablar sobre xinput. Como puedes utilizarlo para modificar determinados parámetros del funcionamiento del touchpad, del ratón o del teclado. Y por último, una herramienta gráfica que te permitirá hacerlo sin tener que recurrir al terminal.

Exprimir ratón, teclado y touchpad en Linux

Exprimir teclado, ratón y touchpad en Linux

¿Que es xinput?

Como te decía en la introducción, el objetivo del podcast de hoy, es hablarte sobre xinput. Sin embargo, antes de adentrarme en xinput, explicarte que es esta herramienta.

xinput es una utilidad o herramienta que te permite listar todos los dispositivos de entrada, obtener información de ellos y cambiar su configuración. Por dispositivo de entrada se entiende un teclado, ratón, touchpad, tableta gráfica, etc.

Se trata de una herramienta cuya primera versión es del año 1996, es decir, hace ya mas de 20 años.

¿Que puedes hacer con xinput?

Lo primero es listar todos los dispositivos de entrada. Así, si ejecutas xinput en un terminal, verás todos los chismes de entrada que tienes conectados en tu ordenador. Un listado como el que puedes ver a continuación,

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Corsair Corsair Gaming K70 LUX RGB Keyboard  Consumer Control id=12   [slave  pointer  (2)]
⎜   ↳ Logitech M310                             id=13   [slave  pointer  (2)]
⎜   ↳ Logitech K520                             id=14   [slave  pointer  (2)]
⎜   ↳ DLL0665:01 06CB:76AD Touchpad             id=16   [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)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ Corsair Corsair Gaming K70 LUX RGB Keyboard   id=10   [slave  keyboard (3)]
    ↳ Corsair Corsair Gaming K70 LUX RGB Keyboard  Keyboard id=11   [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD: Integrate           id=15   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=17   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=18   [slave  keyboard (3)]
    ↳ Corsair Corsair Gaming K70 LUX RGB Keyboard  Consumer Control id=19   [slave  keyboard (3)]
    ↳ Logitech K520                             id=20   [slave  keyboard (3)]

Listar las propiedades de cada dispositivo

Pero lo mas interesante viene con la opción --list-props que te permite listar todas las propiedades de cada uno de los dispositivos. Esta es una de las herramientas que estoy utilizando para gestionar el touchpad en la aplicación touchpad indicator.

El funcionamiento para listar las propiedades es tan sencillo como ejecutar xinput --list-props ID.

Aquí obtendrás un listado de todas las propiedades de tu dispositivo de entrada, ya sea un ratón, un teclado o el mismo touchpad.

Por ejemplo, en el caso de mi touchpad, el listado que sale al ejecutar la instrucción anterior es el que ves a continuación,

Device 'DLL0665:01 06CB:76AD Touchpad':
    Device Enabled (155):   1
    Coordinate Transformation Matrix (157): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Tapping Enabled (310): 1
    libinput Tapping Enabled Default (311): 0
    libinput Tapping Drag Enabled (312):    1
    libinput Tapping Drag Enabled Default (313):    1
    libinput Tapping Drag Lock Enabled (314):   0
    libinput Tapping Drag Lock Enabled Default (315):   0
    libinput Tapping Button Mapping Enabled (316):  1, 0
    libinput Tapping Button Mapping Default (317):  1, 0
    libinput Natural Scrolling Enabled (292):   1
    libinput Natural Scrolling Enabled Default (293):   0
    libinput Disable While Typing Enabled (318):    1
    libinput Disable While Typing Enabled Default (319):    1
    libinput Scroll Methods Available (296):    1, 1, 0
    libinput Scroll Method Enabled (297):   1, 0, 0
    libinput Scroll Method Enabled Default (298):   1, 0, 0
    libinput Click Methods Available (320): 1, 1
    libinput Click Method Enabled (321):    1, 0
    libinput Click Method Enabled Default (322):    1, 0
    libinput Middle Emulation Enabled (301):    0
    libinput Middle Emulation Enabled Default (302):    0
    libinput Accel Speed (303): 0.000000
    libinput Accel Speed Default (304): 0.000000
    libinput Left Handed Enabled (308): 0
    libinput Left Handed Enabled Default (309): 0
    libinput Send Events Modes Available (277): 1, 1
    libinput Send Events Mode Enabled (278):    0, 0
    libinput Send Events Mode Enabled Default (279):    0, 0
    Device Node (280):  "/dev/input/event15"
    Device Product ID (281):    1739, 30381
    libinput Drag Lock Buttons (294):   <no items>
    libinput Horizontal Scroll Enabled (295):   1

Modificar las propiedades

La otra gran posibilidad que te ofrece xinput es la de modificar las propiedades, y precisamente esta característica, es la otra que utilizo en la aplicación touchpad indicator. ¿Como modificar una propiedad? Esto es tan sencillo como ejecutar la siguiente instrucción,

xinput --set-prop <device> <property> <value>

En property puedes o bien utilizar el nombre de la propiedad en cuestión, o bien, su número identificador. Ese número que identifica la propiedad es el que aparece entre paréntesis en el listado anterior.

En mi caso particular, prefiero utilizar el número identificador porque me aseguro de no equivocarme, y utilizando una expresión regular es realmente sencillo extraerlo.

Una pequeña decepción. No todas las propiedades son accesibles.

Sin embargo, no todo son buenas noticias. Si te fijas atentamente en el listado, verás que de acuerdo al mismo, es posible deshabilidar el touchpad mientras escribes.

Esto es realmente posible en algunos touchpads, pero no en todos. Y da la casualidad que en mi touchpad esto no funciona. Puedo hacer lo que quiera, habilitarlo o deshabilitarlo. Sin embargo, mientras escribo decepcionantemente puedo seguir moviendo el touchpad con la otra mano. Una verdadera lástima, porque esto es un incordio a la hora de escribir un artículo o preparar un el guión de un nuevo episodio del podcast.

Por esta razón precisamente la opción de deshabilitar el touchpad mientras escribes con Touchpad Indicator la realizo por software y no utilizando los controladores del touchpad.

Con esto te quiero decir que, es posible que algunas de las propiedades listadas no te funcionen.

Sin embargo, lo que está claro es que tienes bastantes mas opciones de las que te ofrece tu entorno de escritorio, con independencia del que sea.

Otra decepción. Los cambios no son permanentes.

Si, has leído bien el título de este apartado. Los cambios no son permanentes. Esto quiere decir, que cada vez que inicies tu sistema tienes que volver a modificar todos estos parámetros para dejarlos a tu gusto.

Si es así.

Un script para tus preferencias

Sin embargo, si estás siguiendo el tutorial sobre scripts en Bash, siempre es posible crear tu propio script para que cada vez que se inicie tu equipo se establezcan estos parámetros.

Al final es tan sencillo como lo que ves a continuación,

#!/bin/bash
xinput 16 310 1
xinput 16 292 1
xinput 16 301 1

Y así sucesivamente con todas las propiedades que quieras establecer. Lo que queda es poner este script en algún sitio para que se ejecute cuando inicies tu equipo.

Para esto tienes que utilizar cron. Si no has oido hablar de cron o no sabes como hacer para que cada vez que se inicie tu equipo se ejecute un script, te recomiendo que leas el artículo que escribí referente a la programación de tareas con cron

En particular tiene una opción @reboot para hacer precisamente esto. De esta manera, si tu script lo has llamado preferencias.sh, solo tienes que añadir la siguiente línea,

@reboot /bin/bash /home/lorenzo/scripts/preferencias.sh

Otra opción sería crear un timer con Systemd, tal y como explico en el tutorial trabajando con Systemd, en particular en el capítulo sobre reemplazar cron con Systemd Timer.

Con interfaz gráfico

Si no te aclaras mucho con el terminal, o simplemente quieres utilizar un interfaz gráfico para estas opciones tienes una excelente herramienta. Se trata de una simple interfaz para xinput, xinput-gui, con el que afinar estos controladores.

Se trata de una herramienta implementada con Python y Gtk+, que te permite hacer, todo lo que he comentado aquí, pero sin tocar el terminal. De esta forma puedes editar todas las propiedades de los dispositivos de entrada como el teclado, ratón, touchpad, etc, tal y como has hecho anteriormente.

De hecho, si ejecutas xinput-gui desde el terminal, verás que cada vez que cambias una propiedad esto se refleja en el propio terminal. Es decir, en el terminal ves las propiedades que asignas a los controladores.

Instalación

Esta herramienta no se encuentra en los repositorios oficiales de Ubuntu, pero la puedes instlar fácilmente utilizando el gestor de paquetes de Python. Para esto, solo tienes que ejecutar la siguiente instrucción en un terminal,

pip3 install --user xinput-gui

El problema es que no está disponible ningún lanzador, con lo que inicialmente lo tendrás que ejecutar directamente desde el terminal. Otra opción es que te crees tu propio lanzador.

Esto es tan sencillo como crear el archivo ~/.local/share/applications/xinput-gui.desktop con el siguiente contenido,

Desktop Entry]
Version=1.0
Name=xinput-gui
Comment=Graphical Interface for xinput
TryExec=xinput-gui
Exec=xinput-gui
Icon=xinput
Terminal=false
Type=Application
Categories=GNOME

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *