Configurar el ratón y todos sus botones en Linux

Debido a los cambios introducidos en las últimas versiones de Xorg y en el driver evdev, he decidido que en vez de actualizar mi guía de configuración del ratón MX500 voy a crear una entrada nueva. Así no solo me ahorro trabajo, sino que hago una guía mas genérica (no solo para el MX500) y de paso todo aquel que siga usando Xorg <6.9 sigue teniendo la información disponible.

Objetivos

Conseguir que todos los botones del ratón sean reconocidos en Linux y además poder asignarles, bien la ejecución de un comando, bien la pulsación de una o varias teclas. La guía está pensada para ser válida para todas las distribuciones y configuraciones que cumplan los requisitos, pero si usas Gentoo te resultará más fácil cumplir los requisitos y más sencilla de seguir.

Está fuera del alcance de esta guía explicar como instalar programas en otras distribuciones que no sean Gentoo, así es que las llamadas al comando emerge que figuran en el texto deben ser sustituidas por los respectivos métodos de instalación de otras distribuciones.

Requisitos

  • Xorg 6.9 o posterior. (Guía de migración a Xorg 7.0 para Gentoo).
  • udev. (Viene 'de serie' en Gentoo y en muchas distribuciones actuales).
  • Kernel 2.6 (para tener soporte evdev).
  • Un ratón compatible con el protocolo evdev. La mayoría de ratones USB actuales lo son. Por ejemplo los populares Logitech® MX1000, G7, MX610, MX518, MX500, MX310 ... aunque no todos los soportados son necesariamente de la marca Logitech. (Si tienes un ratón que no está en la lista y soporta evdev comunícamelo y lo agrego).

Introducción

Para poder sacar el máximo provecho del ratón es necesario no solo que todos los botones sean reconocidos sino también poder asignarles funciones. Lo que nos va a permitir conseguir esto es la combinación de varios programas y configuraciones.

La parte esencial es el reconocimiento de los botones. Esto nos lo brinda el protocolo evdev (solo disponible en kernels 2.6), que se encarga de permitir de forma sencilla el acceso a dispositivos USB, no solo ratones sino también joysticks, cámaras, teclados ... El resto de funcionalidades nos las brinda una combinacion de configuración determinada de Xorg junto a los programas xbindkeysg y xvkbdg.

Activar el soporte evdev

Evdev es el encargado de crear los dispositivos /dev/input/event*. Si esos dispositivos existen en tu sistema es que ya tienes evdev funcionando, puedes pasar al paso siguiente. Si no existen, una de dos, o no tienes soporte evdev o no has cargado el módulo del kernel correspondiente y por tanto lo tienes desactivado.

En el primer caso es necesario configurar el kernel con la siguiente opción (además de las opciones típicas de ratones USB) y recompilarlo:

Device Drivers --->
    Input device support --->
        <M> Event interface

En el segundo caso solo hay que cargar el modulo

# modprobe -v evdev

Normalmente UDEV, se encarga de cargar este módulo automáticamente al iniciar, pero si no es tu caso, para que el módulo se cargue al iniciar puedes añadirlo al fichero /etc/modules.autoload.d/kernel-2.6 (para otras distribuciones distintas de Gentoo consultar la respectiva documentación a cerca de los módulos).

Dar un nombre personalizado al dispositivo del ratón

Como /dev/input/eventX no es un nombre representativo y además, dependiendo de los dispositivos que tengamos conectados al sistema, el número que aparece al final puede variar, vamos a darle un nombre personalizado al dispositivo que representa a nuestro ratón. De esta forma es más fácil de recordar y no tenemos que preocuparnos de cambiar los archivos de configuración en caso de que cambie la numeración de los dispositivos.

Para ello vamos a crear una regla de UDEV. Para escribir la regla e identificar de forma inequívoca a nuestro ratón es necesario averiguar su identificador de producto USB o idProduct y su identificador de fabricante o idVendor. Estos datos podemos sacarlos de cualquier utilidad que proporcione información sobre los dispositivos conectados al bus USB, como puede ser el centro de información de KDE, el comando lsusb (perteneciente al paquete usbutils) o simplemente consultando el contenido de /proc/bus/usb/devices.

Por ejemplo, en mi caso con el comando lsusb se puede leer

# lsusb
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 002: ID 046d:c025 Logitech, Inc. MX500 Optical Mouse
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000

Los datos que nos interesan son los que están resaltados. En mi caso, el idProduct de mi MX500 es c025 y idVendor es 046d.

Para crear la regla UDEV crear el archivo /etc/udev/rules.d/10-mouse.rules con el siguiente contenido

KERNEL=="event*", SYSFS{idVendor}="046d", SYSFS{idProduct}="c025", NAME=="input/mx500",  MODE=="0644"

La parte interesante de la regla es NAME=="input/mx500" que es con la que indicamos el nombre personalizado del dispositivo que representa a nuestro ratón. Por razones obvias yo he escogido mx500, cada cual que escoja un nombre representativo de su ratón.

Hay otras formas de escribir esta misma regla, por ejemplo usando ... SYSFS{manufacturer}=="Logitech", SYSFS{product}=="Logitech, Inc. MX500 Optical Mouse" .... Si quieres saber más sobre las reglas UDEV, recomiendo la lectura de Writing udev rules de Daniel Drake.

Como a los linuxeros no nos gusta reiniciar para que los cambios tengan efecto, basta con ejecutar

# udevstart

y a partir de ahora ya deberías de ver el dispositivo /dev/input/mx500 que de ahora en adelante usaremos para referirnos al ratón (olvídate del vetusto /dev/input/{mouse,mice}).

Activar los botones extra de los Logitech

[Si no tienes un ratón Logitech, puedes saltarte esta parte y pasar directamente a la siguiente sección].

En muchos modelos de la marca Logitech, los botones que están encima y debajo de la rueda del ratón se comportan igual que ésta, es decir, es como si no existiese. Por suerte este comportamiento se puede anular.

Existen dos programas, Logitech Mouse Applet y LMCtl. Ambos programas están disponibles en Portage y sirven no solo para activar estos botones sino también para modificar algunos parámetros de nuestro ratón. Solo voy a explicar el uso de Logitech Applet puesto que al ser el que apareció antes es el que siempre he usado y el que mejor conozco. Las personas con ratones inalámbricos seguramente encuentren más interesante LMCtl ya que permite obtener datos como el estado de la batería.

Para instalarlo en Gentoo (está fuera del alcance de esta guía explicar como instalar programas en otras distribuciones):

# emerge logitech-applet

Para anular el comportamiento anteriormente comentado ejecutar

# logitech_applet -d

y para volver a activarlo

# logitech_applet -e

Este programa también sirve para activar el segundo sensor de los Logitech y hacer que funcione a 800dpi en vez de a 400dpi. Para activar los 800dpi

# logitech_applet -s 800

y para desactivarlos y volver a 400dpi

# logitech_applet -s 400

Si queremos que estos comandos se ejecuten automáticamente al iniciar, podemos añadir una regla UDEV nueva en el archivo /etc/udev/rules.d/10-mouse.rules que hemos creado antes:

BUS=="usb", ATTRS{idVendor}=="046d", SYSFS{idProduct}=="c025", PROGRAM="/usr/sbin/logitech_applet -d"

Configuración de Xorg

Esta es una de las partes que más han mejorado con el nuevo Xorg. Ahora todo es automático, no hace falta indicar parámetros. Con esta configuración tan sencilla es suficiente para que todos los botones sean reconocidos y para que el scroll sea asignado a la rueda del ratón sin usar ZAxisMapping.

# **********************************************************************
# ServerLayout section
# **********************************************************************
Section "ServerLayout"
	...
	InputDevice	"Logitech MX500" "CorePointer"
	...
EndSection

# **********************************************************************
# Input device - Ratón Logitech MX500 con soporte evdev en Xorg 7.0
# **********************************************************************
Section "InputDevice"
	Identifier	"Logitech MX500"
	Driver		"evdev"
	Option		 "/dev/input/mx500"
EndSection

Obviamente solo hay que cambiar el valor de "Device" por el mismo nombre personalizado que se eligiese al crear la regla UDEV.

Comprobar el orden de asignación de los botones

Si todo ha ido bien, todos los botones del ratón debería de generar eventos. Para comprobarlo y de paso saber el número que se la asignado a cada botón (necesario posteriormente para asignarles funciones), hay que instalar el programa xev

# emerge xev

Ejecutando xev y presionando los distintos botones encima de la ventana que aparece, podremos ver el número que se ha asignado a cada botón. En mi caso esta es la numeración de los botones
mx500

Asignar programas o comandos a los botones

Xbindkeys sirve para asignar la ejecución de un comando a la pulsación de un botón del ratón o una tecla del teclado. Para instalar xbindkeys:

# emerge xbindkeys

La configuración de xbindkeys se guarda en el fichero ~/.xbindkeysrc, formado por una o varias acciones. Cada acción consta de dos lineas, la primera indica el comando a ejecutar (escrito entre comillas) y la segunda indica a qué evento va asociado. Por ejemplo, el siguiente archivo tiene dos acciones. La primera ejecuta xterm al pulsar "CONTROL+botón 2" del ratón y la segunda ejecuta xcalc al pulsar el botón 8 del ratón:

"xterm"
control + b:2

"xcalc"
b:8

En caso de invocar comandos o programas bloqueantes es muy importante añadir el signo & al final de la primera línea de cada acción.

Xbindkeys funciona en modo demonio así es que habrá que ejecutarlo cada vez que se inicie el entorno de ventanas. Dependiendo del entorno de ventanas o escritorio que uses esto se hará de una forma u otra. En KDE podemos hacer que se ejecuten automáticamente si lo incluimos en ~./kde/Autostart, para otros gestores de ventanas está explicado en el Wiki de Gentoo.

Asignar combinaciones de teclas a los botones

Para conseguir la asignación de combinaciones de teclas a los botones del ratón hay que instalar el programa xvkbd:

# emerge xvkbd

Este programa permite emular la pulsación de teclas desde la línea de comandos y como Xbindkeys permite asignar comandos a los botones, si los combinamos tenemos el resultado que buscamos. Solo tendremos que crear acciones en ~/.xbindkeysrc de forma similar a lo que se ha visto en el apartado anterior cuyo comando sea una invocación a xvkbd. Por ejemplo, para que el botón 9 del ratón sea equivalente a pulsar "ALT+F4" y el botón 8 del ratón sea equivalente a pulsar "ALT+TABULADOR" usaríamos las siguientes acciones:

"xvkbd -text "\[Alt_L]\[F4]""
b:9

"xvkbd -text "\[Alt_L]\[Tab]""
b:8

Se acepta cualquier corrección, comentario, crítica o mejora de esta guía. Espero que os sea útil :).

Nuevo programa para controlar ratones Logitech

Por lo visto, LMCtl ha pasado a "mejor vida" pues ahora se lleva lomoco (Logitech Mouse Control)

Gracias a portage lo instalaremos sin problemas con un emerge lomoco.

Para detectar el dispositivo lomoco -i

El comando que permiten deshabilitar las flechas superior e inferior de la rueda del ratón es lomoco --no-sms

Espero que sea de utilidad.