# [HOW-TO] Guía para configurar el ratón y TODOS sus botones

## Stolz

-- La siguiente guía está publicada bajo licencia  Creative Commons 2.5 --

Actualizaciones:

28 de Noviembre de 2005: Cambiado nombre del archio de la regla UDEV. Versión 1.02 

2 de Noviembre de 2005: Corregidos errores tipográficos (envent->event). Versión 1.01

1 de Noviembre de 2005: Publicada la guía. Versión 1.0

Introducción

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 esta guía 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 como el MX510, el MX518, el MX700 o incluso otros ratones 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"

EndSection
```

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

EndSection
```

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

EndSection
```

La 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 

```
# cat /proc/bus/input/devices
```

Configuración del Kernel

Aparte 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 interface
```

Recompilar el kernel y cargar el modulo

```
# modprobe -v evdev
```

    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:

```
# 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ñ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 

```
# grep 046d /proc/bus/usb/devices
```

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:

```
# 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:

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

```
# emerge 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

```
# imwheel -c
```

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  :Wink:  ):

 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 | (la barra vertical). 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, none
```

A 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 tareas
```

Hacer 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:

```
xmodmap -e "pointer = 1 2 3 6 7 4 5"
```

En cambio para la configuración de evdev con 10 botones que estamos usando en nuestro caso sería:

```
xmodmap -e "pointer = 1 2 3 6 7 8 9 10 4 5"
```

Una vez añadidas todas estas líneas al script de inicio del gestor de ventanas ya tenemos nuestro ratón con 10 botones configurado a nuestro gusto  :Smile: .

Espero que os sea útil. Se agradecerá cualqueir tipo de comentario/mejora/crítica.

SaludozzzzzzLast edited by Stolz on Mon Nov 28, 2005 7:16 pm; edited 5 times in total

----------

## DDrDark

Se agradece una guía así!, gracias de nuevo por currartela.

En cuanto tenga tiempo la probaré que quiero configurar los botones de mi raton (izquierdo y derecho) para ir pa'tras o pa'lante en el navegador  :Very Happy: 

----------

## German3D

Ese stolz  :Razz:  Buena guia si señor , ademas que tengo justo ese raton el MX500 conectado a un KVM por PS2.

Asi me queda mi xorg.conf 

```
Section "InputDevice"

        Identifier "Mouse0"

        Driver     "mouse"

        Option     "Device" "/dev/input/envent1"

        Option     "Dev Name" "PS2++ Logitech MX Mouse"

        Option     "Protocol" "evdev"

        Option     "Buttons" "10"

        Option     "ZAxisMapping"  "9 10"

        Option     "Emulate3Buttons"    "0"

EndSection

```

El problema es que los botones estan raros , me explico . La rueda no hace el scroll lo hacen los botones que quedan justo en el dedo gordo de la mano derecha . Para ir atras y alante en las webs los botones son los de encima y debajo de la rueda , vamos que no me apaño . Para decir que los botones que se controlan con el pulgar sean los de "atras pagina" y "avance pagina" que debo hacer ? Y por supuesto que la rueda me haga scroll y aprentandola me haga "pam" Pos eso un saludete  :Wink: 

----------

## Stolz

German3D ¿lo tienes conectado por PS2? si es asi no te funcionará, es necesario usar conexion USB para que los botones funcionen como toca. Debería haber aclaroado en la gia que todo es aplicable únicamente a ratones con conexion USB. Si lso conectas por PS2 te cargas todo lo buieno de estos ratones.

Si lo tienes conectado por por USB, entonces tiene pinta de no tener bien mapeados los botones con xmodmap. ¿Añadiste el comando xmodmap -e "pointer = 1 2 3 6 7 8 9 10 4 5" al script de inicio del sistema? Si es así, tal vez tu ratón nuemere los botones de forma distinta. Es cuestion de encontrar que botones hacen el scroll y asignarselos a los botones 4 y 5. Por ejemplo, si en tu ranton los que hacen el scroll son el 9 y el 10, entonces el comando xmodmap necesario para intercambiar los botnes 4/9 y 5/10 seria

```
xmodmap -e "pointer = 1 2 3 9 10 6 7 8 4 5"
```

Ya de paso añado que con conexion PS2 los 800dpi de resolucion tampoco funcionan. 

Saludozzzzzz

----------

## German3D

ouch  :Sad:  Vaya , lo tengo por PS2 si pero por que lo tengo conctado a un KVM y no hay posibilidad ninguna de usarlo por USB .

Aun por PS2 con el xmodmap -e "pointer = 1 2 3 9 10 6 7 8 4 5" no puede funcionar ? 

54|u2

----------

## Stolz

 *German3D wrote:*   

> ouch  Vaya , lo tengo por PS2 si pero por que lo tengo conctado a un KVM y no hay posibilidad ninguna de usarlo por USB .
> 
> Aun por PS2 con el xmodmap -e "pointer = 1 2 3 9 10 6 7 8 4 5" no puede funcionar ? 
> 
> 54|u2

 

Dudo que funcione. Tendrás que usar el protoclo "ExplorerPS/2" y cruzar los dedos,proque es posible que tampoco funcione.

Saludozzzzzz

----------

## LinuxBlues

Gracias Stolz, pero tiene un pequeño defecto tipográfico:

en la sección de xorg.conf cambia todas las apariciones de envent por event

Son "eventos" no "enventos".    :Wink: 

----------

## Stolz

 *LinuxBlues wrote:*   

> Gracias Stolz, pero tiene un pequeño defecto tipográfico:
> 
> en la sección de xorg.conf cambia todas las apariciones de envent por event
> 
> Son "eventos" no "enventos".   

 

Muchas gracias. Ya está corregido.

En realidad es un fallo que no afectaba al funcionamiento, puesto que si has usado la opción  Option     "Dev Name" con los datos que da el comando 

```
# cat /proc/bus/input/devices
```

 es suficiente. La  opción  Option     "Device" (la que contenia el fallo) solo se usa en caso de no encontrar ningun dispositivo con el nombre indicado en  Option     "Dev Name", es decir, es una opción 'redundante'.

Se siguen aceptando comentarios, críticas y mejoras.  :Smile: 

Saludozzzzzzz

----------

## t4d3o

Me he perdido del todo  :Sad: 

Tengo un Logitech Cordless Click! Plus, este raton solo es PS/2

Despues de activar el modulo "Event Interface"

Lo cargo con modprobe y tal, instalo logitech_applet, pero este no me arroja datos.

Mi xorg.conf esta asi:

```
Identifier  "Mouse1"

    Driver "mouse"

    #Option "Protocol"   "ImPS/2"

    Option "Device" "/dev/input/event1"

    Option "Dev Name" "ImExPS/2 Logitech Explorer Mouse"

    Option "Protocol"   "evdev"

    Option "ZAxisMapping"   "4 5"

    #Option "Device"     "/dev/psaux"

    Option "Buttons" "10"
```

Lo unico que he notado es que ahora tiene menos sensibilidad, vamos que se mueve mas despacito.

----------

## Stolz

Repito, la guia es para ratones USB. Para ratones PS2 no sirve.

Saludozzzzzz

----------

## German3D

Bueno yo decir que consegui hacer funcionar la rueda con lo que dijo stolz por si vale de algo ... Estoy seguro que para que pase pagina atras y alante con el pulgar se podra pero no me arriesgo a probar combinaciones de numeros xD Ahora pasan con los botones que estan al lado de la rueda ...

un saludo

----------

## DarkMind

se agradece la guia

apenas este listo mi gentoo (toy instalando, toy desde links xD) la pondre en practica a ver que tal me va

gracias por tu tiempo  :Smile: 

----------

## Magnum44

Hola, por fin he puesto a andar el ratón con evdev, pero ahora me da un montón de problemas el imwheel. Alguien podría poner su imwheelrc para ver donde coño lo tengo mal?

Por cierto, ¿habéis conseguido que funcionen los botones del pulgar (yo tengo un Logitech MX700)?

Saaaaaaaaaludos.

[EDITADO]

Por cierto, no se que es lo que ha pasado pero se me han intercambiado los botones de la rueda por el derecho normal... ¿cómo se pone esto bien?

Esta es mi config:

```

$ cat .xinitrc

xmodmap -e "pointer = 1 2 3 6 7 8 9 10 4 5"

imwheel -k -b "67"

lineakd

alsactl restore

```

```
$ cat /etc/X11/imwheel/imwheelrc

# IMWheel Configuration file ($HOME/.imwheelrc or /etc/imwheelrc)

# (GPL)Jon Atkins <jcatki@jonatkins.org>

# Please read the README and/or imwheel(1) manpage for info

# and this is best operated on using vim (as I said: It's crunchy)

#

# This is only for demonstration of the priority command...

# See the other global Exclude command below for the one you want to use!

# If this is activated it will only apps that have a lower priority

# priority is based first on the priority command, then the position in this

# file - the higher the line is in a file the higher in a priority class it is

# thus for a default priority you can see that the position in the file is

# important, but the priority command CAN appear anywahere in a window's list

# of translations, and the priority will be assigned to all translations below

# it until either a new window is defined or the priority is set again.

#

#".*"

#@Priority=-1000 #the default priority is zero, higher numbers take precedence

#@Exclude

#@Repeat

# want it to type something?

# this would type "Rofl" and press Return in any window

#".*"

#,Up,Shift_L|R|-R|-Shift_L|O|-O|F|-F|L|-L|Return

# This one rule can send button events, as if you used ZAxisMapping "4 5"

# Make sure your XF86Config allows for the max buttons needed...

# otherwise the events will NOT even be generated...

#".*"

#, Up, Button4

#, Down, Button5

#, Left, Button6

#, Right, Button7

#, Thumb1, Button6

#, Thumb2, Button7

# alternatively with Button numbers

#".*"

#, Button4, Button4

#, Button5, Button5

#, Button6, Button6

#, Button7, Button7

#, Button6, Button6

#, Button7, Button7

#Thanks to Mathias Weyland <mathias@weyland-wtal.de>

"^mutt.*"

None,           Up,     Up

None,           Down,   Down

Control_L,      Up,     Page_Up

Control_L,      Down,   Page_Down

#Thanks to Mathias Weyland <mathias@weyland-wtal.de>

"^aterm"

None,           Up,     Shift_L|Page_Up

None,           Down,   Shift_L|Page_Down

Control_L,      Up,     Up

Control_L,      Down,   Down

#Thanks to Mathias Weyland <mathias@weyland-wtal.de>

"^Xplns"

None,           Up,     Left

None,           Down,   Right

Control_L,      Up,     Up

Control_L,      Down,   Down

"^kvt"

None,           Up,             Shift_L|Page_Up

None,           Down,   Shift_L|Page_Down

"^Konsole"

None,           Up,             Shift_L|Page_Up

None,           Down,   Shift_L|Page_Down

"^XMcd"

None,           Up,             C

None,           Down,   Shift_L|C

"^XMMS_Player"

Shift_L,                Up,             Right

Shift_L,                Down,   Left

"^XMMS_Playlist"

Shift_L,        Up,             Page_Up

Shift_L,        Down,   Page_Down

"^xmms"

Alt_L,          Up,             Z

Alt_L,          Down,   B

Control_L,      Up,             V

Control_L,      Down,   C

"^XATITV-GATOS"

None,       Down,       KP_Subtract

None,       Up,         KP_Add

"^Xman"

None,           Down,   F

Shift_L,        Down,   3

None,           Up,             B

"^Gvi(m|ew)"

Alt_L,  Up,             Page_Up

Alt_L,  Down,   Page_Down

Shift_L,        Up,             Control_L|Y

Shift_L,        Down,   Control_L|E

#None,          Up,             Page_Up

#None,          Down,   Page_Down

#,      Up,     Button4

#,      Down,   Button5

,       Left,   Shift_L|Left

,       Right,  Shift_L|Right

,       Thumb1, Shift_L|Left

,       Thumb2, Shift_L|Right

"^VIM"

Shift_L,        Up,             Control_L|Y

Shift_L,        Down,   Control_L|E

#None,          Up,             Page_Up

#None,          Down,   Page_Down

"^Eterm"

Alt_L,          Up,             Up

Alt_L,          Down,   Down

#Alt_L,         Up,     Shift_L|Page_Up

#Alt_L,         Down,   Shift_L|Page_Down

#"^GnomeTerminal"

#@Exclude

#@Repeat

#None,          Up,             Shift_L|Page_Up

#None,          Down,   Shift_L|Page_Down

"^NXTerm"

None,           Up,     Shift_L|Page_Up

None,           Down,   Shift_L|Page_Down

"^rxvt"

Alt_L,          Up,             Shift_L|Page_Up

Alt_L,          Down,   Shift_L|Page_Down

"^XTerm"

Alt_L,          Up,             Shift_R|Page_Up

Alt_L,          Down,   Shift_R|Page_Down

Alt_L,          Left,   Control_L|A

Alt_L,          Right,  Control_L|E

#Shift_L,       Down,   Shift_L|1

"^VMware"

@Exclude

#@Repeat

"^Mozilla-bin$"

#,      Up,     Button4

#,      Down,   Button5

#,      Left,   Alt_L|Left

#,      Right,  Alt_L|Right

#

# If you want to scroll by a few lines then uncomment these 4 lines

# and comment out the paging 4 lines below these!

#

Shift_L,        Down,   Page_Down,                      1#,     1000,   1000

Shift_L,        Up,             Page_Up,                        1#,     1000,   1000

#None,          Down,   Down,                           7#,     1000,   1000

#None,          Up,             Up,                                     7#,     1000,   1000

#

# If you don't like page scrolling then comment these out and uncomment above!

#

#Shift_L,       Down,   Down,                           7,

#Shift_L,       Up,             Up,                                     7,

#None,          Down,   Page_Down,                      1,

#None,          Up,             Page_Up,                        1,

# Left/Right & Thumb stuff

None,           Left,   Left,                           7,

None,           Right,  Right,                          7,

None,           Thumb1, Down,                           7,

Shift_L,        Thumb1, Up,                                     7,

None,           Thumb2, Up,                                     7,

Shift_L,        Thumb2, Down,                           7,

"^Freespace.*"

,       Up,             Y

,       Down,   X

,       Thumb1, H

,       Thumb2, R

"^SDL_App"

#,      Up,             Button4

#,      Down,   Button5

,       Thumb1, Home    #many apps don't understand Button > 5

,       Thumb2, End             #many apps don't understand Button > 5

# Thanks to shewp <shewplx@pblx.net>

"^Opera"

#@Repeat    # let qt do it

None,       Down,   Down,               4,  100,    100

None,       Up,     Up,                 4,  100,    100

None,       Thumb1, Right

None,       Thumb2, Left

"^Netscape.*"

, Thumb1, Alt_L|KP_Left

, Thumb2, Alt_L|KP_Right

#, Up, Button4

#, Down, Button5

"^Netscape"

#

# If you don't want to scroll by a few lines then comment out these 4 lines

# and uncomment the paging 4 lines below these!

#

Shift_L,        Down,   Page_Down,                      1,      1000,   1000

Shift_L,        Up,             Page_Up,                        1,      1000,   1000

None,           Down,   Down,                           7,      1000,   1000

None,           Up,             Up,                                     7,      1000,   1000

#

# If you don't like page scrolling then uncomment these

# and comment out the 4 lines above!

#

#Shift_L,       Down,   Shift_L|Down,           7,      1000,   1000

#Shift_L,       Up,             Shift_L|Up,                     7,      1000,   1000

#None,          Down,   Page_Down,                      1,      1000,   1000

#None,          Up,             Page_Up,                        1,      1000,   1000

# Left/Right & Thumb stuff

None,           Left,   Left,                           7,      1000,   1000

None,           Right,  Right,                          7,      1000,   1000

None,           Thumb1, Down,                           7,      1000,   1000

Shift_L,        Thumb1, Up,                                     7,      1000,   1000

None,           Thumb2, Up,                                     7,      1000,   1000

Shift_L,        Thumb2, Down,                           7,      1000,   1000

"^Navigator"

#Alt_L,         Down,   Alt_L|Right

#Alt_L,         Up,             Alt_L|Left

Alt_L,          Down,   Right,                          10,     1000,   1000

Alt_L,          Up,             Left,                           10,     1000,   1000

# Thanks to Paul J Collins <sneakums@usa.net>

"^emacs"

Shift_L,        Up,             Page_Up

Shift_L,        Down,   Page_Down

# you may need Alt instead of Meta....

None,           Down,   Control_L|Meta_L|Shift_L|parenright

None,           Up,             Control_L|Meta_L|Shift_L|parenleft

# Thanks to etienne grossmann <etienne@isr.ist.utl.pt>

"^Xftp"

,                       Down,   j

,                       Up,             k

".* - Pan$"

,       Left,   Control_L|Button1

,       Thumb1, Control_L|Button1

#,      Up,     Button4

#,      Down,   Button5

# Thanks to etienne grossmann <etienne@isr.ist.utl.pt>

"^gv[ :]"

None,           Up,             Shift_L|space

None,           Down,   space

#"^Event Tester"

#@Repeat

#@Exclude

#,      Left,   Button6

#,      Right,  Button7

#,      Thumb1, Button8

#,      Thumb2, Button9

"^xv grab"

@Priority=1

@Exclude

"^XV.*"

None,   Down,   Tab

None,   Up,             Delete

"^Untitled"

# if using wheel fifo, you may switch these.

#,      Up,             Button4

#,      Down,   Button5

#with these

,       Up,             Page_Up

,       Down,   Page_Down

# (end of switch)

,   Thumb1, Home

,   Thumb2, End

"^No Title"

# if using wheel fifo, you may switch these.

#,      Up,             Button4

#,      Down,   Button5

#with these

,       Up,             Page_Up

,       Down,   Page_Down

# (end of switch)

,   Left, Home

,   Right, End

,   Thumb1, Home

,   Thumb2, End

#"\(null\)"

# if using wheel fifo, you may want the 2nd group

#,      Up,             Button4

#,      Down,   Button5

#,      Left, Button6

#,      Right, Button7

#,      Thumb1, Button8

#,      Thumb2, Button9

# 2nd group (old keys...)

#,      Up,             Page_Up

#,      Down,   Page_Down

#,      Left, Home

#,      Right, End

#,      Thumb1, Home

#,      Thumb2, End

# (end of switch)

# send event to the window manager when in the root window...

"\(root\)"

,       Up,             Control_L|N

,       Down,   Control_L|P

,   Thumb1,     Alt_L|Left

,       Thumb2, Alt_L|Right

#

# Uncommment the following to exclude by default.

# Then you will have to add new apps all the time, but will retain any built-in

# wheel functionality contained in some KDE and other newer programs.

# This kinda defeats the original purpose of the program! ;)

#

#".*"

#@Priority=-1000

#@Exclude

#@Repeat

#

# These are the defaults, but note that the defaults for the right side of the

# keyboard are still handled within the program, unless you add the

# combinations desired here. (except for the None modifier of course!)

# If this section is deleted then the hardcoded defaults will be used, which

# are the same thing.

# Modifying these has global effects, but doesn't override what is above.

#

#".*"

#@Priority=-1001

#,      Up,     Button4

#,      Down,   Button5

#None,                                                  Left,   Left

#None,                                                  Right,  Right

#None,                                                  Up,             Page_Up

#None,                                                  Down,   Page_Down

#Shift_L,                                               Left,   Left

#Shift_L,                                               Right,  Right

#Shift_L,                                               Up,             Up

#Shift_L,                                               Down,   Down

#        Control_L,                             Left,   Left,           2

#        Control_L,                             Right,  Right,          2

#        Control_L,                             Up,             Page_Up,        2

#        Control_L,                             Down,   Page_Down,      2

#Shift_L|Control_L,                             Left,   Left,           5

#Shift_L|Control_L,                             Right,  Right,          5

#Shift_L|Control_L,                             Up,             Page_Up,        5

#Shift_L|Control_L,                             Down,   Page_Down,      5

#                  Alt_L,               Left,   Left,           10

#                  Alt_L,               Right,  Right,          10

#                  Alt_L,               Up,             Left,           10

#                  Alt_L,               Down,   Right,          10

#Shift_L|          Alt_L,               Left,   Left

#Shift_L|          Alt_L,               Right,  Right

#Shift_L|          Alt_L,               Up,             Left

#Shift_L|          Alt_L,               Down,   Right

#        Control_L|Alt_L,               Left,   Left.           20

#        Control_L|Alt_L,               Right,  Right.          20

#        Control_L|Alt_L,               Up,             Left.           20

#        Control_L|Alt_L,               Down,   Right.          20

#Shift_L|Control_L|Alt_L,               Left,   Left,           50

#Shift_L|Control_L|Alt_L,               Right,  Right,          50

#Shift_L|Control_L|Alt_L,               Up,             Left,           50

#Shift_L|Control_L|Alt_L,               Down,   Right,          50

#,   Thumb1, Home

#,   Thumb2, End

# vim:ts=4:shiftwidth=4:syntax=sh
```

Y la sección correspondiente al ratón en xorg.conf:

```
Section "InputDevice"

        Identifier "Mouse1"

        Driver     "evdev"

        Option     "Name" "Logitech USB Receiver"

        Option     "Device" "/dev/input/event1"

#        Option     "Dev Name" "Logitech USB Receiver"

        Option     "Protocol" "evdev"

        Option     "Buttons" "10"

        Option     "ZAxisMapping"  "9 10"

        Option     "Emulate3Buttons"    "0"

EndSection

```

----------

## Stolz

A la guía le hace falta actualizarse. Con la nuevas versiones de evdev que vienen con Xorg >=7.0 hay una forma mucho mas sencilla de hacer funcionar los botones, sin usar imwheel ni xmodmap. Además. La configuración ahora es tan sencilla como 

```
Section "InputDevice"

        Identifier  "Logitech MX500 evdev"

        Driver      "evdev"

        Option      "Device"        "/dev/input/event1"

EndSection
```

Para asignar programas a los botones, se puede usar el programa xbindkeys, que reconoce directamente los botones. b:1 es el botón 1, b:2 es el botón 2, etc... Para asignar pulsaciones de teclas, se puede usar el programa xvkbd.

Un ejemplo de configuración que asigna al botón 7 la combinación de teclas ALT+F4 y l programa xterm al botón 8 sería:

```
~ cat ~/.xbindkeysrc

"xvkbd -text "\[Alt_L]\[Tab]""

b:7

"xterm"

b:8
```

Como ves, mucho mas sencillo que antes. Prueba con esta opcion y olvidate de imwheel

----------

## 0kupa

La clave está en ir provando con el xmodmap, miratelo en la wiki (Category:Mouse). Por ejemplo yo fui provando hasta averiguar que secuencias tenía quer poner para un MX518 usando Protocol "ExplorerPS/2":

```
xmodmap -e "pointer = 1 2 3 8 9 4 5 6 7" &

imwheel -k -b "67" &

...
```

Y el archivo .imwheelrc lo tengo como global para los botones laterales del ratón, con sólo este texto:

```
".*"

None, Up, Alt_L|Left

None, Down, Alt_L|Right
```

Mirate a ver si te sirve tal como está aquí para un MX700.

----------

## Stolz

La idea de la guía es precisamente no estar limitado a los 7 botones de ExplorerPS/2 y poder usar los 10 botones de los MX

----------

## 0kupa

 *Stolz wrote:*   

> La idea de la guía es precisamente no estar limitado a los 7 botones de ExplorerPS/2 y poder usar los 10 botones de los MX

 

Sólo le he dicho que ha de probar modificando las secuencias de xmodmap, tal como puedes ver en la wiki (sobretodo los enlaces que he puesto), ya sea con evdev o ExplorerPS/2.

Personalmente con ExplorerPS/2 me coge 7, pero claro, uso tal como es por defecto. Ya que mi ratón son 10 botones, pero tengo 2 botones fijos que son para cambiar la resolución dpi, por lo tanto sólo 7 configurables + el task switch que no uso nunca.

----------

## Stolz

A la hora de escribir la guía, ExplorerPS/2 solo soportaba 7 botones. Ahora, xev solo me lanza eventos para 8, pero el "switch app" lanza el mismo evento que el botón 1, así es que en la práctica, siguen siendo 7. Con evdev, a parte de ser bastante mas sencilla la configuración, el límite en el número de botones lo pone tu ratón, no el driver  :Smile: 

El wiki no me va. No se si está caido es probelma mío.

----------

## Magnum44

Ok, voy a probar así, con xbindkeys a ver si me va mejor. De todas maneras, tengo un problema que creo que tiene que ver con xmodmap... La cuestion es que sin estar funcionando imwheel ni xbindkeys, el boton derecho del ratón actua como si fuese el boton central de la rueda y viceversa y los del pulgar actual como si fuese el boton izquierdo, mi ratón es un kaos, no se que he tocado pero ahora va así y me estoy volviendo loco... ¿dónde está el fallo?   :Evil or Very Mad: 

----------

## Magnum44

Ah, se me olvidaba, otra cosa que no entiendo es porqué con la config de xmodmap de Stolz que tiene un MX500, el cual es exactamente el mismo modelo que mi MX700 pero con cable... a mi no me funciona!!!   :Shocked:   Alguien me lo explica? debe ser que ya es tarde y no me funciona la neurona...

----------

## 0kupa

Yo tengo un MX500 y un MX518, y como te he dicho antes has de trastear modificando las secuencias del xmodmap, puedes provarlo mientras estás en las X, escribiendo en consola esto y luego provando en el navegador:

```
xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"
```

o

```
xmodmap -e "pointer = 1 2 3 8 9 4 5 6 7"
```

o

```
xmodmap -e "pointer = 1 2 3 4 5 6 7 10 11 8 9"
```

Y vas provando en el navegador que botones del ratón has modificado. Ten encuenta que los 3 primeros 1 2 3 se refieren a lso botones derecho, izquierdo y central, y son los otros los que has de mapear. Ya que con el imwheel le estás diciendo que el botón 6 y 7 son los botones del scroll (tal como lo has puesto en el xorg.conf) y a los otros botones les asigna acciones como las de arriba, abajo, avanzar, retroceder. Y por eso haces el xmodmap, para intercambiar el mapeo de los botones, o lo lo que es lo mismo, la acción que tenía ese botón en esa posición 1 2 3 4 5 6 7 8 9 10 11 12..

----------

## Stolz

¿Cual de las configuraciones no te va? porque ya han aparecido unas cuantas. ¿Que error te da? Asumo que estás usando Xorg >=7.0

Si usas evedev no debería hace falta usar xmodmap, el número de botón que te muestre xev, es el mismo que verán todas las aplicaciones (Xorg, los juegos,compiz, xbindkeys, firefox).

Comprueba el log de Xorg, que da pistas sobre los ajustes usados. Por ejempo, un indicador de que va bien pdría ser:

```
(**) Option "CorePointer"

(**) Logitech MX500: Core Pointer

(II) Logitech MX500: Found 3 relative axes.

(II) Logitech MX500: Configuring as pointer.

(**) Logitech MX500: WHEELRelativeAxisButtons: 4 5.

(II) Logitech MX500: Found 8 mouse buttons

(II) Logitech MX500: Configured 10 mouse buttons
```

----------

## Magnum44

Argh! ya he encontrado el fallo, la cuestion es que hay tantos sitios donde lanzar programas en el inicio que se me habia quedado de una configuración anterior el comando que no debia en .kde/Autostart. Problema de los botones del ratón resuelto y tal y como dices Stolz, ya no hace falta xmodmap para nada!

Voy a ponerme a configurar xbindkeys a ver si doy hecho algo productivo con él. Entretanto, ¿cómo se hace para que xbindkeys ejecute unas pulsaciones dependiendo del programa donde se reciba el evento? me explico, quiero poner a funcionar los botones del pulgar para avanzar y retroceder en firefox y en konqueror.

Gracias por vuestra ayuda!   :Cool: 

----------

## Stolz

 *Magnum44 wrote:*   

> quiero poner a funcionar los botones del pulgar para avanzar y retroceder en firefox y en konqueror.

 

Asigna a Konqueror las mismas combinaciones de tecla que Firefox y haz que xbindkeys use esas combinaciones.

----------

## Magnum44

Mmmm... estoy teniendo bastantes problemas con xbindkeys, funcionar funciona (el programa, no los comandos), por ejemplo, cuando pulso uno de los botones del pulgar en un top me aparece que se ejecuta el programa xvkbd y el procesador se pone a 100% durante unos segundos relentizándome el pc, pero no realiza la funcion que se supone debería... Esta es mi config de xbindkeys:

```
$ cat .xbindkeysrc

#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

# Wheel buttons: Page up and Page down

"xvkbd -xsendevent -text "\[Control_L]\[Page_Down]""

b:12

"xvkbd -xsendevent -text "\[Control_L]\[Page_Up]""

b:11

# Desplazamiento anterior y siguiente con pulgar

"xvkbd -xsendevent -text "\[Alt_L]\[left]""

b:8

"xvkbd -xsendevent -text "\[Alt_L]\[right]""

b:10

# Toggle window maximization state with top button

#"xvkbd -text "\[Alt_L]\[F12]""

#m:0x10 + b:8

# Hide all windows and focus desktop with top button

#"xvkbd -text "\[Control_L]\[Alt_L]d""

#m:0x10 + b:8

```

Ideas?   :Idea: 

----------

## Stolz

Prueba lanzando los comandos xvkbd desde consola, no mediante xbindkeys. Si el problema persiste, el fallo es de xvkbd, si desaparece, el fallo es de xbindkeys. En función de lo anterior, ponte en contacto con el autor del programa correspondiente que seguramente pueda ayudarte o abre un nuevo hilo por si alguien conoce la solución.

Por otro lado, yo no uso -xsendevent y de momento me funciona sin problemas, puedes intentar quitandolo.

----------

## Magnum44

Como dices, el problema debe estar en el xvkbd, al lanzarlo desde consola da este error:

```
$ xvkbd -text "\[Alt_L]\[left]"

Warning: Cannot convert string "-*-lucidatypewriter-bold-r-*-*-12-*-*-*-*-*-iso8859-1" to type FontStruct

Warning: Missing charsets in String to FontSet conversion

```

Puede que tenga algo que ver con que uso UTF-8... y por lo que veo el paquete xvkbd no soporta USEs tipo utf8...

----------

## Stolz

Eso es un Warning, no un error, y además es normal, no te preocupes.

Creo que no es tan complicado:

Suponiendo que el comando sea correcto y el gestor de ventanas/programa tenga esa combinación de teclasa signada a una función,...

 ¿Lanzándo xvkbd desde consola se ejecuta la función asignada a esa combinación de teclas?

__No ->El fallo es de xvkbd, contacta con el autor  de xvkbd o pide ayuda en un nuevo hilo

__Sí ->¿Además se pone el CPU al 100%?

____No ->el fallo anterior es de xbindkeys, contacta con el autor  de xbindkeys o pide ayuda en un nuevo hilo

____Sí ->El fallo es de xvkbd, contacta con el autor de xvkbd o pide ayuda en un nuevo hilo

Tambien puedes probar distintas versiones del programa que falla.

----------

## zorth

hola stolz.

queria comentarte que al menos, en mi caso, usando evdev con un logitech G5 reciencomprado.(.... aun no consigo hacer independientes las, izquierda/derecha de la propia ruedecilla...... ) he tenido que agregar al /etc/X11/xorg.conf la opcion de phys= nombre del dispositivo consultado a /proc/bus/input/devices que en mi caso es:

```

I: Bus=0003 Vendor=046d Product=c041 Version=4600

N: Name="Logitech USB Gaming Mouse"

P: Phys=usb-0000:00:02.0-2/input0

S: Sysfs=/class/input/input1

H: Handlers=mouse0 event1

B: EV=7

B: KEY=ffff0000 0 0 0 0 0 0 0 0

B: REL=143

```

por lo que mi ......... por ahora...... xorg.conf sin que como digo, haga independientes la izuqierda derecha, de mi rueda porque, me los detecta como arriba/abajo   :Evil or Very Mad:  .... queda asi para que evdev funcione y pueda arrancarme X :

```

  Identifier "LogitechG5evdev"

      Driver "mouse"

      Option "Protocol" "evdev"

      Option "Device"   "/dev/input/event1"

      Option "Dev Name" "Logitech USB Gaming Mouse"

      Option "Dev Phys" "usb-0000:00:02.0-2/input0"

      Option "buttons"  "8"

      Option "ZAxisMapping" "7 8"

      Option "Resolution" "400"

      Option "Emulate3Buttons" "0"

      Option "CorePointer"

```

pense que debia mencionarlo, pues en un principio al no poner la linea

Option "Dev Phys" "usb-0000:00:02.0-2/input0"

no habia forma de ponerlo a funcionar  :Smile: 

saludos.

----------

## Stolz

Las opciones "Device" ,"Dev Name" y "Dev Phys" son redundantes (al menos cuando escribí la guía). Todas sirven para lo mismo, para identificar al dispositivo. En teoría, con usar una es suficiente, pero por si una falla, están las otras. No recuerdo el orden de prioridad. Si a alguien no le funciona alguna, que pruebe usando  el resto.

Aclarame una cosa, la rueda del G5 además de la pulsación y arriba/abajo ¿también permite movimientos laterales  izquierda/derecha? No tenia ni idea   :Shocked: 

Si no te los reconoce, tal vez tengas que usar algún programa para desactivar ese comportamiento, como en el caso del MX500, que es necesario usar Logitech Applet (o similares) para que los botones que están junto a la rueda no se comporten como la rueda.

----------

## zorth

hola stolz

pues si, en el logitech G5 que compre por la defuncion tras 4 años de fieles servicios de mi fiel durante este tiempo, logitech mouse man wheel optical, los movimientos laterales de izda. dcha. de la rueda, me los aparecen usando en la bash

xev

como los mismos botones de arriba/abajo de la rueda, por que solo me va arriba abajo el scroll. mi intencion, era que me los detectara como botones distintos pero si arriba es 4 y abajo es 5, izda es 4 y dcha es 5 y asi, no hay tu tia xD

probare alguna cosa mas y a ver si hay suerte.

en cuanto a lo que comentas de la redundancia.... no te lo discuto, pero por el motivo que sea, o pongo 

Option "Dev Phys" "usb-0000:00:02.0-2/input0"

o no me arrancan las X por error de " corepointer " segun Xorg.

saludos.

----------

