martes, 26 de agosto de 2008

Multitouch en touchpads Synaptics


En mi última entrada sobre el controlador Synaptics (Control total del driver Synaptics en GTK), os hacía un resumen con un par de ejemplos prácticos sobre cómo controlar los eventos que envia el driver y adaptarlos a nuestras necesidades. La mención a GTK venía dada porque el frontend gráfico que controla el driver en Gnome tiene algunas carencias (no controla todos los parámetros).

En los comentarios, josvazg me preguntaba si esa configuración era "multitouch".

La respuesta rápida (y correcta) es: sí, es multitouch. La respuesta completa es: si, el multitouch, pero no como tú quieres.

Es multitouch porque precisamente Synaptics frente a otros controladores (como el Sentelic del MSI Wind que mencionaba en la entrada), acepta parámetros avanzados que permiten el reconocimiento de la presión de dos o más dedos, e incluso reconocer la palma de la mano frente a un dedo, para evitar el movimiento del puntero si hemos puesto la mano encima sin querer.

Si leemos el manual del driver en XOrg/XFree86, nos dice que:

Por defecto, un touchpad Synaptics opera en modo compatible emulando un ratón estándar. Sin embargo, usando un driver dedicado, se dispone de características más avanzadas, como:
  1. Movimiento con aceleración y velocidad ajustables no lineales.
  2. Eventos de botón a través de toques cortos del touchpad.
  3. Eventos de botón dobles a través de toques cortos dobles sobre el touchpad.
  4. Arrastre a través de toques cortos y mantenimiento del dedo en el touchpad.
  5. Eventos de botón central y derecho en la esquina superior o inferior del touchpad.
  6. Scroll vertical (eventos en los botones 4 y 5) al mover el dedo en el lateral derecho del touchpad.
  7. El botón arriba/abajo envía eventos 4 y 5.
  8. Scroll horizontal (eventos en los botones 6 y 7) moviendo el dedo en la parte inferior del touchpad.
  9. Los multibotones envían eventos 4 y 5 para hacer scroll vertical y 6/7 para hacer scroll horizontal.
  10. Detección de dedos ajustable.
  11. Pulsaciones con varios dedos: dos dedos para el botón central y tres dedos para el botón derecho (necesita soporte de hardware, no todos los modelos implementan esta característica).
  12. Velocidad de movimiento dependiente de la presión.
  13. Configuración en tiempo real usando memoria compartida. Lo que significa que puedes cambiar la configuración de los parámetros sin reiniciar el servidor X.
Nótese que dependiendo del firmware del touchpad, alguna de estas características pueden estar disponibles incluso sin usar el driver synaptics. Nótese también que algunas funciones no están disponibles en todos los modelos de touchpads, porque necesitan tener soporte de hardware/firmware (por ejemplo para la presión de varios dedos).
En mi anterior entrada apenas hemos tocado un par de parámetros de todos los mencionados arriba. Mencionábamos que podíamos hacer scroll vertical y horizontal (aunque no vimos cómo), y que podíamos intercambiar los botones (4 y 5) para emular los botones central y derecho simplemente haciendo tapping (presión) con dos o tres dedos. Este último punto ya significa que tenemos multitouch. Pero hay más.

El toque con dos dedos para emular el botón derecho de un ratón lo resolvimos con el siguiente parámetro en xorg.conf:

Option "TapButton2" "3"

Para el toque con tres dedos para emular el botón central del ratón usamos el siguiente parámetro en el mismo fichero:

Option "TapButton3" "2"

Os animo a que investigueis el manual del driver (usando man synaptics) para que veais que es posible configurar cosas como la duración máxima en tiempo (en milisegundos) para detectar una pulsación (con MaxTapTime), la activación o desactivación del scroll vertical (VertEdgeScroll) u horizontal (HorizEdgeScroll), la definición de las áreas de pulsación, de scroll, el factor mínimo de aceleración (MinSpeed), el máximo (MaxSpeed), el factor global de aceleración (AccelFactor) ... y otros muchos parámetros.

Scroll con dos dedos

Por ejemplo, una de las cosas que no comenté tiene que ver también con el multitouch: el parámetro VertTwoFingerScroll permite activar o desactivar el scroll vertical utilizando dos dedos sobre cualquier parte del pad. Análogamente, HorizTwoFingerScroll hace lo mismo, pero con el scroll horizontal. Pero es que además podemos controlar la cantidad de movimiento usando los parámetros VertScrollDelta y HorizScrollDelta para los dos parámetros anteriores, respectivamente.

No puedo entrar en esta entrada en todas las posibilidades disponibles, pero de nuevo os invito a leer el manual, mi entrada anterior, y experimentar con las posibilidades que más os convengan a cada uno.

Swipe & Pinch

Lo que sí haré es terminar mencionando un artículo que cubre la parte de la pregunta de josvagz que no funciona simplemente con el driver original: "Añade suporte de gestos multitoque a un portátil equipado con touchpad", de IBM, que mediante algunos scripts de Perl y synaptics permite hacer "swipping" y "pinching" de la forma en que muestra el siguiente video:



Se que hay muchas otras cosas que se podrían hacer, pero permitidme que, al menos por ahora, y hasta que pueda jugar con ellas, lo dejemos aquí. Leer mas

El fin de una era


Hoy he estado en El Corte Inglés y dando una vuelta por el Departamento de Informática he visto una imagen que no he podido resistirme a fotografiar: unas cajas apiladas de EeePC 701 de 4Gb que si no fuera por lo limpios que son en este establecimiento, bien podrían estar llenas de telas de araña y polvo.
Entonces es cuando he comprendido que se ha acabado una era. La era del 701. Un año después de que apareciera tímidamente como una noticia sin importancia en algunos blogs y tras haber revolucionado el mundo de la informática portátil, el 701 es ya historia y nadie lo quiere.
Pero no debemos olvidarnos de él. Ha de permanecer en nuestra memoria tal y como conservamos otras máquinas emblemáticas de nuestras vidas, el Sinclair Spectrum, el Commodore 64 y tantas otras reliquias.
Reservemos un espacio al EeePC 701 en nuestros recuerdos. Cuando seamos viejecitos tendremos que contarle esta batallita a nuestros nietos.
¡Larga vida al 701!
Leer mas

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. Leer mas

Asus Eee PC 701 Linux en blanco anunciado a 234 euros en Alternate


Si no recuerdo mal, esta es la oferta más baja a la que lo he visto, con IVA incluido. Leer mas