lunes, 25 de agosto de 2008

Control total del driver Synaptics en GTK

Hace ya más de ocho meses (y parece que fue ayer) os adelantaba las ventajas de usar tres programas para controlar el mousepad de los ultraportátiles en Linux.

La mayoría de los sistemas físicos de control del puntero en los netbooks tienen unos botones bastante mejorables: duros y con un clic demasiado ruidoso. Además, no disponen de un botón central. Con estos programas se pueden solventar estos tres problemas y controlar estos (y muchos más) parámetros en el control del mousepad.

GSynaptics

El problema es que, a día de hoy, los que usen Gnome en sus portátiles verán que GSynaptics (el programa de esos tres para GTK) no tiene el mismo rango de opciones que tienen QSynaptics o KSynaptics. Por ejemplo, no es posible reasignar el uso del tapping (hacer clic con la presión de los dedos en la superficie de control) con uno o varios dedos para emular los botones izquierdo, derecho o central.

Premisas

La idea de esta entrada es contaros cómo controlar todos los parámetros de control del mousepad partiendo de una instalación limpia de Ubuntu GNU/Linux como ejemplo, sobre un portátil con un controlador Synaptics (la mayoría de los ultraportátiles tienen un controlador de esa marca).

Desgraciadamente no dispongo de un netbook de cada marca, por lo que no puedo asegurar que funcione en todas las marcas y modelos. Lo que si os puedo indicar es que los MSI Wind que se están vendiendo con un touchpad Sentelic, marca en la que no deberá funcionar lo que explico aquí, y cuyo controlador tiene unos parámetros mínimos. Muy mínimos.

Por tanto, los requisitos mínimos iniciales para aplicar lo visto aquí son simplemente: disponer de un portátil con un controlador Synaptics y usar un sistema operativo como Linux, compatible con dicho controlador en XOrg/XFree86.

¿Qué quiero conseguir? Básicamente configurar un touchpad para:
  1. No tener que usar los botones físicos para hacer clic.
  2. No tener que usar los botones físicos para hacer scroll.
  3. En general, poder configurar cualquier parámetro del controlador Synaptics a nuestro gusto.
En mi caso concreto quiero: tener scroll vertical con la parte derecha del touchpad, scroll horizontal con la parte inferior del touchpad, emulación del botón izquierdo pulsando con un dedo, emulación del botón derecho pulsando el touchpad con dos dedos y emulación del botón central usando tres dedos.

Opciones iniciales

Las opciones configuradas por defecto (de las que me interesan) son las siguientes:
  • Scroll vertical: con la parte derecha del mousepad.
  • Scroll horizontal: no activado.
  • Tapping con un dedo: clic con el botón izquierdo.
  • Tapping con dos dedos: clic con el botón central.
  • Tapping con tres dedos: clic con el botón derecho.
Es decir, que prácticamente viene configurado como yo quiero. Simplemente tengo que (a) activar el scroll horizontal y (b) intercambiar el tapping con dos y tres dedos para que emulen los botones contrarios.

Hay muchas otras opciones como el scroll con dos y tres dedos que yo personalmente no utilizo, que están desactivadas, pero que también se pueden configurar, como veremos más abajo.

Programa de configuración del ratón de Ubuntu

En Gnome podemos acceder a la configuración del touchpad en: Sistema > Preferencias > Ratón y pulsando en la pestaña "Touchpad", como se puede ver en la imagen:


Es justo aquí donde vamos a realizar el primer cambio: simplemente marcando la casilla "Habilitar desplazamiento vertical". Así de sencillo. En cuanto lo hagamos y pulsemos en "Cerrar", podremos desplazarnos en horizontal con el ratón.

Fácil, ¿verdad? Pues sí. En realidad lo mismo se puede conseguir con las modificaciones que os contaré en el apartado "Synclient", pero como en este caso voy a lo sencillo, lo dejo aquí.


Synclient

Synclient es el programa que "muestra y modifica los parámetros del driver del Touchpad Synaptics para XOrg/XFree86 en tiempo real". Hay tres opciones que nos pueden interesar especialmente:

El parámetro -m nos permite conocer en tiempo real diversos valores como la presión, número de dedos o ancho del dedo que presiona el touchpad en un momento determinado. No entraré a explicarlos. Si tienes curiosidad, puedes consultar las opciones con "man synclient".

El parámetro -l nos muestra cómo están configurados en el momento de ejecución todos los parámetros posibles. Con lo que además sabemos qué podemos configurar. La siguiente captura de pantalla muestra las primeras (hay más) opciones mostradas con este parámetro:


Y finalmente, var=value nos permite usar cada uno de esos parámetros (var, variable) y asignarles un valor (value). Es decir, que nos permite cambiar los parámetros para irlos probando hasta encontrar el valor que nos guste para cada caso.

Si queremos usar synclient (o Gsynaptics, Ksynaptics o Qsynaptics), deberemos añadir el parámetro SHMConfig a la configuración de XOrg. Si no lo hacemos e intentamos usarlo, veremos algo como esto:

frames@ubuntu:~$ synclient -m .5 w
Can't access shared memory area. SHMConfig disabled?


Para ello, debemos editar el fichero xorg.conf. Hay que hacerlo como root, por ejemplo con:

$ sudo vi /etc/X11/xorg.conf

Y simplemente introducir la opción SHMConfig con el valor On en la sección InputDevice dedicada a Synaptics, que quedará más o menos como sigue:

Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "HorizEdgeScroll" "0"
Option "SHMConfig" "on"
EndSection


Para que surta efecto el cambio, hemos de salir de Gnome y volver a entrar.

Para simular el botón derecho del ratón con un toque (tapping) con dos dedos, y el botón central con tres, haremos:

$ synclient TapButton2=3
$ synclient TapButton3=2


Tras ello, podemos probar el efecto pulsando con esos dos o tres dedos encima de, por ejemplo, una página web en Firefox.

Si hubieramos tecleado "synclient -l" antes de este cambio, habríamos visto entre los parámetros:

TapButton1 = 1
TapButton2 = 2
TapButton3 = 3


Y tras el cambio deberán estar como:

TapButton1 = 1
TapButton2 = 3
TapButton3 = 2


Como referencia, el listado completo de parámetros posibles es el siguiente:

$ synclient -l
Parameter settings:
LeftEdge = 1872
RightEdge = 5072
TopEdge = 1712
BottomEdge = 4144
FingerLow = 25
FingerHigh = 30
FingerPress = 256
MaxTapTime = 180
MaxTapMove = 220
MaxDoubleTapTime = 180
SingleTapTimeout = 180
ClickTime = 100
FastTaps = 0
EmulateMidButtonTime = 75
EmulateTwoFingerMinZ = 257
VertScrollDelta = 60
HorizScrollDelta = 80
VertEdgeScroll = 1
HorizEdgeScroll = 1
CornerCoasting = 0
VertTwoFingerScroll = 0
HorizTwoFingerScroll = 0
MinSpeed = 0.0822368
MaxSpeed = 0.197368
AccelFactor = 0.00164474
TrackstickSpeed = 40
EdgeMotionMinZ = 30
EdgeMotionMaxZ = 160
EdgeMotionMinSpeed = 1
EdgeMotionMaxSpeed = 304
EdgeMotionUseAlways = 0
UpDownScrolling = 1
LeftRightScrolling = 1
UpDownScrollRepeat = 1
LeftRightScrollRepeat = 1
ScrollButtonRepeat = 100
TouchpadOff = 0
GuestMouseOff = 0
LockedDrags = 0
LockedDragTimeout = 5000
RTCornerButton = 2
RBCornerButton = 3
LTCornerButton = 0
LBCornerButton = 0
TapButton1 = 1
TapButton2 = 3
TapButton3 = 2
CircularScrolling = 0
CircScrollDelta = 0.1
CircScrollTrigger = 0
CircularPad = 0
PalmDetect = 1
PalmMinWidth = 10
PalmMinZ = 200
CoastingSpeed = 0
PressureMotionMinZ = 30
PressureMotionMaxZ = 160
PressureMotionMinFactor = 1
PressureMotionMaxFactor = 1
GrabEventDevice = 1


Con el manual de synaptics o en esta página (por ejemplo) podreis ver (en inglés) cual es el significado de cada uno de estos parámetros.

XOrg.conf

Una vez encontremos los parámetros que nos gustan, lo ideal sería trasladarlos al fichero xorg.conf, en la misma sección que hemos tocado anteriormente, tal cual nos presente los valores "synaptics -l". Cuando acabemos, también sería conveniente descomentar (con un # al principio de la línea) o mejor aún, poner a "Off" el parámetro SHMConfig.

Recomiendo esto por dos razones: primero, porque al reiniciar no se perderán los cambios, y segundo porque si pemitimos usar SHMConfig, cualquier usuario del ordenador podrá cambiar los parámetros vistos en tiempo real.

Siguiendo el ejemplo anterior, la sección vista quearía como sigue:

Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "HorizEdgeScroll" "0"
Option "TwapButton1" "1"
Option "TapButton2" "3"
Option "TapButton3" "2"
Option "SHMConfig" "off"
EndSection


Si queremos que los cambios con synclient queden activos tras reiniciar y no usar xorg.conf, deberemos hacer lo siguiente (SHMConfig tiene que estar configurado a on en xorg.conf):
  1. Ir a Sistema > Preferencias > Sesiones
  2. En la pestaña "Programas de inicio" pulsar el botón "Añadir"
  3. En "Orden introducir "syndaemon -i 1 -d" y poner el Nombre y Comentario que más nos guste ("Syndaemon" y "Demonio de Synaptics" respectivamente, por ejemplo).
  4. Aceptar y cerrar.


Bonus: Syndaemon

Habrás visto que hemos usado otro comando en este último caso. En este caso estamos haciendo lo siguiente:

La opción -d hace que syndaemon se ejecute como aplicación de fondo.

La opción -ix hace que se active el mousepad después de x segundos (en este caso 1) tras dejar de usar el teclado. El valor por defecto son 2 segundos.

Es decir, que con Syndaemon podemos, además, hacer que mientras que el teclado se utilice, no se pueda usar el touchpad por error y configurar cuánto deberemos esperar tras dejar de usar el teclado para que el touchpad vuelva a responder. Si echais un ojo al manual de syndaemon, también podremos por ejemplo desactivar sólo el "tapping" y el "scroll" mientras usamos el teclado (el puntero seguirá moviéndose).

Y ahí lo dejo. Me ha quedado una entrada mucho más larga de lo que me imaginaba, pero espero que sea de interés, lo suficientemente clara y sin errores.

Nota final y recordatorio: para utilizar synclient, syndaemon, gsynaptics, qsynaptics o ksynaptics, debemos tener activada la opción SHMConfig como se explica arriba. De nuevo, si lo hacemos, cualquier usuario podrá modificar los parámetros que permite el driver synaptics. Si aplicamos los parámetros al fichero de configuración de las X no hace falta que SHMConfig esté activado.