Si contamos la rueda como tres botones (rodar arriba, rodar abajo y presionar la rueda) podemos decir que el ratón Logitech MX500 dispone de un total de 10 botones. En este artículo voy a explicar como hacer que los 10 botones sean reconocidos y como asignarles funciones para sacar el máximo provecho del ratón. Gran parte de lo que se comenta es también aplicable a otros ratones USB como el MX510, el MX518, el MX700 o incluso otros ratones USB actuales con varios botones, no necesariamente de la marca Logitech.
Configuración de Xorg
El ratón se configura en la sección Section "InputDevice" del archivo /etc/X11/xorg.conf. Una breve descripción de las opciones se suelen usar en dicha sección:
- Identifier es el identificador del dispositivo. Este identificado es el que usaremos para referirnos a nuestro ratón en el archivo de configuración de Xorg. Tener distintos identificadores permite tener distintos ratones configurados.
- Driver "mouse" indica que el dispositivo que hemos definido es un ratón.
- Option "Device" debe de apuntar a la ruta del dispositivo del ratón en nuestro sistema. Normalmente /dev/input/mice para ratones USB y /dev/psaux para ratones PS2.
- Option "Buttons" indica al servidor X cuántos botones tiene el ratón.
- Option "Protocol" indica el protocolo de comunicación que usa el ratón. Esta es la opción clave que nos va a permitir usar los 10 (o más) botones de nuestro ratón.
- Option "ZAxisMapping" sirve para indicar que botones forman el eje Z que es con el que se identifica la rueda del ratón. El movimiento del ratón se identifica con los ejes X e Y.
- Option "Emulate3Buttons" sirve para hacer que la pulsación simultánea de los dos botones principales se comporte como si fuese una pulsación del botón central. Como todos los ratones actuales tienen botón central lo normal es tener esta opción desactivada.
Una configuración típica para un ratón genérico de tres botones sería la siguiente:
# **********************************************************************
# Input device - Raton Generico
# **********************************************************************
Section "InputDevice"
Identifier "Raton Generico"
Driver "mouse"
Option "Device" "/dev/input/mice"
Option "Protocol" "IMPS/2"
Option "ZAxisMapping" "4 5"
Option "Emulate3Buttons" "0"
EndSectionPor desgracia así es como la mayoría de gente tiene configurado su ratón. Esta configuración se nos queda corta ya que el protocolo IMPS/2 soporta un máximo de 5 botones, por lo que tendríamos más de la mitad de nuestro ratón desaprovechado.
Una alternativa sería usar la siguiente configuración con el protocolo ExplorerPS/2 que soporta hasta 7 botones:
# **********************************************************************
# Input device - Raton Logitech MX500
# **********************************************************************
Section "InputDevice"
Identifier "Logitech MX500"
Driver "mouse"
Option "Device" "/dev/input/mice"
Option "Protocol" "ExplorerPS/2"
Option "Buttons" "7"
Option "ZAxisMapping" "6 7"
Option "Emulate3Buttons" "0"
EndSectionEsta alternativa se nos sigue quedando corta para poder usar los 10 botones.
Por suerte, desde hace bastantes versiones, x11-base/xorg-x11 incluye soporte del protocolo evdev, el cual soporta 8 o más botones sin problemas. Para configurar el ratón con dicho protocolo usar la siguiente configuración:
# **********************************************************************
# Input device - Raton Logitech MX500 con soporte evdev
# **********************************************************************
Section "InputDevice"
Identifier "Logitech MX500 evdev"
Driver "mouse"
Option "Device" "/dev/input/event1"
Option "Dev Name" "B16_b_02 USB-PS/2 Optical Mouse"
Option "Protocol" "evdev"
Option "Buttons" "10"
Option "ZAxisMapping" "9 10"
Option "Emulate3Buttons" "0"
EndSectionLa opción Option "Device" indica el dispositivo evdev que representa a nuestro ratón. Normalmente /dev/input/event1 es el ratón y /dev/input/event0 es el teclado.
El valor de la opción Option "Dev Name" lo obtenemos de la salida del comando
En realidad con solo usar una de las opciones es suficiente, ya que primero se utiliza Option "Dev Name" y si no se encuentra ningún dispositivo con dicho nombre se utiliza el dispositivo indicado por Option "Device".
Configuración del Kernel
Además de las opciones típicas de ratones USB, hay que activar las siguientes opciones en el Kernel para dar soporte al protocolo evdev:
Device Drivers --->
Input device support --->
<M> Event interfaceRecompilar el kernel y cargar el modulo
Si no tenemos instalado udev, para que el módulo se cargue automáticamente al iniciar hay que añadirlo al fichero /etc/modules.autoload.d/kernel-2.6.
Activando los botones extra del ratón
Por defecto, 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 existiesen. Además el botón 'cambio de tarea', también conocido como 'task switch' también está desactivado. Gracias al uso del protocolo evdev ya tenemos activado el botón 'task switch' pero para anular el comportamiento de los botones que están encima y debajo de la rueda del ratón tendremos que usar un programa externo.
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.
Para instalarlo:
Para anular el comportamiento anteriormente comentado ejecutar
y para volver a activarlo
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
y para desactivarlos y volver a 400dpi
Si queremos que estos comandos se ejecuten automáticamente al iniciar, podemos añadirlos en /etc/conf.d/local.start o mejor aun, crear una regla UDEV que lo ejecute automáticamente. Para crear la regla deberemos de averiguar el identificador de producto USB o idProduct de nuestro modelo de ratón. El identificador de fabricante o idVendor no es necesario averiguarlo ya que el de todos los Logitech es 046d. Para averiguar el idProduct podemos hacerlo desde cualquier utilidad que de 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 ejecutando
En mi caso, el idProduct de mi MX500 es c025. Para crear la regla UDEV que ejecute los comandos, he creado el archivo /etc/udev/rules.d/10-logitech-mice.rules con el siguiente contenido
BUS="usb", SYSFS{idVendor}="046d", SYSFS{idProduct}="c025", PROGRAM="/usr/sbin/logitech_applet -d"Usando los nuevos botones extra del ratón
Para asignar funciones útiles a los botones podemos usar los programas Imwheel y Xbindkeys. 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. Imwheel sirve para emular pulsaciones de teclado con pulsaciones de ratón.
Para instalar 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:
#Ejecutar xterm al pulsar control mas el botón 2 del ratón "xterm" control + b:2 #Ejecutar xcalc al pulsar el boton 8 del ratón "xcalc" b:8
Para instalar Imwheel
La configuración de imwheel se guarda en el fichero ~/.imwheelrc y se basa en reglas para detectar el programa en el que estamos trabajando según sea el título de la ventana activa de X. Para cada programa indicaremos las acciones (combinación de teclas) a ejecutar cuando se pulse cierto botón. Para averiguar los nombres que da Imwheel a nuestros botones y así poder usarlos en el archivo de configuración podemos usar una utilidad que incluye imwheel, la cual se invoca con el comando
En /etc/X11/imwheel/imwheelrc existe un fichero con muchas configuraciones ya hechas que podemos copiar a nuestro home para que sirva de base. Muchas de configuraciones están anticuadas o no funcionan por lo que lo mejor es que nos creemos nuestro propio fichero desde cero.
La sintaxis de cada regla de este fichero es la siguiente:
- La primera linea sirve para indicar el nombre de la aplicación. Cada argumento se separa por comas. Tras indicar el título tenemos que indicar las siguientes opciones, en este orden obligatoriamente:
- Key Modifiers Input: Las teclas que van a activar la acción.
- Mouse Action Input: La acción del ratón que va a activar la acción [Up, Down, Left, Right, Thumb ]
- Key Action Output: La acción (teclas).
- Opcionalmente podemos indicar también estos argumentos, pero para usar uno, debemos de poner también todos los anteriores (lo siento, está sin traducir ;-) ):
- Output Repetitions: How many times should the Output KeySyms be pressed in a row.Default is 1.
- Delay Before KeyUp Event: How long in microseconds until we release all the Output KeySyms in one Output Repetition.Default is 0.
- Delay Before Next KeyPress Event:How long in microseconds until we press the next the Output KeySyms. This delay occurs after the Output KeySyms are released. Default is 0.
En caso de que queramos indicar una acción que sea una combinación de dos teclas que se aprietan a la vez, se usa el carácter |. Por ejemplo, una regla para navegar atrás (Alt+Flecha izquierda) y adelante (Alt+Flecha derecha) en Mozilla Firefox podría ser:
"^Mozilla.*"
None, Up, Alt_L|Left
None, Down, Alt_L|Righ
# Esta opcion siempre deberia de ser la ultima ya que
# imwheel para de buscar cuando una regla coincide
".*"
None, Up, none
None, Down, noneA modo de ejemplo, este es mi archivo ~/.imwheelrc. Previamente en KDE he asignado las combinaciones de teclas que me interesa usar con Imwheel. Para asignar una acción a una combinación de teclas en KDE ir a Centro de control de KDE -> Regional y accesibilidad -> Accesos rápidos de teclado :
#Opciones predeterminadas para todas las ventanas
".*"
# Combinacion de teclas
#Evento IMWHEEL que sera simulada Accion asociada en mi KDE
#-------------- --------------------- -------------------------
None, Down, Alt_L|F4 # Cerrar aplicacion
None, Up, Alt_L|F1 # Siguiente entrada de la barra de tareas
Alt_L, Up, Alt_L|F2 # Anterior entrada de la barra de tareas
Control_L, Up, Alt_L|F2 # Anterior entrada de la barra de tareas
Super_L, Up, Alt_L|F2 # Anterior entrada de la barra de tareasHacer que los programas instalados se ejecuten automáticamente
Para que los programas mencionados anteriormente funcionen es necesario que se ejecuten al iniciar el servidor X. Podemos hacer que se ejecuten automáticamente si los incluimos en el script de inicio del servidor X o del gestor de ventanas que usemos. En KDE se encuentra en ~/kde/Autostart, para otros gestores de ventanas consultar el Wiki.
Las líneas que debemos añadir a nuestro script de inicio son las siguientes:
xbindkeys imwheel -k -b "67"
Lo normal es que las aplicaciones esperen que los dos últimos botones se encarguen del scroll. En ratones con solo 5 botones, los encargados de esta función serían los botones 4 y 5, pero en ratones con mas botones no. Por eso, además de las dos líneas anteriores, también hay que añadir al arranque una llamada al comando xmodmap. En concreto, para que no falle el scroll de los programas vamos a añadir una llamada para intercambiar los botones 4 y 5 con los botones 6 y 7 respectivamente. Usamos los botones 4 y 5 porque son los que esperan las aplicaciones y el 6 y 7 porque son los que hemos indicado a imwheel con en el parámetro -b. He probado a pasar a Imwhell otros botones distintos al 6 y 7 pero ninguna combinación a parte de esta parece funcionar.
Para una configuración con el protocolo ExplorerPS/2 que hemos mencionado antes, el comando que habría que añadir al script de inicio de nuestro gestor de ventanas es:
En cambio para la configuración de evdev con 10 botones que estamos usando en nuestro caso sería:
Una vez añadidas todas estas lineas al script de inicio del gestor de ventanas ya tenemos nuestro ratón con 10 botones configurado a nuestro gusto :).
Espero que esta gran parrafada sea de utilidad para alguien.
