Configurar los botones extras del ratón

Algunos ratones, además del clic derecho, izquierdo, central y rueda de scroll, tienen botones programables. El objetivo de este tutorial es aprender a configurar los botones programables del ratón. En este caso configuraremos un trackball de Logitech, concretamente un Cordless Optical TrackMan el cual dispones de 5 botones programables además de los botones estándares.

1.- Programas necesarios

  • xev: Nos permitirá conocer los códigos que corresponden a cada botón y/o tecla. Una vez todo este funcionando, puede ser desinstalado.
  • xdotool: Nos permitirá simular entradas en el teclado, movimientos y pulsaciones en el ratón, así como mover y redimensionar ventanas. En nuestro caso, lo usaremos para mapear pulsaciones del ratón hacia el teclado. Otra utilidad similar es xvkbd, en mi caso opté por xdotool y todo funcionó sin problemas; desconozco cual será mejor.
  • xbindkeys: Es un programa que controla todas las pulsaciones, y ante el evento configurado (en nuestro caso una pulsación en alguno de los botones programables del ratón) llamará a xdotool.
Una vez instalado todo lo necesario, debemos conocer los códigos que corresponden a cada una de las teclas.

2.- Obteniendo los códigos de los botones del ratón

Al ejecutar en un terminal el comando xev, se abrirá una pequeña ventana con un recuadro en su interior. Si damos el foco a la venta, y colocamos el ratón en su interior, veremos que con cada pulsación del teclado, botón o movimiento del ratón o incluso cualquier otro dispositivo de entrada, aparece un volcado en el terminal. Al mapear el ratón, obtendremos algo similar a:
ButtonPress event, serial 33, synthetic NO, window 0x3c00001,
    root 0x15d, subw 0x3c00002, time 240187529, (48,22), root:(56,91),
    state 0x10, button 1, same_screen YES

EnterNotify event, serial 33, synthetic NO, window 0x3c00001,
    root 0x15d, subw 0x0, time 240187529, (48,22), root:(56,91),
    mode NotifyGrab, detail NotifyInferior, same_screen YES,
    focus YES, state 272

KeymapNotify event, serial 33, synthetic NO, window 0x0,
    keys:  93  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 

ButtonRelease event, serial 33, synthetic NO, window 0x3c00001,
    root 0x15d, subw 0x3c00002, time 240190105, (48,22), root:(56,91),
    state 0x110, button 1, same_screen YES

LeaveNotify event, serial 33, synthetic NO, window 0x3c00001,
    root 0x15d, subw 0x0, time 240190105, (48,22), root:(56,91),
    mode NotifyUngrab, detail NotifyInferior, same_screen YES,
    focus YES, state 16
La parte de relevancia es la tercera línea donde aparece button _. Deberemos obtener los números de todos los botones que queramos mapear.

3.- Obteniendo los códigos de los botones del teclado

Al mapear las pulsaciones del teclado con xev, obtendremos algo similar a:
KeyRelease event, serial 33, synthetic NO, window 0x3c00001,
    root 0x15d, subw 0x3c00002, time 242466429, (36,47), root:(44,116),
    state 0x10, keycode 117 (keysym 0xff56, Next), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 33, synthetic NO, window 0x3c00001,
    root 0x15d, subw 0x3c00002, time 242469629, (36,47), root:(44,116),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
En este caso, la parte relevante se encuentra también la tercera línea, concretamente en (keysym 0xff56, Next). Siendo más concretos, lo que nos interesa es el nombre que recibe la tecla que en este caso es Next (para avanzar página) y Alt_L (para la tecla Alt izquierda). Deberemos obtener los nombres de las teclas hacia donde queremos mapear las pulsaciones del ratón.

En mi caso mapeare el botón 11 (b:11) a retroceder página (Prior), botón 12 (b:12) a avanzar página (Next) y el botón 10 (b:10) a la tecla espacio (space). Los otros 2 botones programables, Xorg o GNOME, los autodetecto y los configuró para avanzar y retroceder en el navegador de internet así como en el explorador de archivos.

4.- Configurando xbindkeys

En este punto, usaremos los datos recolectados para configurar xbindkeys para que al pulsar cualquiera de las teclas programables se llame a xdotool, el cual mapeara hacia las pulsaciones del teclado que nosotros indiquemos.

Lo primero que debemos hacer es indicarle a xbindkeys que genere un archivo de configuración xbindkeysrc. Para ello le pasaremos el comando --defaults a xbindkeys y redirigiremos la salida estándar hacia un archivo. Por ejemplo: xbindkeys --default > ~/xbindkeysrc. Este archivo .xbindkeysrc debe estar en el home del usuario que lo vaya a ejecutar.

Una vez tengamos generado el archivo de configuración, lo editaremos para mapear las pulsaciones del ratón hacia pulsaciones del teclado. En mi caso:
agd-desktop # nano ~/.xindkeysrc
# For the benefit of emacs users: -*- shell-script -*-
###########################
# xbindkeys configuration #
###########################
#
# Version: 1.7.3
#
# If you edit this file, do not forget to uncomment any lines
# that you change.
# The pound(#) symbol may be used anywhere for comments.
#
# To specify a key, you can use 'xbindkeys --key' or
# 'xbindkeys --multikey' and put one of the two lines in this file.
#
# The format of a command line is:
#    "command to start"
#       associated key
#
#
# A list of keys is in /usr/include/X11/keysym.h and in
# /usr/include/X11/keysymdef.h
# The XK_ is not needed.
#
# List of modifier:
#   Release, Control, Shift, Mod1 (Alt), Mod2 (NumLock),
#   Mod3 (CapsLock), Mod4, Mod5 (Scroll).
#

# The release modifier is not a standard X modifier, but you can
# use it if you want to catch release events instead of press events

# By defaults, xbindkeys does not pay attention with the modifiers
# NumLock, CapsLock and ScrollLock.
# Uncomment the lines above if you want to pay attention to them.

#keystate_numlock = enable
#keystate_capslock = enable
#keystate_scrolllock= enable

#Retroceso página al pulsar el botón superior del scroll del ratón
"xdotool key Prior"
 b:11

#Avanze página al pulsar el botón inferior del scroll del ratón
"xdotool key Next"
 b:12

# El botón de bloqueo es remapeado hacia la tecla espacio
"xdotool key space"
 b:10

5.- Cargar xbindkeys al inicio

Lo más sencillo es usar el cargador de aplicaciones de tu escritorio. Si usas GNOME, lo encontraras en Sistema --> Preferencias --> Aplicaciones al Inicio --> Añadir.

1 comentarios:

#
Unknown dijo...

ayudame a configurar el teclado

Publicar un comentario

Recuerde que puede utilizar algunos códigos HTML como <b>para negrita</b>, <i>para cursiva</i> y <a href="URL">para enlaces</a>.