Personalizar las opciones del TouchPad Synaptics en Linux

En las últimas versiones de Ubuntu, los TouchPad de Synaptics incluídos en mayoría de los computadores portátiles funcionan sin necesidad de instalar o modificar nada, gracias a un driver de código abierto que permite su utilización en entornos gráficos.

Sin embargo, es probable que quieras modificar alguna configuración, y aquí la cosa se pone un poco complicada (sólo un poco); pero en realidad este driver proporciona todas las opciones que podríamos necesitar de nuestro touchpad. Para ello, tenemos dos alternativas complementarias: GSynaptics y los ficheros de configuración de X.Org

Además, también hay un par de opciones disponibles a través de las preferencias de mouse, en Sistema → Preferencias → Ratón, bajo la pestaña Touchpad. Allí podrás des/habilitar el touchpad, el click con un toque y el desplazamiento horizontal/vertical.

GSynaptics

GSynaptics es una herramienta de configuración gráfica para el touchpad, que permite cambiar parámetros de configuración sin necesidad de reiniciar el sistema. Una vez instalado (está en los repositorios de Ubuntu), lo encontrarás en Sistema → Preferencias → Touchpad.

Al ejecutarlo por primera vez, quizás te aparezca una ventana de advertencia indicándote un error sobre SHMConfig. Éste es un parámetro de configuración del driver que viene deshabilitado por defecto; para activarlo deberás abrir una ventana del terminal y editar el fichero de configuración del Touchpad, con permisos de administrador (o puedes hacer lo mismo desde el diálogo de Ejecutar una aplicación que sale al presionar Alt+F2): gksu gedit /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi

Para habilitar SHMConfig, debes encontrar la sección que comienza con <match key="info.product" contains="Synaptics TouchPad"> (casi al principio de todo), y antes del primer cierre </match> (que corresponde al cierre de esa sección), debes ingresar la siguiente clave: <merge key="input.x11_options.SHMConfig" type="string">On</merge> —después de haber configurado el TouchPad a tu gusto, es buena idea borrar o comenar esta línea, ya que SHMConfig=On puede presentar problemas de seguridad.

Al reiniciar, podrás utilizar GSynaptics sin problema; tendrás acceso a las siguientes opciones de configuración:

  • Des/activar el touchpad
  • Ajustar la sensibilidad
  • Des/activar el click con un toque
  • Ajustar el tiempo el click con un toque
  • Des/activar toque rápido
  • Des/habilitar desplazamiento horizontal/vertical
  • Ajustar velocidad de desplazamiento horizontal/vertical
  • Des/activar desplazamiento circular
  • Ajustar velocidad y punto de inicio del desplazamiento circular
  • Des/activar movimiento en el eje
  • Ajustar aceleración y velocidad mínima/máxima

Algo bastante completo, pero aun hay otras opciones escondidas…

Editar el archivo de configuración del TouchPad

Como quizás se han dado cuenta por la sección anterior; las cosas han cambiado algo para configurar los dispositivos que funcionan en las X: anteriormente, su configuración estaba determinada por el archivo de configuración /etc/X11/xorg.conf, mientras que ahora toda la configuración se hace automáticamente a través de HAL; una “capa de abstracción de hardware” que hace que el hardware “simplemente funcione”. En lo práctico, esto significa que ahora la configuración de los dispositivos que funcionan con las X está repartida en diversos archivos XML. El de Synaptics se encuentra en /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi

Sin embargo, a falta de una interfaz gráfica, puede resultar algo complicado saber qué valores deben llevar las variables que queramos modificar —aquí entra en juego synclient, un programa que forma parte del driver de Touchpad y que permite tanto obtener información del funcionamiento del driver, como modificar valores “al vuelo” (para lo cual será necesario activar SHMConfig, tal como hicimos en la sección anterior).

En mi caso particular, había dos cosas que me interesaba modificar: el ancho del área para el desplazamiento vertical (que era muy pequeño, y no se correspondía con el área delimitada en el touchpad) y activar el desplazamiento vertical con dos dedos (permite hacer desplazamiento vertical arrastrando dos dedos en cualquier parte del touchpad). Para ver todas las opciones a configurar, puedes ver el manual de synaptics con man synaptics

Volvamos a synclient… hay tres modos que nos interesarán: ver la configuración actual, recibir información sobre el funcionamiento del touchpad, y cambiar configuraciones. Para lo primero, tenemos synclient -l, que devuelve algo como:

Parameter settings:
    LeftEdge                = 1632
    RightEdge               = 5000
    TopEdge                 = 1575
    BottomEdge              = 4281
    FingerLow               = 25
    FingerHigh              = 30
    FingerPress             = 256
    MaxTapTime              = 180
    MaxTapMove              = 220
    MaxDoubleTapTime        = 180
    SingleTapTimeout        = 180
    ClickTime               = 100
    FastTaps                = 0
    EmulateMidButtonTime    = 75
    EmulateTwoFingerMinZ    = 257
    VertScrollDelta         = 100
    HorizScrollDelta        = 121
    VertEdgeScroll          = 1
    HorizEdgeScroll         = 0
    CornerCoasting          = 0
    VertTwoFingerScroll     = 1
    HorizTwoFingerScroll    = 0
    MinSpeed                = 0.109
    MaxSpeed                = 0.179934
    AccelFactor             = 0.0015
    TrackstickSpeed         = 40
    EdgeMotionMinZ          = 30
    EdgeMotionMaxZ          = 160
    EdgeMotionMinSpeed      = 1
    EdgeMotionMaxSpeed      = 400
    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              = 2
    TapButton3              = 3
    ClickFinger1            = 1
    ClickFinger2            = 1
    ClickFinger3            = 1
    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

Primero, lo más fácil: activar el desplazamiento vertical con dos dedos —synclient VertTwoFingerScroll=1 y listo; con eso queda activado durante la sesión, más adelante podremos hacer este cambio permanente al editar el fichero de configuración.

Ahora, para definir mejor el ancho del área de desplazamiento vertical, recurirremos nuevamente a synclient, pero ahora para tener información sobre la utilización del touchpad, con synclient -m 50, lo que nos entregará información cada 50 milisegundos sobre el dispositivo, algo similar a esto:

    time     x    y   z f  w  l r u d m     multi  gl gm gr gdx gdy
   0.000     1 5855   0 0  0  0 0 0 0 0  00000000   0  0  0   0   0
  18.685  2482 2250  44 1  8  0 0 0 0 0  00000000   0  0  0   0   0
  18.735  2489 2247  43 1  8  0 0 0 0 0  00000000   0  0  0   0   0
  18.785  2656 2233  39 1 10  0 0 0 0 0  00000000   0  0  0   0   0
  18.836  3054 2222  36 1  7  0 0 0 0 0  00000000   0  0  0   0   0
  18.886  3445 2215  36 1  8  0 0 0 0 0  00000000   0  0  0   0   0
  18.936  3761 2179  36 1  8  0 0 0 0 0  00000000   0  0  0   0   0
  18.987  3906 2126  36 1  8  0 0 0 0 0  00000000   0  0  0   0   0
  19.037  3879 2068  38 1  8  0 0 0 0 0  00000000   0  0  0   0   0
  19.087  3682 1978  35 1  9  0 0 0 0 0  00000000   0  0  0   0   0
  19.137  3367 1828  35 1 10  0 0 0 0 0  00000000   0  0  0   0   0
  19.187  3056 1749  33 1 10  0 0 0 0 0  00000000   0  0  0   0   0
  19.237  2929 1731  26 1 10  0 0 0 0 0  00000000   0  0  0   0   0
  19.287     1 5855   3 2  5  0 0 0 0 0  00000000   0  0  0   0   0
  19.337     1 5855   4 2  5  0 0 0 0 0  00000000   0  0  0   0   0
  19.588     1 5855   0 0  0  0 0 0 0 0  00000000   0  0  0   0   0
  19.738     1 5855   1 2  5  0 0 0 0 0  00000000   0  0  0   0   0
  19.838     1 5855   2 2  5  0 0 0 0 0  00000000   0  0  0   0   0
  19.988     1 5855   0 0  0  0 0 0 0 0  00000000   0  0  0   0   0
  20.289     1 5855   1 2  5  0 0 0 0 0  00000000   0  0  0   0   0

En mi caso, descubrí que el área marcada para el desplazamiento vertical en mi TouchPad comenzaba en la coordenada X = 5000, por lo que debería aplicar ese valor a RightEdge: synclient RightEdge=5000 y ya.

Recuerda que los cambios que realizas con synclient tienen efecto instantáneo, pero además son transitorios — para hacerlos permanentes, debemos editar el fichero de configuración del driver.

Fijar los cambios permanentes a la configuración

Nuevamente tendremos que editar /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi, pero como siempre, es buena idea realizar primero una copia de seguridad: sudo cp /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi.backup

Ahora sí, a editar… podemos hacerlo con cualquier editor de texto, por ejemplo: gksu gedit /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi

En mi caso, mi fichero de configuración queda así:

<?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>
	-->
	<!-- La siguiente es la línea que insertamos antes para activar SHMConfig.
	Si ya no necesitas hacer más cambios o utilizar synclient, puedes comentarla
	o borrarla, ya que SHMConfig=On implica riesgos de seguridad -->
	<merge key="input.x11_options.SHMConfig" type="string">On</merge>
	<merge key="input.x11_options.RightEdge" type="string">5000</merge>
        <merge key="input.x11_options.VertTwoFingerScroll" type="string">1</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>
        <merge key="input.x11_options.LeftEdge" type="string">0</merge>
        <merge key="input.x11_options.RightEdge" type="string">1280</merge>
        <merge key="input.x11_options.TopEdge" type="string">0</merge>
        <merge key="input.x11_options.BottomEdge" type="string">800</merge>
        <merge key="input.x11_options.ClickFinger1" type="string">1</merge>
        <merge key="input.x11_options.ClickFinger2" type="string">3</merge>
        <merge key="input.x11_options.ClickFinger3" type="string">2</merge>
        <merge key="input.x11_options.HorizEdgeScroll" type="string">0</merge>
        <merge key="input.x11_options.VertEdgeScroll" type="string">0</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.HorizScrollDelta" type="string">0</merge>
        <merge key="input.x11_options.VertScrollDelta" type="string">40</merge>
        <merge key="input.x11_options.PressureMotionMinZ" type="string">10</merge>
        <merge key="input.x11_options.FingerLow" type="string">16</merge>
        <merge key="input.x11_options.FingerHigh" type="string">80</merge>
        <merge key="input.x11_options.FingerPress" type="string">256</merge>
        <merge key="input.x11_options.PalmDetect" type="string">0</merge>
        <merge key="input.x11_options.PalmMinWidth" type="string">10</merge>
        <merge key="input.x11_options.PalmMinZ" type="string">200</merge>
        <merge key="input.x11_options.MinSpeed" type="string">0.8</merge>
        <merge key="input.x11_options.MaxSpeed" type="string">1.2</merge>
        <merge key="input.x11_options.AccelFactor" type="string">0.10</merge>
        <merge key="input.x11_options.MaxTapMove" type="string">25</merge>
        <merge key="input.x11_options.MaxTapTime" type="string">223</merge>
        <merge key="input.x11_options.MaxDoubleTapTime" type="string">200</merge>
        <merge key="input.x11_options.TapButton1" type="string">0</merge>
        <merge key="input.x11_options.TapButton2" type="string">0</merge>
        <merge key="input.x11_options.TapButton3" type="string">0</merge>
        <merge key="input.x11_options.RTCornerButton" type="string">0</merge>
        <merge key="input.x11_options.RBCornerButton" type="string">0</merge>
        <merge key="input.x11_options.LTCornerButton" type="string">0</merge>
        <merge key="input.x11_options.LBCornerButton" type="string">0</merge>
      </match>
    </match>
  </device>
</deviceinfo>

Como pueden ver, la parte que nos interesa está prácticamente al principio (suponiendo que efectivamente quieres configurar un TouchPad Synaptics, y no otro de los dispositivos controlados por este fichero).

El archivo es un simple XML que acepta todas las propiedades descritas en el manual de Synaptics, de la misma forma que se hacía antes con xorg.conf, pero en una sintaxis un-poco distinta.