Touchpad synaptics en Debian: De HAL a udev.

La configuración del touchpad en los portátiles en Debian ha ido cambiando desde hace unos meses de forma drástica, primero lo configurábamos en nuestro xorg.conf, después llego la automagia de Lenny y pasamos a usar HAL para su configuración. Esto trajo bastante debate y nos toco aprender una nueva forma de configurar el driver synaptics en nuestra distro preferida. En ese momento teníamos que crear un archivo de reglas debajo de /etc/hal/fdi/policy con nuestra configuración más o menos de esta forma:


<?xml version="1.0" encoding="ISO-8859-1"?>

<deviceinfo version="0.2">

<device>

<match key="info.capabilities" contains="input.touchpad">

<match key="info.product" contains="Synaptics TouchPad">

<merge key="input.x11_driver" type="string">synaptics</merge>

<!-- Arbitrary options can be passed to the driver using

the input.x11_options property since xorg-server-1.5. -->

<!-- EXAMPLE:

<merge key="input.x11_options.LeftEdge" type="string">120</merge>

-->

<merge key="input.x11_options.LeftEdge" type="string">1700</merge>

<merge key="input.x11_options.RightEdge" type="string">5300</merge>

<merge key="input.x11_options.TopEdge" type="string">1700</merge>

<merge key="input.x11_options.BottomEdge" type="string">4200</merge>

<merge key="input.x11_options.FingerLow" type="string">25</merge>

<merge key="input.x11_options.FingerHigh" type="string">30</merge>

<merge key="input.x11_options.MaxTapTime" type="string">180</merge>

<merge key="input.x11_options.MaxTapMove" type="string">220</merge>

<merge key="input.x11_options.VertScrollDelta" type="string">100</merge>

<merge key="input.x11_options.MinSpeed" type="string">0.40</merge>

<merge key="input.x11_options.MaxSpeed" type="string">1.10</merge>

<merge key="input.x11_options.AccelFactor" type="string">0.01500</merge>

<merge key="input.x11_options.SHMConfig" type="string">on</merge>

<merge key="input.x11_options.VertTwoFingerScroll" type="string">1</merge>

<merge key="input.x11_options.HorizTwoFingerScroll" type="string">1</merge>

<merge key="input.x11_options.VertEdgeScroll" type="string">1</merge>

<merge key="input.x11_options.HorizEdgeScroll" type="string">1</merge>

<merge key="input.x11_options.TapButton1" type="string">1</merge>

<merge key="input.x11_options.TapButton2" type="string">2</merge>

<merge key="input.x11_options.TapButton3" type="string">3</merge>

</match>

<match key="info.product" contains="AlpsPS/2 ALPS">

<merge key="input.x11_driver" type="string">synaptics</merge>

</match>

<match key="info.product" contains="appletouch">

<merge key="input.x11_driver" type="string">synaptics</merge>

</match>

<match key="info.product" contains="bcm5974">

<merge key="input.x11_driver" type="string">synaptics</merge>

</match>

</match>

</device>

</deviceinfo>

Cambiaba un poco respecto a la antigua forma, pero no era demasiado complicada… pero ahora viene la historia que me ha hecho escribir esta entrada…

En una de la ultimas actualizaciones de squeeze se ha actualizado el xserver-xorg-core a una versión 1.7…, no le di importancia hasta que al cabo de unos días me di cuenta que el tapping del touchpad había dejado de funcionar. Mi primer pensamiento fue: Diablos, que coño a pasado con la configuración de HAL para synaptics. Así que me lié la manta a la cabeza y revise mi configuración sin observar ningún error. Todo estaba bien y empecé a mirar logs, descubrí unos errores sin importancia en el log de las X, ninguna mención a HAL y muchas a udev… una rápida mirada en nuestro amigo google y me di cuenta que udev es ahora el encargado de configurar las opciones de los touchpads synaptics.

Las reglas predefinidas de udev se crean en su instalación bajo el directorio: /lib/udev/rules.d/. Alli tenemos los guiones por defecto para que udev gestione correctamente una serie de dispositivos de hardware, incluyendo nuestro touchpad synaptics con este archivo:
66-xorg-synaptics.rules.

Después de copiar nuestro archivo de reglas en un lugar donde lo podemos modificar en: /etc/udev/rules.d/ vamos a pasar a personalizar el funcionamiento de nuestro touchpad. Para ello vamos a observar cual es el contenido del archivo por defecto:


ACTION!="add|change", GOTO="xorg_synaptics_end"
KERNEL!="event*", GOTO="xorg_synaptics_end"

ENV{ID_INPUT_TOUCHPAD}!="1", GOTO="xorg_synaptics_end"

ENV{x11_driver}="synaptics"

# model specific quirks
ATTR{[dmi/id]product_name}=="Inspiron 1011|Inspiron 1012", \
ENV{x11_options.JumpyCursorThreshold}="90", \
ENV{x11_options.AreaBottomEdge}="4100"

ATTR{[dmi/id]product_name}=="HP MiniNote 1000", \
ENV{x11_options.JumpyCursorThreshold}="20"

LABEL="xorg_synaptics_end"

Como podemos observar hay bastante diferencia… pero no deja de ser sencillo y muy potente. Para añadir nuestras opciones personalizadas solo hemos de traducirlas al nuevo formato y colocarlas como opción después de la linea que carga el driver, vamos a ver un ejemplo practico:

En en el xorg.conf la opción para activar el scroll horizontal usando dos dedos era algo así:


Option "HorizTwoFingerScroll" "1"

Usando HAL quedaba una linea como esta:


<merge key="input.x11_options.HorizTwoFingerScroll" type="string">1</merge>

Ahora en udev queda así:


ENV{x11_options.HorizTwoFingerScroll}="1"

Como vemos la traducción es sencilla entre las diferentes formas de configurar estas opciones, simplemente cambiamos la palabra clave (en nuestro ejemplo HorizTwoFingerScroll) y le asignamos el valor deseado (en nuestro caso “1″). Colocamos estas opciones después de la linea que carga el driver quedando el archivo de reglas de esta forma:


ACTION!="add|change", GOTO="xorg_synaptics_end"
KERNEL!="event*", GOTO="xorg_synaptics_end"

ENV{ID_INPUT_TOUCHPAD}!="1", GOTO="xorg_synaptics_end"

ENV{x11_driver}="synaptics"
ENV{x11_options.TapButton1}="1"
ENV{x11_options.TapButton2}="2"
ENV{x11_options.TapButton3}="3"
ENV{x11_options.HorizTwoFingerScroll}="1"

# model specific quirks
ATTR{[dmi/id]product_name}=="Inspiron 1011|Inspiron 1012", \
ENV{x11_options.JumpyCursorThreshold}="90", \
ENV{x11_options.AreaBottomEdge}="4100"

ATTR{[dmi/id]product_name}=="HP MiniNote 1000", \
ENV{x11_options.JumpyCursorThreshold}="20"

LABEL="xorg_synaptics_end"

Reiniciamos udev y las X, para comprobar el éxito de nuestra configuración buscamos en log de las X algo como esto:


(II) config/udev: Adding input device "SynPS/2 Synaptics TouchPad" (/dev/input/event8)
(II) LoadModule: "synaptics"
(II) Loading /usr/lib/xorg/modules/input/synaptics_drv.so
(II) Module synaptics: vendor="X.Org Foundation"
compiled for 1.7.3.902, module version = 1.2.1
Module class: X.Org XInput Driver
ABI class: X.Org XInput driver, version 7.0
(II) Synaptics touchpad driver version 1.2.1
(**) Option "Device" "/dev/input/event8"
(II) "SynPS/2 Synaptics TouchPad": x-axis range 1472 - 5472
(II) "SynPS/2 Synaptics TouchPad": y-axis range 1408 - 4448
(II) "SynPS/2 Synaptics TouchPad": pressure range 0 - 255
(II) "SynPS/2 Synaptics TouchPad": finger width range 0 - 0
(II) "SynPS/2 Synaptics TouchPad": buttons: left right middle
(**) Option "HorizTwoFingerScroll" "1"
(**) Option "TapButton1" "1"
(**) Option "TapButton2" "2"
(**) Option "TapButton3" "3"
(--) "SynPS/2 Synaptics TouchPad": touchpad found
(**) "SynPS/2 Synaptics TouchPad": always reports core events
(II) XINPUT: Adding extended input device ""SynPS/2 Synaptics TouchPad"" (type: TOUCHPAD)
(**) "SynPS/2 Synaptics TouchPad": (accel) keeping acceleration scheme 1
(**) "SynPS/2 Synaptics TouchPad": (accel) acceleration profile 0
(--) "SynPS/2 Synaptics TouchPad": touchpad found
(II) config/udev: Adding input device "SynPS/2 Synaptics TouchPad" (/dev/input/mouse1)
(**) "SynPS/2 Synaptics TouchPad": always reports core events
(**) "SynPS/2 Synaptics TouchPad": Device: "/dev/input/mouse1"

Como podemos observar, ahí están nuestros ajustes cargados y configurados.

Para terminar… si os fijáis no he incluido la clásica opción SHMConfig en mi configuración, esto solo es así porque ya no es necesaria, podemos cambiar de forma dinámica las opciones de nuestro touchpad con synclient y syndaemon sin esta opción.

~ per elsenyordelcaos a 16 febrer 2010.

4 Respostes to “Touchpad synaptics en Debian: De HAL a udev.”

  1. Hola soy nuevo en linux y tengo el problema de que no me cargan los driver de synaptics:

    Couldn’t find synaptics properties. No synaptics driver loaded?

    esto es lo que me sale al escribir synclient -l

    Por otro lado en mi 66-xorg-synaptics.rules tengo esto.

    ACTION!=”add|change”, GOTO=”xorg_synaptics_end”
    KERNEL!=”event*”, GOTO=”xorg_synaptics_end”

    ENV{ID_INPUT_TOUCHPAD}!=”1″, GOTO=”xorg_synaptics_end”

    # Placeholder for platform specific quirks needing
    # ID_INPUT.tags to be set.
    ATTR{[dmi/id]product_name}==”Inspiron 1011″, ENV{ID_INPUT.tags}=”inspiron_1011″
    ATTR{[dmi/id]product_name}==”Inspiron 1012″, ENV{ID_INPUT.tags}=”inspiron_1012″
    ATTR{[dmi/id]product_name}==”Inspiron 1120″, ENV{ID_INPUT.tags}=”inspiron_1120″
    ATTR{[dmi/id]product_name}==”HP MiniNote 1000″, ENV{ID_INPUT.tags}=”mininote_1000″

    LABEL=”xorg_synaptics_end”

    Podrias ayudarme con esto?
    Gracias de antemano.

  2. Este método ha sido abandonado tambien, mira el siguiente enlace para saber cual es el nuevo método, que en realidad se basa en volver a la sintaxis de xorg.conf. Un saludo

  3. Ups, se me olvido el enlace

    http://wiki.debian.org/SynapticsTouchpad

  4. Gracias por la ayuda jorge. Pero mi primer y mayor problema supongo es que no me cargan los drivers de synaptics, he desinstalado y vuelto a reinstalar unas cuantas veces pero no da resultado, como ya dije en mi primer post con synclient me dice que hay problemas al encontrar los driver de synaptics. Y pregunta si estan cargados. Supongo que lo que debo hacer es cargarlo pero como lo hago si aún estando instalados no cargan.
    PD: ya he probado a reiniciar despues de reinstalar los drivers

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Canvia )

Twitter picture

You are commenting using your Twitter account. Log Out / Canvia )

Facebook photo

You are commenting using your Facebook account. Log Out / Canvia )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.