The Linux Wacom Project
SourceForge.net Logo

Linux Wacom Project HOWTO




Copyright (C) 2002-2008 - LinuxWacom

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled
GNU
Free Documentation License
.


1.0 - Introduction

This document began in November 2002 as a HOWTO for setting up a USB Wacom Intuos2 on Redhat 8.0. It has since grown to cover all Wacom tablets, USB and serial, running on various different Linux distributions. As of December 2002, this project has transformed into the Linux Wacom Project. Work on this document is on-going so if you find an error, have a question, or have something to add, please send an email to: linuxwacom-discuss@lists.sf.net.

1.1 - Success Stories

This page documents different distributions tested by myself or reported from the users in the discussion mailing list. If you have success stories for a distribution or version not mentioned, let me know so I can update the page.

  • Redhat
    • Fedora Core 5 - tested on kernel 2.6.16 & 2.6.17, X.org 7.0.0. See Mini-Howto (It has been reported that the new kernel update, 2.6.18-1.2200.fc5, has problem with input devices. Please DO NOT update to 2.6.18-1.2200.fc5)
    • Fedora Core 4 - tested on kernel 2.6.14 & 2.6.12, X.org 6.8
    • Fedora Core 3 - tested on kernel 2.6.11-1.14_FC3 & 2.6.9, X.org 6.8 (see Building wacom driver On Fedora Core 3)
    • Fedora Core 2 final - tested on kernel 2.6.5-1.358
    • Fedora Core 2 test1 - tested on kernel 2.6.1-1
    • Fedora Core 1 - tested on kernel ???
    • Redhat 9.0 - tested on kernel 2.4.20-6, 2.4.22, 2.4.24, 2.6.0, & 2.6.2
    • Redhat 8.0 - tested on kernel 2.4.18-17.8.0, 2.4.18-18.8.0, 2.4.18-19.8.0, & 2.4.18-24.8.0
    • Redhat 7.3 - tested on kernel 2.4.18-17.7.x
    • Redhat 7.2 - tested on kernel 2.4.18-17.7.x
    • Redhat Enterprise Linux 3 - tested on kernel 2.4.21-4
    • Redhat Enterprise Linux 4 - tested on kernel 2.6.9
  • Mandrake
    • Mandriva 2006 32bit december club - tested on 2.6.12-12mdksmp X.org 6.9.0
    • Mandriva 2006 (Powerpack) - tested on 2.6.12-12mdksmp X.org 6.8.99.900 (6.9.0 RC 0)
    • Mandrake 10.0 - tested on 2.6.3 and X?
    • Mandrake 9.1
    • Mandrake 9.0 - tested on ???
    • Mandrake 8.2 - tested on kernel 2.4.18-6mdk
  • Gentoo
    • Gentoo 2005.0, Xorg-X11 6.8.2-r4 & 6.8.2-r1, linux-2.6.13-gentoo-r3 & linux-2.6.11-gentoo-r6
    • Gentoo 2004.2, Xorg-X11 6.7.0, linux-2.6.8-rc3-mm2
    • Gentoo 2004.1, Xorg-X11 6.7.0, kernel 2.4.25 & 2.6.5
    • Gentoo 1.4rc, XFree86 4.2.0, kernel 2.4.19
    • Gentoo 1.4, XFree86 4.3.0-r5, kernel 2.6.3 (can not run wacomcpl and xsetwacom)
  • Debian
    • Debian (sid) - XFree86 4.3 on 2.6.6 (see Installing wacom driver On Debian)
    • Debian (sid) - XFree86 4.3(?) on 2.6.0 (can not run wacomcpl and xsetwacom)
    • Mepis 200310 (Debian unstable) - XFree86 4.3 on 2.4.22
    • Debian Woody - XFree86 4.2 on 2.4.20
    • Debian Stable 3.0 - XFree86 4.3 on 2.4.18 (can not run wacomcpl and xsetwacom)
    • Debian Stable - XFree86 4.1
  • Slackware
    • Slackware 10.2, kernel 2.6.16.9
    • Slackware 10.2, kernel 2.4.31
    • Slackware 10.1, kernel 2.6.11-rc4 & 2.4.29, X.org 6.8.2
    • Slackware 10.0, kernel 2.4.26, X.org 6.7.0
    • Slackware 9.1, with 2.4.22
    • Slackware 9.0
    • Slackware 8.1, (standard release)
  • SuSE
    • Suse Linux 9.3, kernel 2.6.11.4-21.8
    • Suse Linux 9.2 Pro, kernel 2.6.8, X.org 6.8.1 (see Building wacom driver On Suse 9.2)
    • Suse Linux 9.1, kernel 2.6.4 & 2.6.5, XFree 4.3.99 (4.4.0 RC 2)
    • Suse Linux 8.0, kernel 2.4.18, XFree 4.2
  • Ubuntu
    • Ubuntu 6.06 Dapper Drake (refer to Ubuntu Wiki - Wacom for details)
    • Ubuntu 5.04 (Hoary), kernel 2.6.10-5, X.Org 6.8.2-10
    • Ubuntu Breezy, kernel 2.6.12, X.Org 6.8
  • FreeBSD
    • version 4.10, serial only
  • Source Mage
    • gcc 3.2.2, Linux 2.4.21-pre4-ac3, XFree86 4.2.1 and 4.3.0
  • PowerMac

1.2 - How To Use This Document

In terms of document organization, if you have not figured it out already, you can browse the document one page at a time, or you can click on the ALL link and view the entire thing in one long page.

Where the guide differs between distributions or packages, I have added a comment which appears indented with a light blue background.

Also, it bears mentioning since it's a detail often missed: there are two drivers in the Linux Wacom Project- wacom.o and wacom_drv.o. The first driver is the USB kernel driver. The second driver is the XFree86 Wacom driver. Serial users need only be concerned with the wacom_drv.o driver. USB users need both. If you try to use the wacom_drv.o driver in place of the wacom.o kernel driver or visa-versa, things generally won't work.

Next, this document was written with the assumption that you are starting from scratch with a relatively recent distribution of the Linux kernel. Also, if you have already added lines to your XFree86/Xorg configuration file (XF86Config/XF86Config-4 or xorg.conf), you should comment them out and restart X. Since we'll be stepping through the entire process, we need X to ignore the tablet until we're ready. Otherwise, X will just get in the way.

Finally, if you know what you're doing, you can leave your X settings intact, print this out, switch to runlevel 3, and follow along from the console. An HTML version of this document can be found in the docs directory at docs.html.

1.3 - Wacom Driver Theory of Operation

Wacom tablets are available in serial and USB configurations. They are also sold as embedded products in certain tablet PC's. I will cover all three types, but the serial case is the most straightforward, so we'll start there.

Serial Tablet Operation - The Short Story

When a Wacom serial tablet is connected to a COM port, software can interact with it directly by opening the appropriate device, usually /dev/ttyS0. The XFree86 Wacom driver (wacom_drv.o) does precisely this, and all stylus movements are converted into XInput events for programs like the Gimp to turn into fluid brush strokes.

Wacom tablets are capable of handling a number of different data protocols, and the Linux Wacom Project code currently utilitizes two, Wacom Protocol IV and Protocol V. Each operates with a fixed-sized packet, the length of which depends on the model and ROM version.

When the serial tablet is reset, it defaults to a standard baud rate, often 9600 baud. From there, the device type can be queried, and if the tablet supports it, the baud rate increased to a higher value. Additionally, model parameters like tablet size can be queried directly to determine which features are available.

Once configured, the tablet streams data back to the application as tools are brought into and out of proximity, are pressed against the tablet surface, or are tilted or inverted.

USB Tablet Operation - The Long Story

Initially at least, the USB Wacom tablet is an HID compliant device, and when first connected to the computer, will identify itself as such. Unfortunately, this is not what you want because in this mode, you will not get any of the fancy features. The hid-core.c, mousedev.c, and usbmouse.c kernel drivers contain exceptions for the wacom; when the device is detected, they ignore the tablet. In this way, the more sophisticated wacom driver has the opportunity to assume control.

The first thing that the driver does is register itself with the USB subsystem and wait for work to do. When the user plugs the device in, or the device is first detected, the USB subsystem shops the vendor and device identifier around, checking it against different drivers. The wacom driver takes responsibility for the tablet and then notifies the event system that it will be providing data. It then asks the tablet to switch from HID-compliant mode to "mode 2", a wacom-specific protocol which allows for values like pressure, Z rotation, and tilt. As information arrives, the wacom driver dutifully converts the data into real-world values and hands it on to the event system.

From here, any usermode application can get access to the event data by opening /dev/input/event0. A stream of events including mouse movements, clicks, and proximity updates can be read from the device. Similar to the serial case, XFree86's Wacom driver (wacom_drv.o) has the ability to read this device, and performs filtering on the data before convert the Linux input events into XInput events.

By breaking the responsibility for the data into three distinct levels, the kernel code remains simple and robust, the applications generalized, and the fancy features commonly accessible to all GUI applications in the X window system itself. This document walks down the entire data path from the USB kernel driver to the gimp application.

Embedded Device Operation - Tablet PC with Wacom Digitizer

Refer to Tablet PC page for detail.

2.0 - Getting It Together

This section is devoted to preparing your system for the installation. Every distribution handles kernel modules and file locations a bit differently, so the goal here is to return everything to a known state. In some cases, your distribution may have automatically loaded certain modules which you will now need to unload. USB users will need to pay specific attention to discussions related to kernel drivers and modules. Serial tablet users have it much easier, and can bypass this. Both users will need to make changes to the XFree86 configuration file.

Incidentally, some distributions detect new hardware on boot. If you allow Redhat's "anaconda" for instance to automatically configure (or remove) your USB tablet, it may undo some of the settings you will make here. Until Redhat's installation program recognizes Wacom tablets as non-HID devices by default, you are best off in my opinion to not allow it to configure the device. Just a warning.

2.1 - Before We Start

From the beginning, let's make certain that we are on the same page. First, if you have Wacom related lines in your XF86Config/XF86Config-4 or xorg.conf files already, you should comment them out or remove them. In particular, this includes InputDevice sections with a driver set to "wacom" and their corresponding InputDevice lines in ServerLayout. When that's done, restart X.

It would be a wise idea at this time to check your XFree86 or Xorg log file for references to wacom, wcm, or tablet. If X persists in trying to interact with the tablet, things will only be problematic later. The log file is often found at /var/log/XFree86.0.log or /var/log/Xorg.0.log.

If you have a USB tablet, you need to check Wacom kernel drvier first The USB Kernel Driver. Serial tablet or Tablet PC users can go directly to the next section Downloading the Code page.

2.2 - Downloading the Code

The file linuxwacom-0.8.0-3.tar.bz2 is the stable package and contains files that you will need to get your serial or USB tablet working. The current beta package linuxwacom-0.8.1-4.tar.bz2 is also available and may be used by people who are willing to help test new features. I will never put a beta package on this site that I am not running myself on my primary development machine. So you can be certain that if there are any obvious show stoppers, they will be fixed before you get to see them.

Unpacking the tarball is usually a one-step process, but I show both steps in case the typical -jxf option doesn't work with tar.

[jej@ayukawa jej]$ bunzip2 linuxwacom-0.8.0-3.tar.bz2
[jej@ayukawa jej]$ tar -xf linuxwacom-0.8.0-3.tar
[jej@ayukawa jej]$ cd linuxwacom-0.8.0-3
Once in the package directory, you need only to configure and build the code. This is described in more detail as you continue. The executables and wacom_drv.o are installed automatically; the kernel drivers have different installation procedures depend on the kernel source you use.

If you are interested, the following tables contain the package contents and release dates. Otherwise, let's continue.

Stable files included for linuxwacom-0.8.0-3:

FileComment
configure- configure script for distribution independent builds
prebuilt/install- installer for the executables and Wacom X driver to a system identical to the development system.
prebuilt/uninstall- unistaller for the executables
prebuilt/wacom.4x.gz- man page for Wacom driver
prebuilt/32- Wacom X driver and its utility programs for XFree86 and X11R6/Xorg on x86 systems
prebuilt/64- Wacom X driver and its utility programs for XFree86 and X11R6/Xorg on x86-64 systems
src/util/wacdump.c- a simple program for displaying tablet event data directly using ncurses
src/util/xidump.c- a diagnostic program for displaying XInput event data
src/util/wacscrn.c- curses library for wacdump
src/util/wactablet.c- wacom tablet library for wacdump
src/util/wacusb.c- wacom USB protocol library for wacdump
src/util/wacserial.c- wacom serial protocol library for wacdump
src/util/wactablet.h- wacom tablet library for wacdump
src/util/wacusb.h- wacom USB protocol library for wacdump
src/util/wacserial.h- wacom serial protocol library for wacdump
src/util/xsetwacom.c- a command line configuration tool for Wacom X driver
src/util/wacomcfg.c- configuration option library for xsetwacom
src/util/wcmAction.c- keystroke and modifier encoding/decoding
src/util/wcmAction.h- keystroke routine definitions
src/include/Xwacom.h- configuration options for xsetwacom
src/2.4/wacom.c- replacement kernel driver for kernel older than 2.4.22 (tested on 2.4.18/19/20)
src/2.4/usbmouse.c- replacement kernel driver for kernel older than 2.4.22 (tested on 2.4.18/19/20), use only if needed
src/2.4/hid-core.c- replacement kernel driver for kernel older than 2.4.22 (tested on 2.4.18/19/20), use only if needed
src/2.4/evdev.c- replacement kernel driver for kernel older than 2.4.22 (tested on 2.4.18/19/20), use only if needed
src/2.4/mousedev.c- replacement kernel driver for kernel older than 2.4.22 (tested on 2.4.18/19/20), use only if needed
src/2.4/input.c- replacement kernel driver for kernel older than 2.4.22 (tested on 2.4.18/19/20), use only if needed
src/2.4.22/wacom.c- replacement kernel driver for kernel 2.4.22 or newer (tested on 2.4.22/23/24)
src/2.4.22/usbmouse.c- replacement kernel driver for kernel 2.4.22 or newer (tested on 2.4.22/23/24), use only if needed
src/2.4.22/hid-core.c- replacement kernel driver for kernel 2.4.22 or newer (tested on 2.4.22/23/24), use only if needed
src/2.4.22/evdev.c- replacement kernel driver for kernel 2.4.22 or newer (tested on 2.4.22/23/24), use only if needed
src/2.4.22/mousedev.c- replacement kernel driver for kernel 2.4.22 or newer (tested on 2.4.22/23/24), use only if needed
src/2.4.22/input.c- replacement kernel driver for kernel 2.4.22 or newer (tested on 2.4.22/23/24), use only if needed
src/2.4.30x86-64/wacom.c- replacement kernel driver for kernel 2.4.30 or newer (tested on 2.4.30 AMD 64bit system)
src/2.4.30x86-64/usbmouse.c- replacement kernel driver for kernel 2.4.30 or newer (tested on 2.4.30 AMD 64bit system), use only if needed
src/2.4.30x86-6/hid-core.c- replacement kernel driver for kernel 2.4.30 or newer (tested on 2.4.30 AMD 64bit system), use only if needed
src/2.4.30x86-64/evdev.c- replacement kernel driver for kernel 2.4.30 or newer (tested on 2.4.30 AMD 64bit system), use only if needed
src/2.4.30x86-64/mousedev.c- replacement kernel driver for kernel 2.4.30 or newer (tested on 2.4.30 AMD 64bit system), use only if needed
src/2.6.x/wacom.c- replacement kernel driver for kernel 2.6.x where x can be 8 to 10
src/2.6.x/wacom_sys.c- wacom kernel driver specific to each major kernel release, where x can be 11 to 19
src/2.6.x/wacom_wac.c- wacom kernel driver processes tablet specific information, where x can be 16 or 19
src/2.6.x/wacom.h- wacom kernel driver header specific to each major kernel release, where x can be 11 to 19
src/2.6.16/wacom_wac.h- part of wacom kernel driver header for tablet specific declaration and definitions
src/2.6.x/hid-core.c- replacement kernel driver for kernel 2.6.x where x can be 8 to 16, use only if needed
src/xdrv/xf86Wacom.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. Binary available in prebuilt directory.
src/xdrv/xf86Wacom.h- source for wacom_drv.o; requires XFree86/Xorg build environment to compile.
src/xdrv/wcmCommon.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. Common to USB and serial tablets
src/xdrv/wcmXCommand.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. APIs to xsetwacom.
src/xdrv/wcmCompat.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. XFree86 4.x support
src/xdrv/wcmConfig.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. Configuration setup
src/xdrv/wcmFilter.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. Raw data filters
src/xdrv/wcmFilter.h- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. Raw data filters
src/xdrv/wcmISDV4.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. General Tablet PC
src/xdrv/wcmSerial.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. Serial tablet support
src/xdrv/wcmSerial.h- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. Serial tablet support
src/xdrv/wcmUSB.c- source for wacom_drv.o; requires XFree86/Xorg build environment to compile. USB tablet support
src/wacomxi/wacomcpl-exec- a graphic configuration tool for wacom XFree86 driver
src/wacomxi/wacomxi.c- calibration library for xsetwacom
src/wacomxi/wacomxi.h- calibration library for xsetwacom
GPL- the GNU General Public License, in case you did not already have one lying around

Stable Packages by Version and Date:

FileDateComment
linuxwacom-0.8.0-3.tar.bz2-2008-05-23Support: kernels up to 2.6.25; Keystrokes for both buttons and expresskeys; New tablets: Bamboo series and Cintiq 12WX & 20WSX, and so much more that you can not afford to miss.
linuxwacom-0.7.8-3.tar.bz2-2007-08-15Supports new tablet, Bamboo. Provides prebuilt Wacom X driver and its utility programs for x86_32 and x86_64 systems. Adds many new xsetwacom options.
linuxwacom-0.7.6-4.tar.bz2-2006-12-01Updated xsetwacom and support kernel 2.6.17/18, Intuos3 4x6 and on-the-fly tablet rotation.
linuxwacom-0.7.4-3.tar.bz2-2006-06-19Supports kernels 2.6.15/16, 2 new Intuos3 (12x12 and 12x19), and DTF 521.
linuxwacom-0.7.2.tar.bz2-2005-12-21Updated configuration script and support kernel 2.6.13/14, Graphire4, PL710, DTF720, Intuos3 6x11 and Volito2 .
linuxwacom-0.7.0-1.tar.bz2-2005-09-23Updated wacomcpl and support 16 buttons for all tools.
linuxwacom-0.7.0-x86-64-1.tar.bz2-2005-09-23Updated wacomcpl and support 16 buttons for all tools.
linuxwacom-0.6.8.tar.bz2-2005-05-05Support Cintiq 21UX and kernel 2.6.11.
linuxwacom-0.6.6.tar.bz2-2004-12-01Build .ko locally and support kernel 2.6.10.
linuxwacom-0.6.4.tar.bz2-2004-08-06Updated wacusb.c and fixed USB tablet protocol V dual input bug.
linuxwacom-0.6.3.tar.bz2-2004-05-25Fixed tool on tablet and relative speed bugs.
linuxwacom-0.6.2.tar.bz2-2004-04-02Fixed DoubleSpeed, DoubleRadius, and TwinView issues.
linuxwacom-0.6.1.tar.bz2-2004-03-02added wacomcpl, support kernel 2.4.24 and 2.6.2/3
linuxwacom-0.6.0.tar.bz2-2004-02-04added wacomcpl, support kernel 2.4.22 and 2.6.0
linuxwacom-0.4.1.tar.gz-2003-03-22added xidump, checks for ncurses
linuxwacom-0.4.0.tar.gz-2003-01-31production release from 0.3.7-beta

Beta Packages by Version and Date:

FileDateComment
linuxwacom-0.8.1-4.tar.bz2-2008-09-01Support USB Tablet PC with and without touch. Support kernel 2.6.26
linuxwacom-0.7.9-11.tar.bz2-2008-04-11Support kernel 2.6.22 & 2.6.24. Temporary workaround for Xorg 7.3. Support Bamboo series and Cintiq 12WX & 20WSX. Updated wacomcpl for keystrokes. Support serial Tablet PC with touch.
linuxwacom-0.7.7-12.tar.bz2-2007-06-15Support Bamboo. Updated installer under prebuilt directory to install X driver as well as its associated utilities. Support non-overlapped multi-areas for same InputDevice. Support pad with button and keystroke events through xsetwacom
linuxwacom-0.7.5-4.tar.bz2-2006-09-29Support kernel 2.6.17/18, Intuos3 4x6, and tablet detach/attach as well as rotation while X running.
linuxwacom-0.7.3-1.tar.bz2-2006-04-07Support kernel 2.6.15/16, Intuos3 12x12 and 12x19.
linuxwacom-0.7.1-2.tar.bz2-2005-12-06Support kernel 2.6.13/14, Graphire4, PL710, DTF720, Intuos3 6x11 and Volito2.
linuxwacom-0.6.9.tar.bz2-2005-08-08Support tablet orentation rotation.
linuxwacom-0.6.9-x86-64.tar.bz2-2005-08-08Support x86-64 system.
linuxwacom-0.6.7.tar.bz2-2005-03-28Added Cintiq 21UX and kernel 2.6.11 support.
linuxwacom-0.6.5.tar.bz2-2004-11-05Added Intuos3 support.
linuxwacom-0.5.4-beta.tar.bz2-2003-12-22General Tablet PC support. 2.6.0 kernel support.
linuxwacom-0.5.3-beta.tar.gz-2003-11-12Added wacomcpl utility. 2.4.22 kernel support. TwinView support.
linuxwacom-0.5.2-beta.tar.gz-2003-07-10Fixed Intuos filter code. 2.5 kernel support. Minor bug fixes.
linuxwacom-0.5.1-beta.tar.gz-2003-06-15Completely refactored data path, configurability.
linuxwacom-0.5.0-beta.tar.gz-2003-02-12Updated PL code. Numerous tweaks.

2.3 - The Root Account

If you are comfortable with the root account, paths, the /sbin directory, and programs like modprobe, you can skip this section. This is largely to clarify some things for people who are new to Linux and get tripped up with the root account and paths. This is not meant to be a tutorial, so if this is over your head, I would recommend reading a book on Linux command line usage. All examples in this document assume the bash shell.

Many of the procedures in this document need root access, and the commands that are executed are located in places on the system that are not normally accessed by typical users. In order to run the modprobe command, for instance, you must have root access. Additionally, if the /sbin directory which contains modprobe does not appear in your path, you must specify the full pathname, /sbin/modprobe, to run the command. Here is an example of the problem, followed by solutions.

[jej@ayukawa jej]$ modprobe foo
bash: modprobe: command not found
[jej@ayukawa jej]$ locate modprobe
/sbin/modprobe
[jej@ayukawa jej]$ echo $PATH
/bin:/usr/bin: ... :/home/jej/bin
Normal users do not have /sbin in their path, so running modprobe directly fails. Running the program using the full pathname (/sbin/modprobe) will solve this, as will adding /sbin to the path. But there is another problem, as we will see:
[jej@ayukawa jej]$ /sbin/modprobe foo
foo.o: create_module: Operation not permitted
Normal users are not allowed to run this command. For that, we need to be root. The su command stands for "substitute user" since it can be used to become any user on the system, but it is generally known by the incorrect but very memorable mnemonic "superuser."
[jej@ayukawa jej]$ su
Password:
[root@ayukawa jej]# whoami
root

Note the change to the root account, and the additional change from $ to # on the prompt. I maintain this convention in all the examples in this document, so if you get an "access denied" error, check the prompt. You probably need to be root.

Now that we have root access, is /sbin in our path? No. We have only been granted the privileges of root; we are not really in the root account's environment. Most notably, the home directory ($HOME) changes, but the path ($PATH) stays the same. Thus, becoming root is not sufficient to run modprobe without the full pathname, but does solve the access problem.

[root@ayukawa jej]# modprobe foo
bash: modprobe: command not found
[root@ayukawa jej]# export PATH=$PATH:/sbin
[root@ayukawa jej]# modprobe foo
[root@ayukawa jej]#

In this example, the user adds the /sbin directory to the path and can run modprobe normally. export is a bash shell command that changes aspects of your environment; in this case, /sbin is appended to the path. In the highly unlikely event that you are using a different shell, which for novice users seems unwise to me, you would need to use a different command. Redhat, Mandrake, and similar distributions all use bash by default, so it is unlikely that you would be using anything else.

At any rate, changing the path is a reasonably good solution, if you can remember the syntax of the export command.

Another approach to this problem is to do more than just "be root," but to run in the root account's environment. This is accomplished with the "su -" command and provides you with root's normal path, including the /sbin directory. The unfortunate side-effect is that you wind up in root's home directory, requiring you to cd back to the original directory in which you were working.

[jej@ayukawa src]$ pwd
/home/jej/src/linuxwacom/src
[jej@ayukawa src]$ su -
[root@ayukawa root]# cd /home/jej/src/linuxwacom/src
[root@ayukawa src]# echo $PATH
/bin:/sbin:/usr/bin: ... :/root/bin

Here, the user starts in the package's src directory, but upon invoking "su -" is magically shuttled off to root's home directory. A quick cd back to the package directory and all is better. And, as demonstrated above, the path conveniently contains /sbin.

So that leaves you with two immediate options, and one potential long-term option:

Option One: Become root and add /sbin to the path.

[jej@ayukawa src]$ su
[jej@ayukawa src]# export PATH=$PATH:/sbin
Option Two: Become root using root's environment and cd back.
[jej@ayukawa src]$ su -
[root@ayukawa root]# cd /home/jej/src/linuxwacom/src
Option Three (recommended): Add /sbin to your personal account's path
[jej@ayukawa src]$ export PATH=$PATH:/sbin
[jej@ayukawa src]$ su
[root@ayukawa src]# echo $PATH
/bin:/usr/bin: ... :/home/jej/bin:/sbin

By adding the path early in the session, it becomes available every time you su to root later on. You could also add the export command to the .bash_profile file in your home directory and have the path set automatically when you log in.

To exit from the root account and return to your normal account, you can use the exit command or type Ctrl-D on an empty line.

[root@ayukawa src]# exit
[jej@ayukawa src]$

If any of this is not explained clearly, drop me a line and let me know where you got stuck. I'd be happy to clarify directly and update this page for future readers.

2.4 - Install from Prebuilt

We have created 2 sets of prebuilt Wacom X driver and its utility programs under linuxwacom-0.8.0-3/prebuilt; one for x86-32 systems, the other for x86-64 systems.

If you don't plan to change anything in the driver, following steps will install the prebuilt files for you:

[jej@ayukawa jej]$ cd linuxwacom-0.8.0-3/prebuilt
[jej@ayukawa prebuilt]$ su
[jej@ayukawa prebuilt]# ./uninstall
[jej@ayukawa prebuilt]# ./install

Serial tablet (most Tablet PCs are serial) users can skip the rest sections and go to Using wacdump page for details on viewing the tablet output now.

If you use an older USB tablet and your running kernel was released 6 months later than your tablet was first seen in market, you most probably can skip next section of this chapter and the whole chapter 4 too. If you would like to make certain, continue to next section.

2.5 - Configuring the Package

This section describes how to configure the package. You can run the configure script now as the samples below demonstrate, or later when you reach the section of the document that explains what specifically needs to be configured and why. This page is provided largely as a reference.

By default, xidump, wacdump, xsetwacom, wacom_drv.o, and wacomcpl are built. Additional options include replacement of kernel drivers for hid, mousedev, evdev, and usbmouse as well as building the XFree86/Xorg driver from scratch. Lastly, remember that for every --enable option, there is also an equivalent --disable option.

The configuration options are listed on this page. You can also see the online list by issuing ./configure -help under linuxwacom's base directory.

Building Kernel Modules - USB Only

In order to build kernel modules, you will need the kernel source installed on your system. If you are running on Redhat or Mandrake, you can get it by installing the kernel-source RPM.

The kernel source directory is assumed to be in /usr/src/linux-2.4, /usr/src/linux, /usr/src/linux-2.6, /usr/src/linux-`uname -r`, or /lib/modules/`uname -r`/source. If your kernel sources are elsewhere, you will need to specify the directory with the --with-kernel option described below.

For older 2.6 kernels, you need to configure the kernel modules (wacom and hid) under your kernel source directory before configuring linuxwacom.

Note, for kernel 2.6.18 and later, no need to build hid any more. Refer to Testing Tablet Detection to see if you need to build hid or not.

Module Versioning - USB Only

The script attempts to discover if the kernel is using module versioning by detecting the presence of version numbers in the hid.o module of the currently active kernel. Recent package versions also check for hid.o.gz which exist on Mandrake systems. The configure script may not be able to determine if kernel module versioning should be enabled or not, in which case it will say "unknown, assuming no."

If module versioning is disabled when it should be enabled, depmod will complain about missing symbols but otherwise, things will probably work fine. If it is enabled when it should be disabled, the code may not compile, and it almost certainly will not load properly. If the configure script fails to determine the correct value, the default action of disabling module versioning is the better choice, and you can allows enable it manually and rebuild if depmod complains.

The XFree86/Xorg XInput Driver - USB and Serial

Generally, you will not need to build wacom_drv.o since it ships in binary form in the prebuilt directory. There are prebuilt binaries for XFree86 and Xorg corresponding to x86 and x86-64 systems, respectively. If no one works for you, building from source may be your only option. See the Building wacom_drv.o from Scratch page for more information.

Library Dependencies - ncurses and XLib

Various utilities in the linuxwacom package require not only specific libraries, but their development header files as well. The ncurses package is one such example. Most distributions install the ncurses libraries by default, but the header files are often located in a separate package. You will need both. On Redhat 8.0, they can be found in the ncurses-devel RPM.

Similarly, if you wish to test your tablet using xidump to view XFree86/Xorg input events, you will need the XFree86/Xorg development headers. On Redhat/Fedore Core, they are contained in the XFree86-devel/xorg-sdk package.

If any packages are missing, the configuration will warn you and disable building any programs that depend on them.

Processor Type

The processor type is determined by the script and used to build the kernel modules. If it guesses incorrectly, or you would prefer a different setting, use the --with-arch option described below.

Linux Specific Features

The Linux wacom driver uses the Linux input subsystem, as does the USB portions of the XFree86/Xorg driver. Consequently, if you are building on a non-Linux system, the USB code will not work for you. This is detected, and a comment to that effect is added to the configuration summary. I recognize that FreeBSD and similar systems have USB support; however, until someone can bridge the gap between the FreeBSD kernel and the XFree86/X.org driver, the problem is largely unsolved. Contributions are of course welcome. The Linux-specific features can be enabled/disabled using the --with-linux argument.

Configuration Options

The following options are provided as reference. Normally, you will only need a few of these options. Some obscure systems or you want to build a driver for another platform may need all of them. Each section of the document identifies which options are needed and when.

OptionDefault Builds
--enable-wacomno wacom.o kernel driver
--enable-wacdumpyes wacdump LinuxInput event monitor
--enable-xidumpyes xidump XInput event monitor
--enable-libwacomcfgyes libwacomcfg Dynamic library for xsetwacom
--enable-libwacomxiyes libwacomxi Dynamic library for wacomcpl
--enable-xsetwacomyes xsetwacom XFree86 wacom driver configuration comannd
--enable-hidno hid.o replacement kernel driver (not normally needed)
--enable-usbmouseno usbmouse.o replacement kernel driver (not normally needed)
--enable-evdevno evdev.o replacement kernel driver (not normally needed)
--enable-mousedevno mousedev.o replacement kernel driver (not normally needed)
--enable-wacomdrvyes wacom_drv.o XFree86 driver (binary is available in prebuilt directory)
--enable-modver=yes|nobest guess enables kernel module versioning; usually guesses correctly, but can be enabled or disabled if not
--with-kernel=dirbest guess Specifies the kernel source directory if configure cannot guess correctly.
--with-x-src=dirbest guess Specifies the X driver build source directory
--with-xorg-sdk=dirbest guess Specifies the Xorg SDK directory
--with-tcl=dir/usr Specifies the tcl directory. The tcl's include and lib directories should be under this directory. If tcl.h is not in dir/include, it will be searched under dir directly
--with-tk=dir/usr Specifies the tk directory. If tk is under the same directory as tcl, this option can be eliminated. Otherwise, the tk's include and lib directories should be under this directory. If tk.h is not in dir/include, it will be searched under dir directly
--with-arch=archbest guess Specifies the architecture if configure guesses incorrectly
--enable-xserver64=yes|nobest guess enables 64-bit X server. You probably need to define xlib directory by adding option --with-xlib=xlib-dir so compiler can link with the right Xlib.
--with-linux=yes|nobest guess Specifies if compiled on a Linux system; USB code is Linux specific
--with-xlib=yes|nobest guess Specifies if building xlib-based programs; xidump uses XInput headers
--enable-dlloader=yes|nobest guess Enable dlloader build option and built wacom_drv.so instead of wacom_drv.o
--with-xmoduledir=dirbest guess Specify wacom_drv path explicitly. Implies --enable-dlloader

Configuration Samples

Here is a sample output of the script on a Fedora Core 5 system:

[jej@ayukawa linuxwacom]$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
checking for arch type... i386-redhat-linux
checking for kernel type... Linux
checking for linux-based kernel... yes
checking for kernel sources... /lib/modules/2.6.20-1.2320.fc5/source
checking for kernel module support... yes
checking for kernel module versioning... yes
checking for valid Xorg SDK... ok
checking for X... libraries , headers
...
checking for X lib directory... found
checking for tclsh... /usr/bin/tclsh
checking for tcl version... 8.4
checking for tcl header files... /usr/include/
checking for tk header files... found
checking ncurses.h usability... yes
checking ncurses.h presence... yes
checking for ncurses.h... yes
...
----------------------------------------
  BUILD ENVIRONMENT:
       architecture - i386-redhat-linux
       linux kernel - yes 2.6.19
  module versioning - yes -DCONFIG_MODVERSIONS -DMODVERSIONS -include /lib/modules/2.6.20-1.2320.fc5/source/include/linux/modversions.h
      kernel source - yes /lib/modules/2.6.20-1.2320.fc5/source
           Xorg SDK - yes /usr/include/xorg
          XSERVER64 - no 
           dlloader - yes 
               XLib - yes /usr/lib
                TCL - yes /usr/include
                 TK - yes /usr/include
            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
  wacom*_drv quirks - libc-wrapper key-events dixScreenOrigins
----------------------------------------

If the configure script fails to find something that it is looking for, it may disable some options that you previously enabled on the command-line. If this happens, check the output for a warning like the following:

checking for valid XFree86/X.org build environment... xf86Version.h missing
Tried /usr/programs/Xserver/hw/xfree86 and /usr/xc/programs/Xserver/hw/xfree86
...
***
*** WARNING:
*** Unable to compile wacom_drv.{o,so}
*** without Xorg SDK or XFree86 build environment
*** wacom_drv.o will not be built
***

In this particular case, the X driver was enabled. The --with-x-src option was not specified. And the configure can not find the header file, xf86Version.h, under any of the predefined paths. Without the build environment, the module cannot be compiled and was consequently disabled.

The following sample command-line will build everything but wacdump while disabling module versioning. It also has a user-specified kernel source directory:

[jej@ayukawa linuxwacom]$ ./configure --enable-wacom \
	--enable-hid --enable-usbmouse --enable-evdev \
	--enable-moudedev --enable-input --disable-modver \
	--with-x-src=/usr/src/redhat/BUILD/XFree86-4.2.0 \
	--with-kernel=/home/jej/src/linux \
	--disable-wacdump --with-tcl=/usr/local/ActiveTcl
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
checking for processor type... i686
checking for kernel module versioning... yes
checking for kernel sources... /usr/src/linux-2.4
checking for valid XFree86 build environment... ok
...
----------------------------------------
  BUILD ENVIRONMENT:
       architecture - i686
       linux kernel - yes 2.4
  module versioning - no
      kernel source - yes /home/jej/src/linux
            XFree86 - yes /usr/src/redhat/BUILD/XFree86-4.2.0
               XLib - yes /usr/X11R6/lib
                TCL - yes /usr/local/ActiveTcl
                 TK - yes /usr/local/ActiveTcl
            ncurses - yes

  BUILD OPTIONS:
            wacom.o - yes
            wacdump - no
             xidump - yes
        libwacomcfg - yes
         libwacomxi - yes
          xsetwacom - yes
              hid.o - yes
         usbmouse.o - yes
            evdev.o - yes
         mousedev.o - yes
            input.o - yes
        tabletdev.o - no
       wacom_drv.so - no
        wacom_drv.o - yes
  wacom*_drv quirks - libc-wrapper key-events 
----------------------------------------

Notice that the configure script guessed module versioning was enabled by default, but was disabled by the command-line option --disable-modver. Similarly, the wacdump program which is enabled by default was also disabled. All the kernel modules and the XFree86 wacom driver are enabled.

Here is another sample from Red Hat Enterprise Linux ES v.4:

[jej@ayukawa linuxwacom-x86-64]$ ./configure \
		--enable-wacom --enable-hid \
		--with-xf86=/home/jej/Desktop/X11R6.8 \
		--with-tcl=/usr/local/ActiveTcl \
		--enable-xserver64 \
		--with-xlib=/usr/X11R6/lib64 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
...
checking build system type... x86_64-redhat-linux-gnu
checking host system type... x86_64-redhat-linux-gnu
checking for ld used by g++... /usr/bin/ld -m elf_x86_64
...

----------------------------------------
  BUILD ENVIRONMENT:
       architecture - x86-64
       linux kernel - yes 2.6.9
  module versioning - yes -DCONFIG_MODVERSIONS -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h
      kernel source - yes /usr/src/linux
            XFree86 - yes /home/jej/Desktop/X11R6.8
          XSERVER64 - yes
               XLib - yes /usr/X11R6/lib64
                TCL - yes /usr/local/ActiveTcl
                 TK - yes /usr/local/ActiveTcl
            ncurses - yes

  BUILD OPTIONS:
            wacom.o - yes
            wacdump - yes
             xidump - yes
        libwacomcfg - yes
         libwacomxi - yes
          xsetwacom - yes
              hid.o - yes
         usbmouse.o - no
            evdev.o - no
         mousedev.o - no
            input.o - no
        tabletdev.o - no
       wacom_drv.so - no
        wacom_drv.o - yes
  wacom*_drv quirks - libc-wrapper key-events
----------------------------------------

3.0 - The USB Kernel Driver

Serial tablet users rejoice: you can skip this entire section. Please go to the Using wacdump page for details on viewing the tablet output. USB users stay put; we need to tweak your kernel.

Kernel modules must be recompiled for each new kernel so I can't just provide binaries. By the time you read this, my present kernel will be entirely out of date with yours.

In any event, many new features are available in the latest drivers from the Linux Wacom Project, so I wholly recommend using them over the drivers provided by your standard distribution. Rest assured, continuous efforts are being made to get these changes merged back into the Linux kernel. However, the changes can normally only merged into the next kernel release, instead of the current one.

For those who don't like upgrading kernels, here is a safe statement: if you are not using a newly released tablet model and you are running a recently released kernel version, chances are that you don't need to update your kernel driver from linuxwacom.

Note: If your system is running a 2.4 kernel and you don't have any application required to run on kernel 2.4, upgrading to version 2.6 (preferablely 2.6.18 or later) may save you the steps to update wacom kernel related modules.

3.1 - Testing Tablet Detection

In this section we will determine which driver, if any, claims control over the tablet. There are at least three drivers that are interested:
1) (usb)hid.o which may think it is an HID device,
2) usbmouse.o which may think it is an HID mouse (for kernel 2.4), and
3) the wacom driver which should identify the tablet as its own.

To see which driver is driving the tablet, issuing more /proc/bus/usb/devices should list something similiar to the following:

[jej@ayukawa wacom]$more /proc/bus/usb/devices
T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=056a ProdID=0042 Rev= 1.15
S:  Manufacturer=Tablet
S:  Product=XD-0608-U
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=140mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=wacom
E:  Ad=81(I) Atr=03(Int.) MxPS=  10 Ivl=5ms

where Vendor=056a indicates a Wacom device. Driver=wacom means Wacom driver is in control of the tablet. If you see anything other than wacom after Driver=, at least hid-core.c needs to be updated.

On newer 2.6 systems, more /proc/bus/input/devices gives you

[jej@ayukawa wacom]$more /proc/bus/input/devices
I: Bus=0003 Vendor=056a Product=0042 Version=1.15
N: Name="Wacom Intuos2 6x8"
P: Phys=usb-0000:00:1d.1-2/input0
H: Handlers=event3
B: EV=1f
B: KEY=1cff 0 1f00ff 0 0 0 0 0 0 0 0
B: REL=100
B: ABS=f00017b
B: MSC=1

where, again, Vendor=056a indicates a Wacom device. Name="Wacom Intuos2 6x8" means an Intuos2 6x8 tablet reported to /dev/input/event3. If there is no Wacom after Name=, you need to update wacom.c.

On kernel 2.4 or older 2.6 systems, unplug then replug your tablet after issuing tail -f /var/log/messages, you should see a flurry of activity. The exact output depends a lot on your particular kernel and distribution.

This is Redhat 8.0 (2.4.18-17.8.0):
[jej@ayukawa usb]# tail /var/log/messages Oct 11 21:26:11 ayukawa kernel: hub.c: USB new device connect on bus2/2, assigned device number 2 Oct 11 21:26:11 ayukawa kernel: input0: Wacom Intuos2 12x12 on usb2:2.0 Oct 11 21:26:11 ayukawakernel: wacom.c: Setting tablet report for tablet data Oct 11 21:26:11 ayukawa kernel: wacom.c: input1: Wacom Intuos2 12x12 on usb1:6.0 Oct 11 21:26:14 ayukawa /etc/hotplug/usb.agent: Setup wacom hid for USB product 56a/44/115 Oct 11 21:26:14 ayukawa /etc/hotplug/usb.agent: Setup mousedev for USB product 56a/44/115
And here it is again on Redhat 7.2 (2.4.18-17.7.x):
[jej@sasami root]# tail /var/log/messages Oct 11 21:28:38 sasami kernel: hub.c: USB new device connect on bus1/1, assigned device number 2 Oct 11 21:28:38 sasami kernel: input0: Wacom Intuos2 12x12 on usb1:2.0 Oct 11 21:28:39 sasami kernel: usb.c: registered new driver hiddev Oct 11 21:28:39 sasami kernel: usb.c: registered new driver hid Oct 11 21:28:39 sasami kernel: hid-core.c: v1.8.1 Andreas Gal, Vojtech Pavlik <vojtech@suse.cz> Oct 11 21:28:39 sasami kernel: hid-core.c: USB HID support drivers Oct 11 21:28:39 sasami kernel: mice: PS/2 mouse device common for all mice

If all went well like above, the USB device was successfully detected and handled by the wacom driver. This presumably means that information like pressure and tilt will be received on /dev/input/event0. You are ready to configure the X driver Downloading the Code.

If instead you got any of the following lines in your log, the wacom driver did not get control. Either hid or usbmouse did.

	input0,hiddev0: USB HID v1.00 Mouse [Tablet XD-1212-U] on usb1:5.0
	input0: Tablet XD-1212-U on usb1:5.0

3.2 - Updated wacom.c

The wacom.c driver that is available in linuxwacom-0.8.0-3.tar.bz2 supports Bamboo, which will be available in kernel version 2.6.23.

The driver also added a few new xsetwacom commands that help you change X driver settings from user space.

On newer kernel versions, 2.6.8 or later, you can link Wacom USB tablet to "/dev/input/wacom". It can be done by adding the following rules in /etc/udev/rules.d/10-wacom.rules. Some distributions use a different number for the file name. Please look for proper one with wacom under /etc/udev/rules.d.
KERNEL=="event*", SYSFS{idVendor}=="056a", NAME="input/%k", SYMLINK="input/wacom" 

Some Fedora Core and RHEL releases use SYSFS{manufacturer}="WACOM" instead of SYSFS{idVendor}=="056a" in the file, which is wrong. You need to modify it. Some can not translate NAME="input/%k". You need to remove it.

If you have more than one Wacom tablets plugged on the system, specify the link with product id is recommanded (refer to Testing Tablet Detection to see the ways to get your tablet's product id). Below is an example from Debian GNU/Linux distribution:

# udev rules for wacom tablets.
# These rules were compiled for the Debian GNU/Linux distribution,
# but others may, and indeed are encouraged to, use them also.
#
# Should you do so, PLEASE CO-ORDINATE ANY CHANGES OR ADDITIONS
# of new devices with Ron  so that we can try
# to present users with with a standard set of device nodes
# which they can rely on across the board.

# Convenience link for the common case of a single tablet.
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYMLINK="input/wacom"

# You probably won't need this IMPORT rule, since an earlier file is
# likely to have already done it, but the rule that follows it does
# depend on that having happened to set ID_PATH.
# IMPORT{program}="path_id %p"

# Port specific link for users of multiple tablets of the same type.
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", ENV{ID_PATH}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-wacom"

# Type-named links for multiple tablets.  If you want to use multiple
# tablets of the _same_ type, you will probably need to use the links
# from /dev/input/by-path to identify which is plugged into what usb
# port.  For different types though, just pick your links from the
# list below.
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0000", SYMLINK+="input/tablet-penpartner"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0010", SYMLINK+="input/tablet-graphire"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0011", SYMLINK+="input/tablet-graphire2-4x5"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0012", SYMLINK+="input/tablet-graphire2-5x7"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0013", SYMLINK+="input/tablet-graphire3"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0014", SYMLINK+="input/tablet-graphire3-6x8"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0015", SYMLINK+="input/tablet-graphire4-4x5"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0016", SYMLINK+="input/tablet-graphire4-6x8"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0060", SYMLINK+="input/tablet-volito"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0061", SYMLINK+="input/tablet-penstation2"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0062", SYMLINK+="input/tablet-volito2-4x5"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0063", SYMLINK+="input/tablet-volito2-2x3"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0064", SYMLINK+="input/tablet-penpartner2"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0065", SYMLINK+="input/tablet-bamboo"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0020", SYMLINK+="input/tablet-intuos-4x5"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0021", SYMLINK+="input/tablet-intuos-6x8"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0022", SYMLINK+="input/tablet-intuos-9x12"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0023", SYMLINK+="input/tablet-intuos-12x12"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0024", SYMLINK+="input/tablet-intuos-12x18"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0030", SYMLINK+="input/tablet-pl400"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0031", SYMLINK+="input/tablet-pl500"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0032", SYMLINK+="input/tablet-pl600"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0033", SYMLINK+="input/tablet-pl600sx"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0034", SYMLINK+="input/tablet-pl550"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0035", SYMLINK+="input/tablet-pl800"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0037", SYMLINK+="input/tablet-pl700"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0038", SYMLINK+="input/tablet-pl510"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0039", SYMLINK+="input/tablet-dtu710"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="00c0", SYMLINK+="input/tablet-dtf521"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="00c4", SYMLINK+="input/tablet-dtf720"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0003", SYMLINK+="input/tablet-cintiq_partner"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0041", SYMLINK+="input/tablet-intuos2-4x5"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0042", SYMLINK+="input/tablet-intuos2-6x8"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0043", SYMLINK+="input/tablet-intuos2-9x12"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0044", SYMLINK+="input/tablet-intuos2-12x12"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0045", SYMLINK+="input/tablet-intuos2-12x18"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="00b0", SYMLINK+="input/tablet-intuos3-4x5"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="00b1", SYMLINK+="input/tablet-intuos3-6x8"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="00b2", SYMLINK+="input/tablet-intuos3-9x12"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="00b3", SYMLINK+="input/tablet-intuos3-12x12"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="00b4", SYMLINK+="input/tablet-intuos3-12x19"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="00b5", SYMLINK+="input/tablet-intuos3-6x11"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="003f", SYMLINK+="input/tablet-cintiq21ux"
KERNEL=="event[0-9]*", SYSFS{idVendor}=="056a", SYSFS{idProduct}=="0047", SYMLINK+="input/tablet-intuos2-6x8a"
Newer Mandriva Linux (Mandriva 2007 Spring and later) has an application called mousedrake which takes care of the setup and configuration of linuxwacom driver. If you use Mandriva Linux and you see InputDevice sections for Wacom device in your Xorg.conf, chances are your system is ready for you to draw.

3.3 - Building wacom.c (for kernel 2.4)

To build the wacom.o kernel module, you need configure the package with --enable-wacom option. The kernel sources are required as described on the
configuration page. Here's how the configuration should generally look:
[jej@ayukawa linuxwacom]$ ./configure --enable-wacom
...
checking for valid kernel source tree... ok
...
----------------------------------------
  BUILD ENVIRONMENT:
       architecture - i686
       linux kernel - yes 2.4
  module versioning - yes
             kernel - yes /usr/src/linux
            XFree86 - no
               XLib - yes /usr/X11R6
                TCL - yes /usr
                 TK - yes /usr
            ncurses - yes
                GTK - 2.0.6

  BUILD OPTIONS:
            wacom.o - yes
            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.o - no
----------------------------------------

As shown above, the kernel directory was detected and the wacom.o module will be built. If the kernel option shows "no", you will need to specify the --with-kernel option and the correct directory.

To build the driver, just run make.

The output will be a file called wacom.o. It is located in the linuxwacom package's src/2.4 directory for versions older than 2.4.22. For versions 2.4.22 or newer, it is in src/2.4.22 directory. This is your replacement driver.

3.4 - Building wacom.c (for kernel 2.6)

To build the wacom.ko kernel module, you need to configure wacom as a kernel module under your kernel source tree first. The kernel sources are required as described on the configuration page.

Then, you need to configure the package with --enable-wacom option. Here's how the configuration should generally look:

[jej@ayukawa linuxwacom]$ ./configure --enable-wacom
...
checking for valid kernel source tree... ok
...
----------------------------------------
  BUILD ENVIRONMENT:
       architecture - i686
       linux kernel - yes 2.6.9
  module versioning - yes
             kernel - yes /usr/src/linux
            XFree86 - no
               XLib - yes /usr/X11R6
                TCL - yes /usr
                 TK - yes /usr
            ncurses - yes
                GTK - 2.0.6

  BUILD OPTIONS:
            wacom.o - yes
            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.o - no
----------------------------------------

As shown above, the kernel directory was detected and the wacom.o module will be built. If the kernel option shows "no", you will need to specify the --with-kernel option and the correct directory.

For those who feel comfortable to build everything from the source tree, please skip the make and install steps below. Scroll down to the end of this page to see the steps with light blue background.

To build the driver, just run make.

If everything works properly, you'll see the following from the make:

[jej@ayukawa linuxwacom]$ make
...
Making all in 2.6.9
make[3]: Entering directory `/home/jej/linuxwacom/src/2.6.9'
    Building linuxwacom drivers for 2.6 kernel.
make -C /usr/src/linux M=/home/jej/linuxwacom/src/2.6.9
make[4]: Entering directory `/home/jej/linux-2.6.9'
  LD      /home/jej/linuxwacom/src/2.6.9/built-in.o
  CC [M]  /home/jej/linuxwacom/src/2.6.9/wacom.o
  Building modules, stage 2.
  MODPOST
  CC      /home/jej/linuxwacom/src/2.6.9/wacom.mod.o
  LD [M]  /home/jej/linuxwacom/src/2.6.9/wacom.ko
make[4]: Leaving directory `/usr/src/linux'
make[3]: Leaving directory `/home/jej/linuxwacom/src/2.6.9'
...

This part is for those who want to manually build the wacom kernel driver in source tree. If you already followed the steps above, you can move on to next page.

Please backup wacom.c in your kernel tree first. Then copy wacom.c (or wacom_wac.c, wacom_wac.h, wacom_sys.c, and wacom.h if defined) from the related linuxwacom directory to the source tree (if 4 files were copies, you need to add wacom-objs := wacom_sys.o wacom_wac.o to the Makefile under your kernel source input directory) and rebuild the kernel. An example for kernel 2.6.9 is as following:

 	 
	 [jej@ayukawa linuxwacom]$ cp /usr/src/linux/drivers/usb/input/wacom.c /usr/src/linux/drivers/usb/input/wacom.c.2.6.9 	 
	 [jej@ayukawa linuxwacom]$ cp src/2.6.9/wacom.c /usr/src/linux/drivers/usb/input/ 	 
	 [jej@ayukawa linuxwacom]$ cd /usr/src/linux 	 
	 [jej@ayukawa linux]$ make 	 
	 [jej@ayukawa linux]$ su 	 
	 [jej@ayukawa linux]#make install 	 
	 [jej@ayukawa linux]#make modules_install 	 
	 [jej@ayukawa linux]#reboot 	 
	 

3.5 - Testing If wacom.(k)o Will Load

Before we install the wacom driver, we need to test that it will load properly. We do this by loading the driver manually. We will also need to be root to do this.

WARNING: there is a small chance that this will bomb your kernel, so we run sync to write all the stale buffers to the disk. People using ext3 have little to worry about, but it's always good to be prepared for the worst. At the very least, save your work.

[root@ayukawa linuxwacom]# sync

From the package's associated kernel directory, we unload any previous modules and load the new one. The following example is from a kernel 2.4.22 system.


For Kernel 2.6.x, replace wacom.o with wacom.ko where it is used.

Kernel 2.6.11 and 2.6.12 are in src/2.6.11. Kernels 2.6.15 and 2.6.17 are handled in src/2.6.16.

[root@ayukawa linuxwacom]# cd src/2.4.22
[root@ayukawa 2.4.22]# /sbin/rmmod wacom
[root@ayukawa 2.4.22]# /sbin/insmod ./wacom.o      # for those about to rock, we salute you.

Well, if you did not bomb, then good. And if you did, well, sorry. So far, we have not had any reports of this happening, so please send in yours.

Incidentally, if you run "/sbin/insmod wacom.o" and happen to be in the wrong directory, the old driver reloads, sometimes without warning. I therefore changed this to read "/sbin/insmod ./wacom.o" which seems to prevent this from happening. To be certain, you can check the log file for the correct version number.

[root@ayukawa src]# tail /var/log/messages
Oct 11 20:34:41 ayukawa kernel: usb.c: registered new driver wacom
Oct 11 20:34:41 ayukawa kernel: Reporting max 30480, 31680
Oct 11 20:34:41 ayukawa kernel: wacom.c: Setting tablet report for tablet data
Oct 11 20:34:41 ayukawa kernel: input0: Wacom Intuos2 12x12 on usb2:3.0
Oct 11 20:34:41 ayukawa kernel: wacom.c: $1.43-0.8.0-3 Vojtech Pavlik <vojtech@suse.cz>
Oct 11 20:34:41 ayukawa kernel: wacom.c: USB Wacom Graphire and Wacom Intuos tablet driver

The important detail is the version number. A version number like "1.46" is an original kernel version and not from the linuxwacom package. The correct version should also have the -j#.# or -pc#.# portion as well. This is to help differentiate between the stock kernel driver and those available from the Linux Wacom Project.

If you get errors inserting the module, then you may need to reconfigure and build with module versioning disabled. If it loads without a hitch, move on to the next part.

3.6 - Installing wacom.(k)o

For Kernel 2.4.x, replace wacom.ko with wacom.o where it is used.

To install or not to install, that is the question. Since the driver is in memory, you can pretty much use it this way throughout the rest of this document. Anywhere you see "modprobe wacom", you'll instead need to "insmod ./wacom.ko". You'll also need to be careful that you are in the package's src directory. If you instead use the less-specific command "insmod wacom.ko" from a directory other than the package's src directory, insmod will load the driver from the kernel modules directory instead. The result is that you'll be using the wrong driver.

Why would you not install the driver? Well, for one, you may be building a driver against a wrong kernel source, and if the system crashes (you get an Oops or things come unglued in other ways), it would be nice to reboot and have the original drivers load instead.

When should I install the driver? When you're comfortable that the driver will not crash your system. If you really know what you're doing, just load the drivers manually like in the previous section Testing If wacom.(k)o Will Load.

On some distributions, Mandriva (a.k.a Mandrake) included, the wacom.ko driver that appears in the kernel modules directory appears to be compressed. If you cannot find wacom.ko using the method below, try locating wacom.ko.gz instead. People who encountered this problem were able to run gzip on the module and copy that instead.

Installing the driver requires knowing where it belongs. A little research will help here. By using the locate command, you can find all copies of the original driver on the computer.

jej@ayukawa wacom]$ locate wacom.ko
/lib/modules/2.6.17-1.2157_FC5/kernel/drivers/usb/input/wacom.ko
/lib/modules/2.6.17-1.2174_FC5/kernel/drivers/usb/input/wacom.ko

[jej@ayukawa wacom]$ uname -r
2.6.17-1.2157_FC5
On this computer, there are two kernels installed. uname identifies the currently active kernel as 2.6.17-1.2157_FC5. The correct driver to replace is therefore at /lib/modules/2.6.17-1.2157_FC5/kernel/drivers/usb/input/wacom.ko. You will need to be root to replace this file, and it is a very good idea to make a backup copy.
[jej@ayukawa wacom]$ su -
[jej@ayukawa root]# cd /lib/modules/2.6.17-1.2157_FC5/kernel/drivers/usb/input
[jej@ayukawa usb]# cp wacom.ko /home/jej/linuxwacom/src/2.6.16/wacom_old.ko
[jej@ayukawa usb]# cp /home/jej/linuxwacom/src/2.6.16/wacom.ko wacom.ko
Here, I've saved the original to wacom_old.ko and copied my new driver over it. You should substitute directory names as appropriate.

NOTE: Don't leave the backup copy in the same directory as the original. depmod will treat both as valid drivers, regardless of their names. Copy the original somewhere outside of the kernel module directory to ensure that this does not happen. In at least one case, the backup driver was loaded instead of the new one due to a curious dependency issue.

Finally, it is always a good thing to update the module dependencies. This is where you find out if the module was compiled without kernel module versioning. The following command, even if it generates errors is relatively benign. If it fails, then there is no harm done. It just means that you will have to load modules in the correct order since the system will not be able to guess for you.

[jej@ayukawa usb]# depmod -e

If you get no errors and no output, everything is fine, and the module was compiled, linked, and installed properly. If you received unresolved symbols like usb_set_idle or printk, then you need to reconfigure with module versioning enabled and recompile.

Here is an example from a 2.6.12 system on Mandriva.

jej@ayukawa wacom]$ locate wacom.ko.gz
/lib/modules/2.6.12-12mdksmp/kernel/drivers/usb/input/wacom.ko.gz
/lib/modules/2.6.12-12mdksmp/kernel/drivers/usb/input/wacom.ko.gz

[jej@ayukawa wacom]$ uname -r
2.6.12-12mdksmp

3.7 - Loading the wacom Driver

For Kernel 2.6.x, replace wacom.o with wacom.ko where it is used.

If you have installed the driver, now is the time to test whether it will load when needed. If you have not installed it, but are instead using insmod, substitute insmod mydir/src/wacom.o where you see modprobe wacom below. It is important that you use the correct wacom.o file, the one you just built, since insmod may load the old driver if it cannot find the one you have specified.

[jej@ayukawa usb]# rmmod wacom
[jej@ayukawa usb]# modprobe usb-uhci      (or usb-ohci)
[jej@ayukawa usb]# modprobe input
[jej@ayukawa usb]# modprobe mousedev
[jej@ayukawa usb]# modprobe wacom         (or insmod mydir/src/wacom.o)
[jej@ayukawa usb]# modprobe evdev

Check the system log for status messages pertaining to the wacom. Here's a copy of the messages from my version of the driver.

[jej@ayukawa usb]# grep -i wacom /var/log/messages | tail
Oct 11 21:23:35 ayukawa kernel: usb.c: registered new driver wacom
Oct 11 21:23:35 ayukawa kernel: wacom.c: v1.43-0.8.0-3 Vojtech Pavlik <vojtech@suse.cz>
Oct 11 21:23:35 ayukawa kernel: wacom.c: USB Wacom Graphire and Wacom Intuos tablet driver (MODIFIED)

The original driver was version 1.43. This version number is 1.43-0.8.0-3 so the correct driver was loaded.

3.8 - Building usbmouse.o, evdev.o, mousedev.o, and hid.o (for kernel 2.4)

In the linuxwacom-0.8.0-3.tar.bz2 file, you will find mousedev.c, usbmouse.c, hid-core.c, evdev.c, and input.c files which have special exceptions for wacom. These files are not built by default, so you will need to reconfigure the package and run make again.

If your kernel is older than 2.4.22, the modules will be built using the sources at src/2.4. If your kernel is 2.4.22 or newer, the modules will be built using the sources at src/2.4.22. input.o is only needed for kernels older than 2.4.22.

[jej@ayukawa wacom]$./configure --enable-hid --enable-usbmouse --enable-mousedev --enable-evdev --enable-input --with-kernel=your-kernel-src-dir
...
  BUILD OPTIONS:
              hid.o - yes
         usbmouse.o - yes
            evdev.o - yes
         mousedev.o - yes
            input.o - yes
...
[jej@ayukawa wacom]$ make

First off, if the code does not build, and you cannot chase the problem down yourself, send me a line. If your kernel is much older than 2.4.18, then you may have to resign yourself to the fact that the 2.4.19 drivers are not going to work for you. I would recommend upgrading your kernel.

Before installing the drivers, please backup the originals. Then, use the following steps to install the drivers into the proper directories. Use locate as you did for the wacom.o file if necessary.

For systems with kernel 2.4 and older than kernel 2.4.22:

[jej@ayukawa wacom]$su
[jej@ayukawa wacom]#cd src/2.4
[jej@ayukawa 2.4]#cp hid.o /lib/modules/your-kernel-ver/kernel/drivers/usb
[jej@ayukawa 2.4]#cp usbmouse.o /lib/modules/your-kernel-ver/kernel/drivers/usb
[jej@ayukawa 2.4]#cp evdev.o /lib/modules/your-kernel-ver/kernel/drivers/input
[jej@ayukawa 2.4]#cp mousedev.o /lib/modules/your-kernel-ver/kernel/drivers/input
[jej@ayukawa 2.4]#cp input.o /lib/modules/your-kernel-ver/kernel/drivers/input
[jej@ayukawa 2.4]#reboot

For systems with kernel 2.4.22 or newer:

[jej@ayukawa wacom]$su
[jej@ayukawa wacom]#cd src/2.4.22
[jej@ayukawa 2.4.22]#cp hid.o /lib/modules/your-kernel-ver/kernel/drivers/usb
[jej@ayukawa 2.4.22]#cp usbmouse.o /lib/modules/your-kernel-ver/kernel/drivers/usb
[jej@ayukawa 2.4.22]#cp evdev.o /lib/modules/your-kernel-ver/kernel/drivers/input
[jej@ayukawa 2.4.22]#cp mousedev.o /lib/modules/your-kernel-ver/kernel/drivers/input
[jej@ayukawa 2.4.22]#reboot
As before with some other distributions, if the files in the kernel module directory are compressed, you'll need to run gzip on the .o files to get .o.gz files.

3.9 - Building (usb)hid.ko (for kernel 2.6)

In the linuxwacom-0.8.0-3.tar.bz2 file, you will find hid-core.c, which have special exceptions for wacom. This file is not built by default, so you will need to reconfigure the package and run make again.

Note, for kernel 2.6.18 and later, no need to build hid any more. For other kernels, refer to Testing Tablet Detection to see if you need to build hid or not.

You need to configure usbhid as a module under your kernel source tree before configuring linuxwacom.

On some distributions, Mandrake or Mandriva included, the (usb)hid.ko driver that located in the kernel modules directory appears to be compressed. You need to run gzip on the module and copy (usb)hid.ko.gz instead.

[jej@ayukawa wacom]$./configure --enable-hid --with-kernel=your-kernel-src-dir
...
  BUILD OPTIONS:
              hid.o - yes
...

Kernel 2.6.11 and 2.6.12 are in src/2.6.11. Kernels 2.6.16 and 2.6.17 are handled in src/2.6.16. Kernels 2.6.18/19/20/21/22 are in src/2.6.18. All the other kernels are processed in its own src/2.6.x. New 2.6 directories will be created when compatibility issue occurs.

For those who like to build everything from the source tree, please skip the make and install steps below. Scroll down to the end of this page to see the steps with light blue background.

If everything works properly, you'll see the following from the make:

[jej@ayukawa linuxwacom]$ make
...
Making all in 2.6.9
make[3]: Entering directory `/home/jej/linuxwacom/src/2.6.9'
    Building linuxwacom drivers for 2.6 kernel.
make -C /usr/src/linux M=/home/jej/linuxwacom/src/2.6.9
make[4]: Entering directory `/home/jej/linux-2.6.9'
  LD      /home/jej/linuxwacom/src/2.6.9/built-in.o
  CC [M]  /home/jej/linuxwacom/src/2.6.9/hid-core.o
  CC [M]  /home/jej/linuxwacom/src/2.6.9/hid-input.o
  LD [M]  /home/jej/linuxwacom/src/2.6.9/usbhid.o
  Building modules, stage 2.
  MODPOST
  CC      /home/jej/linuxwacom/src/2.6.9/usbhid.mod.o
  LD [M]  /home/jej/linuxwacom/src/2.6.9/usbhid.ko
make[4]: Leaving directory `/usr/src/linux'
...

Then, use the following steps to install the driver:

[jej@ayukawa linuxwacom]$su
[jej@ayukawa linuxwacom]#cd src/2.6.9
[jej@ayukawa 2.6.9]#cp usbhid.ko /lib/modules/your-kernel-ver/kernel/drivers/usb/input
[jej@ayukawa 2.6.9]#reboot

This part is for those who want to manually build the kernel drivers from source tree. If you already followed the steps above, you can move on to next page.

Please backup your related kernel files first then copy the source from the related linuxwacom directory to the source tree and rebuild the kernel. An example for kernel 2.6.9 is as following:

[jej@ayukawa linuxwacom]$ cp /usr/src/linux/drivers/usb/input/hid-core.c /usr/src/linux/drivers/usb/input/hid-core.c.2.6.9
[jej@ayukawa linuxwacom]$ cp src/2.6.9/hid-core.c /usr/src/linux/drivers/usb/input/
[jej@ayukawa linuxwacom]$ cd /usr/src/linux
[jej@ayukawa linux]$ make
[jej@ayukawa linux]$ su
[jej@ayukawa linux]# make install
[jej@ayukawa linux]# make modules_install
[jej@ayukawa linux]# reboot

3.10 - Unknown Tablet?

To determine whether your device is listed in the driver, we need to determine the device identifier. It can be discovered by issuing more /proc/bus/usb/devices:
[jej@ayukawa linuxwacom]# more /proc/bus/usb/devices
T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=056a ProdID=0044 Rev= 1.15
S:  Manufacturer=Tablet
S:  Product=XD-1212-U
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=140mA
I:  If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=wacom
E:  Ad=81(I) Atr=03(Int.) MxPS=  10 Ivl=5ms

In this case, the tablet identifier is in Vendor=056a ProdID=0044. The model (Product=XD-1212-U) is determined by ProdID; the Intuos2 12x12 is 0x44 for instance.

In the wacom.c/wacom_wac.c file, you will find a table called "wacom_ids". Look for your device identifier. Only the identifiers listed are handled by the wacom driver, so if it is missing, it needs to be added. Also look for routine usb_hid_configure() in hid-core.c. At the beginning of the routine, we added the following lines to let HID driver ignore all Wacom devices:

	/* ignore all Wacom devices */
	if (dev->descriptor.idVendor == USB_VENDOR_ID_WACOM)
		return NULL;

If you've gotten this far, and still cannot get it to work, email me with your device identifier and as much of an explanation of where things did and did not work as described. I'll see what I can do about at least finding out why it did not work. Then we can go on to solutions.

The next section assumes you have things working up to this point.

3.11 - Viewing the Raw Data

View the raw data from the tablet, by returning to the /dev/input directory and streaming the data directly from the device. Be patient here because this is where a lot of people are getting stuck.

[root@ayukawa usb]# cd /dev/input
[root@ayukawa input]# xxd event0
0000000: e65d c33d 597d 0100 0100 4101 0100 0000  .].=Y}....A.....
0000010: e65d c33d 5c7d 0100 0400 0000 b701 2800  .].=\}........(.
0000020: e65d c33d d9bb 0100 0100 4101 0000 0000  .].=......A.....
0000030: e65d c33d dcbb 0100 0400 0000 b701 2800  .].=..........(.
(Ctrl-C)

First off, you have to move the mouse or tap the pen to get any output. If the tablet is mapped to event0, a continuously data stream will be displayed while you move the mouse or pen on the tablet. Second, you might not get anything at all. Don't panic. This seems to happen occasionally. If absolutely no output occurs, try event1 and event2. It is reported on Fedora Core 2 the event0 used for kernel 2.4 is represented as event2 when switching to kernel 2.6.1-1.65. If no output occurs on those ports, reload the drive:

[jej@sasami root]# /sbin/rmmod wacom
[jej@sasami root]# /sbin/modprobe wacom       (or /sbin/insmod mydir/src/wacom.o)
[jej@sasami root]# tail /var/log/messages
Oct 11 17:31:31 sasami kernel: usb.c: deregistering driver wacom
Oct 11 17:31:34 sasami kernel: usb.c: registered new driver wacom
Oct 11 17:31:35 sasami kernel: input0: Wacom Intuos2 12x12 on usb1:2.0
Oct 11 17:31:35 sasami kernel: wacom.c: v1.43-0.8.0-3 Vojtech Pavlik <vojtech@suse.cz>

The device driver and the tablet occassionally get out of sync with the tablet thinking it's still in HID mode when in fact it should be in "mode 2." By unloading and reloading the driver manually, the initialization code has another opportunity to get it right. Try the xxd /dev/input/event0 again. This time, it should work. If not, send me some email.

Incidentally, if you have a program running that is connected to /dev/input/event0 (like X or wacdump for instance), it is possible that the tablet will not reattach back to the same event. I have seen the wacom reattach to /dev/input/event1 when unloading and reloading the wacom driver with wacdump running for instance. So, try xxd on event1 or event2 if event0 fails.

You should also try running xxd on /dev/input/mouse0. You should get streams of data when the mouse and pen are moved around the surface of the tablet. It is this device that X will look at for mouse movement. Use Ctrl-C to exit xxd.

4.0 - Using wacdump

The wacdump program parses and displays raw data from the Linux event subsystem or serial port. It is very handy for verifying that your tablet works without having to hassle with X server. Generally, you must be root to run it unless you've set the permissions on the appropriate device such that you can read them.

Running wacdump

In the case of USB tablets, this program can run simultaneously with X, but it's best if X has not been configured for the tablet yet. X will not share the serial port with wacdump, so serial users should comment out the wacom InputDevice sections from XF86Config (or xorg.conf) before using. Alternatively, you could move your serial tablet to COM2 and try /dev/ttyS1 instead.

The command line usage of wacdump is pretty simple:

Usage: wacdump [options] device
Options:
  -h, --help               - usage
  -c, --class device_cls   - use specified class (see below)
  -f, --force device_name  - use specified device (see below)
  -l, --list               - list all supported devices
  -v, --verbose            - increase log output; multiple OK
  -V, --version            - display version number
  --logfile log_file       - output log to file

Example devices:
  /dev/input/event0        - usb tablet device
  /dev/ttyS0               - serial tablet on com1
  /dev/ttyUSB0             - serial tablet on USB adapter

Supported device classes:
  serial, usb
Supported device names:
  serial: art, art2, dig, dig2, pp, gr, pl, int, int2, c100
  usb: pp, gr, gr2, int, int2, pl, vol

Older versions of wacdump assumed the device to be /dev/input/event0. This is now deprecated. You should instead specify which device to use on the command line directly. If you get an end-of-file error or the device does not exist, then the wacom may be attached to a different event. Serial users may experience a timeout error which indicates that either the tablet is not responding or X server has it open. Access denied errors probably indicate that you are not root. If you get different types of errors, let me know so we can get them documented.

Serial users are advised that now is a good time to plug in your tablet, if you haven't already.

Let's run wacdump. Here are some command line examples:

[jej@ayukawa src]$ ./wacdump /dev/input/event0        # typical USB tablet
[jej@ayukawa src]$ ./wacdump /dev/input/event1        # USB tablet on event1

When you run wacdump, it will attempt to initialize and query the tablet. For a number of reasons, it may not display anything immediately, but if you place a mouse or pen near the surface, the screen should update. You will then be presented with a screen similar to the following:

wacdump v0.4.0
MODEL=Wacom Intuos2 12x12               ROM=1.1-5
CLS=USB  VNDR=Wacom  DEV=Intuos2  SUB=XD-1212-U

TOOLTYPE=NONE                             SERIAL=0x00000000
 IN_PROX=+00000 (+00000 .. +00000)        BUTTON=+00000 (+00000 .. +00000)
   POS_X=+00000 (+00000 .. +30480)         POS_Y=+00000 (+00000 .. +31680)
   ROT_Z=+00000 (-00900 .. +00899)      DISTANCE=+00000 (+00000 .. +00015)
PRESSURE=+00000 (+00000 .. +01023)        TILT_X=+00000 (+00000 .. +00127)
  TILT_Y=+00000 (+00000 .. +00127)      ABSWHEEL=+00000 (+00000 .. +01023)
RELWHEEL=+00000 (-00001 .. +00001)      THROTTLE=+00000 (-01023 .. +01023)

    LEFT=             MIDDLE=              RIGHT=              EXTRA=
    SIDE=              TOUCH=             STYLUS=            STYLUS2=

The top portion identifies the tablet, and unless you specifically override the device type with the -f option, it should be auto-detected from the tablet directly. In this case, the model is XD-1212-U, a USB Intuos2 12x12.

The next section describes the dynamic attributes of the tablet, including the current position of the pointer, the type of tool in proximity to the surface, its pressure, and tilt. Some tablets (Protocol V tablets, such as Intuos 1, 2, and 3 as well as Cintiq 21UX) provide serial numbers for their tools. When a button is pressed, the button heading will change to something like "STYLUS=DOWN".

Some tablet tools report wheel movements as single increments forward and reverse, while others provide absolute positions. The 4D mouse has a throttle instead of a wheel. All three cases are reported independently.

Different tablets will have different options. Here is the lowly ArtPadII for comparison.

wacdump v0.4.0
MODEL=Wacom ArtPadII 4x5                ROM=1.3-6
CLS=Serial  VNDR=Wacom  DEV=ArtPadII  SUB=KT-0405-R

TOOLTYPE=NONE                            IN_PROX=+00000 (+00000 .. +00000)
  BUTTON=+00000 (+00000 .. +00000)         POS_X=+00000 (+00000 .. +06400)
   POS_Y=+00000 (+00000 .. +04800)      PRESSURE=+00000 (+00000 .. +00255)

    LEFT=             MIDDLE=              RIGHT=              EXTRA=
    SIDE=              TOUCH=             STYLUS=            STYLUS2=

Notice that this tablet has no tilt, and the pressure range is considerably reduced. This version of wacdump does not distinguish between tablets with mice, so the left, right, and middle buttons are present, even though the tablet itself has no mouse.

5.0 - Configuring X11

Two steps must be completed to get X to recognize your tablet. First, you need to add some lines to XF86Config/xorg.conf to inform X of the tablet's existence. Second, you need to update the XInput driver that pertains to the tablet since the one that ships with XFree86/Xorg is not very functional. Neither driver holds a candle to the windows driver though, so you'll have to take what you get for the time being. Updates to the XFree86/Xorg driver are available in the stable and beta releases on the Downloading the Code page.

5.1 - Adding the InputDevices

The X Window system identifies the stylus (tip and side switches of your pen), eraser (the other end of your pen if it is clickable), cursor (your Wacom mouse), and pad (buttons, strips and rings on your tablet if your tablet has any) as XInput devices. Most settings, such as stylus pressure level and system cursor movement mode can be done in /etc/X11/XF86Config or /etc/X11/xorg.conf configuration file before X server starts or live through command-line xsetwacom or the simple GUI control panel wacomcpl while Wacom driver is running.

However, adding the InputDevice sections to your XF86Config/ xorg.conf file for Wacom devices is required. You should add these devices to the ServerLayout section of your XF86Config/xorg.conf file too.

We assume you are running Either XFree86 4.2 or later Or Xorg. On some distributions, this file is called XF86Config-4. Notice that the serial and USB configurations are different, so only include the appropriate lines. The default serial and USB devices are given. For Tablet PCs, options "Device" and "ForceDevice" should be included. You should also change the device (e.g. ttyS0) to the correct one for your tablet. Tablet PC and Cintiq/PL/DTF models don't support cursor type. All the new driver options are listed in the manual page below.

Section "InputDevice"
  Driver        "wacom"
  Identifier    "stylus"
  Option        "Device"        "/dev/ttyS0"          # SERIAL ONLY
  Option        "Device"        "/dev/input/event0"   # USB ONLY
  Option        "Type"          "stylus"
  Option        "USB"           "on"                  # USB ONLY
  Option        "ForceDevice"   "ISDV4"               # Serial Tablet PC ONLY
EndSection

Section "InputDevice"
  Driver        "wacom"
  Identifier    "eraser"
  Option        "Device"        "/dev/ttyS0"          # SERIAL ONLY
  Option        "Device"        "/dev/input/event0"   # USB ONLY
  Option        "Type"          "eraser"
  Option        "USB"           "on"                  # USB ONLY
  Option        "ForceDevice"   "ISDV4"               # Serial Tablet PC ONLY
EndSection

Section "InputDevice"
  Driver        "wacom"
  Identifier    "cursor"
  Option        "Device"        "/dev/ttyS0"          # SERIAL ONLY
  Option        "Device"        "/dev/input/event0"   # USB ONLY
  Option        "Type"          "cursor"
  Option        "USB"           "on"                  # USB ONLY
  Option        "ForceDevice"   "ISDV4"               # Serial Tablet PC ONLY
EndSection

# This section is for Intuos3, CintiqV5, Graphire4, or Bamboo
Section "InputDevice"
  Driver        "wacom"
  Identifier    "pad"
  Option        "Device"        "/dev/ttyS0"          # SERIAL ONLY
  Option        "Device"        "/dev/input/event0"   # USB ONLY
  Option        "Type"          "pad"
  Option        "USB"           "on"                  # USB ONLY
EndSection

# This section is for the TabletPC that supports touch
Section "InputDevice"
  Driver        "wacom"
  Identifier    "touch"
  Option        "Device"        "/dev/ttyS0"          # SERIAL ONLY
  Option        "Device"        "/dev/input/event0"   # USB ONLY
  Option        "Type"          "touch"
  Option        "ForceDevice"   "ISDV4"               # Serial Tablet PC ONLY
  Option        "USB"           "on"                  # USB ONLY
EndSection

The above four sections identify the stylus, eraser, cursor, touch, and pad devices to XInput. Notice that all four reference the same device /dev/ttyS0 or /dev/input/event0 depending on whether its a serial or USB tablet.

The configuration options listed by your system's man page may be way out of date. Below is an updated wacom man page which will be installed by default when you issue make install.

WACOM(4)                                                              WACOM(4)

NAME
       wacom - Wacom input driver

SYNOPSIS
       Section "InputDevice"
         Identifier "idevname"
         Driver "wacom"
         Option "Device"   "devpath"
         ...
       EndSection

DESCRIPTION
       wacom is an X input driver for Wacom devices.

       The  wacom  driver functions as a pointer input device, and may be used
       as the X server's core pointer.

SUPPORTED HARDWARE
       This driver supports the Wacom IV and Wacom V protocols. Serial tablets
       only  need  this driver.  USB tablet support is available on some Linux
       platforms.  USB tablets needs  wacom Linux  kernel driver  being loaded 
       before this  driver starts.  Please check linuxwacom.sf.net  for latest 
       updates of Wacom X and kernel drivers.

CONFIGURATION DETAILS
       Please refer to xorg.conf(5x) for general configuration details and for
       options  that can be used  with all input  drivers.  This  section only
       covers configuration details specific to this driver.

       Multiple  instances  of the Wacom devices can cohabit. It can be useful
       to define multiple devices with different  active  zones.  Each  device
       supports the following entries:

               Option "Type" "stylus"|"eraser"|"cursor"|"touch"|"pad"
                   sets the type of tool the device represents.  This option is
                   mandatory. The core options, such as "SendCoreEvents" or "AlwaysCore", 
                   are unnecessary in Gimp if you don't need to move system cursor 
                   outside of Gimp drawing area.  "pad" is for Intuos 3 and  CintiqV5 
                   ExpressKeys and menu strips, or Graphire 4 and Bamboo 
		   tablet buttons and wheel/ring.  It is required for Intuos3, 
                   CintiqV5, Graphire 4, or Bamboo if you want to use keystroke   
                   features.  "pad" is reported as a second tool in the driver. 
                   "touch" is for the tablet with touch support.  Right now only a few 
                   Tablet PCs have this feature.

               Option "Device" "path"
                   sets the path to the special file which  represents  serial
                   line  where  the tablet is plugged.  You have to specify it
                   for each subsection with the same value if you want to have
                   multiple  devices  with  the  same  tablet.  This option is
                   mandatory.

               Option "USB" "on"
                   tells the driver to dialog with the  tablet  the  USB  way.
                   This option is mandatory for USB tablets.

               Option "ForceDevice" "ISDV4"
                   tells the driver to dialog with the tablet the serial Tablet 
                   PC way.  It is a special Wacom IV protocol,  called ISDV4 
		   protocol.  This option is mandatory for serial Tablet PC.

               Option "DeviceName" "name"
                   sets the name of the X device.

               Option "Suppress" "number"
                   sets  the  position  increment  under which not to transmit
                   coordinates.  This entry must  be  specified  only  in  the
                   first Wacom subsection if you have multiple devices for one
                   tablet.  The default value is 2.  If you don't specify this
                   entry or your  value is  less  than  the  default  vaule or 
                   greater than 100, the default value will be used.  To disable 
		   suppression, the entry should be specified as 0.
                   When  suppress is defined,  an event will be sent only when
                   at least one of the following conditions is met:

		   the change between the current X coordinate and the previous 
                   one is greater than suppress;

                   the change between the current Y coordinate and the previous 
                   one is greater than suppress;

                   the change between the current pressure and the previous one 
                   is greater than suppress;

                   the change  between the  current  degree of rotation and the 
                   previous one of the transducer is greater than suppress;

                   the change between the current absolute wheel value and the  
                   previous one is equal to or greater than suppress;

                   the change between the current tilt value and the previous one 
                   is equal to or greater than suppress (if tilt is supported);

                   relative wheel value has changed;

                   button value has changed;

                   proximity has changed.		   

               Option "Mode" "Relative"|"Absolute"
                   sets the mode of the device.  The default value for stylus and 
                   eraser is Absolute; cursor is Relative; pad mode is decided 
                   according to its core option due to its nature of not moving 
                   system cursor: Relative if it is a core device; Absolute, otherwise.

               Option "TopX" "number"
                   X coordinate of the top corner of the active zone. Default to 0. 

               Option "TopY" "number"
                   Y coordinate of the top corner of the active zone.  Default to 0.

               Option "BottomX" "number"
                   X coordinate of the bottom corner of the active zone.  Default 
                   to width of the tablet.

               Option "BottomY" "number"
                   Y coordinate of the bottom corner of the active zone.  Default 
                   to height of the tablet.

               Option "ButtonsOnly" "on"
                   disables the device's motion events.  Default to off.

               Option "ButtonM" "AC"
                   reports an action AC when button M is pressed,  where M
                   is one of the device supported  button numbers,  it can be 1
                   to 32. The default action reported to Xinput is mouse button M click.    
		   To ignore the button click, i.e., to not report any button click event 
		   to Xinput,  use "0" or "button 0".  

               Option "TPCButton" "on"
                   enables the  stylus  buttons as  Tablet PC  buttons,  i.e.,
                   reports  stylus button event only  when its tip is pressed. 
                   Default to  "on" for  Tablet PC;  "off"  for all other models.

               Option "Speed" "Rspeed"
                   sets the cursor's  relative  movement speed to Rspeed.  The
                   default value is 1.0.  A Rspeed greater than 1.0 will speed
                   up the cursor's  relative movement.  A Rspeed less than 1.0 
                   but greater  than 0 will slow  down the  cursor's  relative 
                   movement. A Rspeed too close to 0 is not recommanded.

               Option "Twinview" "horizontal"|"vertical"|"none"
                   sets the  orientation of  TwinView to map the tablet to one 
                   screen  and to be able to  move the screen  cursor from one 
		   screen  to the  other  when tool  reaches  the  edge of the
		   tablet.  The cursor can be constrained in a specific screen 
                   if  "ScreenNo"  option is  added.   If you  want to map the
                   tablet  to the  whole  desktop,   you  should  NOT add this
                   option.  The default is "none".

               Option "TVResolution" "res1,res2"
                   specifies  different  resolutions  for the  two  screens in
                   TwinView setup.  For example, if the resolution of screen 1
                   (res1) is 1024x768 and screen 2 (res2) is 1280x1024, the 
                   option will be set to:
                            Option "TVResolution" "1024x768,1280x1024"

                   This option is used  only when TwinView option is not none.  
		   It is  unnecessary to add this  option if  your screens are 
                   displaying in the same resolutions.

               Option "ScreenNo" "n"
                   In a multi-monitor environment, specifies the screen number
                   in which the cursor can move.

               Option "Rotate" "CW"|"CCW"|"HALF"|"NONE"
                   rotates the tablet orientation clockwise (CCW) or anti-
                   clockwise (CW) or 180 degrees (HALF). The default is "NONE".

               Option "PressCurve" "x1,y1,x2,y2"
                   sets pressure curve by control  points  x1, y1, x2, and y2.
                   Their values are in range from 0..100. The input for 

                         linear curve (default) is "0,0,100,100";
                         slightly depressed curve (firmer) might be "5,0,100,95";
                         slightly raised curve (softer) might be "0,5,95,100".

               Option "KeepShape" "on"
                   When  this  option  is  enabled,  the  active  zone  begins
                   according to TopX and TopY.  The bottom corner is  adjusted 
                   to  keep the ratio width/height of the active zone the same 
                   as the screen while maximizing the area  described by TopX, 
                   TopY, BottomX, BottomY.

               Option "DebugLevel" "number"
                   sets the level of debugging info reported for the  defined 
                   device. There are 12 levels in use, specified by the  integers  
                   between 1 and 12. Once it is defined, all the debug  messages  
                   with a level less than or equal to the "number" will be logged  
                   into /etc/X11/XFree86.0.log or /etc/X11/Xorg.0.log.

               Option "CommonDBG" "number"
                   sets the level of debugging info for all devices defined for the  
                   same tablet. There are 12 levels in use, specified by the 
                   integers between 1 and 12. Once it is defined, all the debug 
                   messages with a level less than or equal to the "number" will 
                   be logged into /etc/X11/XFree86.0.log or /etc/X11/Xorg.0.log.

               Option "CursorProx" "number"
                   sets the max distance from tablet to stop reporting  movement 
                   for cursor in relative mode.  Default for Intuos  series 
                   is 10,  Graphire series (including Volitos) is 42.

               Option "Serial" "number"
                   sets the serial number associated with the physical device.
                   This allows to have multiple devices of the same type (i.e.
                   multiple pens). This option is only available  on  wacom  V
                   devices (Intuos series and Cintiq 21UX). To see the serial 
                   number associated with a device, run xsetwacom.

               Option "Threshold" "number"
                   sets  the  pressure  threshold  used to generate a button 1
                   events of stylus. The default is MaxPressure*3/50.

SEE ALSO
       Xorg(1x), xorg.conf(5x), xorgconfig(1x), Xserver(1x), X(7).

AUTHORS
       Frederic Lepied <lepied@xfree86.org>, Ping  Cheng <pingc@wacom.com>,
       John E. Joganic <jej@j‐arkadia.com>, Magnus Vigerlöf <Magnus.Vigerlof@ipbo.se>

X Version 11                      linuxwacom 0.8.0                     WACOM(4)

5.2 - Mouse1 (for all kernel 2.4 systems and some 2.6 systems)

This section largely deals with interaction problems between the mouse1 device, PS/2 mouse, and USB tablets. Serial users can ignore this part.

Starting from linuxwacom-0.7.1, this is not a problem for most kernel 2.6 systems. If you use kernel 2.6 and a driver newer than 0.7.1, you may ignore this page. However, it has been reported that on some vendors 2.6 systems, the information detailed on this page still applies. So, if you tried all the other steps and the tablet still has issues, you may want to apply this page to elminate the /dev/input/mice issue.

If you have a USB mouse or PS/2 mouse and are also using a USB tablet, there are two solutions here for you: you may either change your mouse1 or PS/2 InputDevice section to something other than /dev/input/mice or build mousedev.o from this project for your kernel, which will ignore Wacom tablets as USB mice. The wacom tablet appears as a mouse to the Linux kernel, and consequently, the "mice" device combines the input from all your mice, including the tablet. This will not give you the behavior you want. A better choice is to specify the precise USB device or PS/2 mouse from which you want to receive mouse events, namely /dev/input/mouse0 or /dev/input/mouse1 or /dev/psaux.

If you do not have a USB mouse, adding the Mouse1 device is probably not something you want to do. Despite this, Redhat's Anaconda program will do it for you if you boot the machine with the tablet plugged in. You'll need to be careful about this.

When you use the mouse1 input device, the data flows from the USB wacom kernel driver, through the event subsystem, down into the mousedev driver, out the /dev/input/mouse0 device, and finally into the XInput mouse driver. You effectively lose all your absolute positioning information because the mousedev driver converts it into relative data. Additionally, the XFree86 wacom driver does not get control of the cursor because mouse1 is providing those events.

Therefore, if you have a Mouse1 section, leave it. Redhat 8.0 at least, expects it to be there; however, if you do not have a USB mouse and you are using a USB tablet, you will not be using this section, so make certain that it is commented out of the ServerLayout section covered next.

There is one exception however. If you have no other mouse device in your ServerLayout section, do not remove Mouse1. XFree86 will not start without at least one core pointer, and the tablet does not count unless it is specifically identified as a "CorePointer" rather than merely "SendCoreEvents."

5.3 - ServerLayout

The ServerLayout section describes what devices the X server will use. Modify the ServerLayout section to reflect the new devices. Make certain to comment out the Mouse1 device if determined necessary from the previous page.

Section "ServerLayout"
        Identifier     "Default Layout"
        Screen 0 "Screen0"   0 0
        InputDevice    "Mouse0"    "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
        InputDevice    "stylus"    "SendCoreEvents"
        InputDevice    "eraser"    "SendCoreEvents"
        InputDevice    "cursor"    "SendCoreEvents"    # For non-LCD tablets only
	InputDevice    "touch"     "SendCoreEvents"    # Only a few TabletPCs support this type
        InputDevice    "pad"   # For Intuos3/CintiqV5/Graphire4/Bamboo tablets
EndSection

This section determines which devices are actually used by the server. In the case above, the cursor, stylus, eraser, touch, and pad devices are selected. At present, this is the correct configuration for proper operation of the tablet whether you are using the beta package or the production package.

You can configure one of your Wacom devices as a Core Pointer if you don't have a regular mouse on your system. However, you lose the Wacom specific functions, such as pressure sensitivity and absolute mode when you use that device.

You have completed the XF86Config/xorg.conf file changes. But aware that if you reboot your computer with the Wacom plugged in and Redhat's Anaconda program notices, it may treat the tablet as a USB mouse and reconfigure this file incorrectly. You may need to go back and check the file to ensure that everything is still correct afterwards. Rebooting with the device detached is not recommended since X server doesn't properly support hotplugging yet. My recommendation is to tell Anaconda to ignore the tablet until the device detection works properly.

5.4 - Restart X

Finally, restart X. You may wish to do this from runlevel 3 for testing purposes.

[root@ayukawa root]# init 3
...processes starting and stopping...
[root@ayukawa root]# startx
If the X server dies, you can always back-out the changes to the XF86Config or xorg.conf file and try again. But first, look at the X log file (XFree86.0.log for XFree86 and Xorg.0.log for Xorg) for clues. You might want to do this even if everything works correctly. When things are running right, the following lines appear in my log file.
[root@ayukawa root]# grep -i wacom /var/log/XFree86.0.log
(II) LoadModule: "wacom"
(II) Loading /usr/X11R6/lib/modules/input/wacom_drv.o
(II) Module wacom: vendor="The XFree86 Project"
(II) Wacom driver level: 47-0.8.0-3 $
(II) XINPUT: Adding extended input device "eraser" (type: Wacom Eraser)
(II) XINPUT: Adding extended input device "stylus" (type: Wacom Stylus)
(II) XINPUT: Adding extended input device "cursor" (type: Wacom Cursor)
(==) Wacom Kernel Input device name: "Wacom Intuos2 12x12"
(==) Wacom tablet maximum X=30480 maximum Y=30480 X resolution=0 Y resolution=0
suppress=0
(==) Wacom Cursor top X=0 top Y=0 bottom X=30480 bottom Y=30480
(==) Wacom Stylus top X=0 top Y=0 bottom X=30480 bottom Y=30480
(==) Wacom Eraser top X=0 top Y=0 bottom X=30480 bottom Y=30480
Notice the driver version 47-0.8.0-3 above. This is the new stable wacom_drv.o driver. The beta driver is currently 47-0.8.1-4.

First things first, you should lift the mouse off the tablet and place it back down. This seems to help reset things internally. When you replace the mouse, the cursor should jump to that portion of the screen. If everything is working correctly, the mouse should work in absolute mode with the four corners of the tablet corresponding with the four corners of the screen. If the cursor stops short of an edge, then the kernel driver limits are probably incorrect. Please let me know so that I can update the driver.

Next, remove the mouse and try using the eraser end of the stylus. Hovering over the surface of the tablet should move the cursor. Touching the eraser tip to the surface should generate a click. If you invert the pen and use the stylus tip, you should get a similar result. If the pen tip generates spurious touch events, you will need to increase the threshold value in the InputDevice section. Wacdump is useful for determining the appropriate value.

Lastly, if you would like more logging, the parameter "DebugLevel" (for individual tools) and "CommonDBG" (for all tools associated with the same tablet) can be set to values between 1 and 12, with 12 being way too much, and 1 being fairly useful.

If X server failed to start and you are running the prebuilt wacom_drv.(s)o, you may have to go back to Configuring the Package page to build the driver on your system.

5.5 - Check the Pointer Status

You can check the XInput pointer status by using xsetpointer as below. The man page states that calling xsetpointer with the name of a particular device will set it as the primary pointing device.

[root@ayukawa log]# xsetpointer -l
"eraser"        [XExtensionDevice]
"stylus"        [XExtensionDevice]
"cursor"        [XExtensionDevice]
"Mouse0"        [XPointer]
"keyboard"      [XKeyboard]

6.0 - Using xidump

The xidump program is similar to wacdump, but it parses and displays event data from the XFree86 XInput extension rather than from the tablet itself. This is useful for seeing what programs like gimp and gsumi are receiving from X.

Presently, xidump will display proximity and motion events for the stylus, cursor, eraser, and pad input devices. xidump supports different display modes with "curses" and "raw" modes already implemented and a GTK-based graphical mode in the works. The curses mode is probably the most useful in terms of verifying that the tablet is functioning correctly in the XFree environment; however, the raw mode has the additional benefit of being able to verify the order, timing, and history of events.

Since xidump uses the same XInput interface that gimp and gsumi use to get tablet data, the values displayed in xidump should be identical to what they are receiving. If you are having trouble with pressure in gimp, chances are that xidump will demonstrate the same problem. xidump does not require root access to use.

Running xidump

xidump takes one argument, the input device specified in your XF86Config file. Ordinarily, this would be either stylus, cursor, or eraser, but you can get a complete list by running xidump with the list option '-l'. xidump has the additional feature of dumping all the device capabilities by specifying the verbose option '-v'. Both are demonstrated below.

[jej@ayukawa src]$ ./xidump -l
eraser                         extension
stylus                         extension
cursor                         extension
Mouse0                         disabled
keyboard                       keyboard

[jej@ayukawa src]$ ./xidump -l -v eraser
eraser                         extension
    key: min=8, max=39, num=32
    btn: num=1
    val: axes=6 mode=abs buf=0
    axis[0]: res=2540, min=0, max=30480
    axis[1]: res=2540, min=0, max=30480
    axis[2]: res=1, min=0, max=1023
    axis[3]: res=1, min=-64, max=63
    axis[4]: res=1, min=-64, max=63
    axis[5]: res=1, min=0, max=1023

In the first dump, we see the eraser, stylus, and cursor with the additional Mouse0 pointer and keyboard. Only the first three are "extension" devices. Using xidump on the keyboard or mouse pointer will generate an error since neither are XInput devices.

The second dump shows the capabilities of the eraser device including the number of keys (32), buttons (1), and axes (6). It also shows the mode to be absolute. In order, the axes are: x, y, pressure, tilt-x, tilt-y, and wheel. When the cursor is used, axis 3 becomes z-rotation instead of tilt-x.

You should be aware that xidump and gimp must take ownership of the device in order to get real-time data. This creates a conflict if you are running both of them simultaneously. gimp is the more clever of the two programs in that it only "grabs" the input device if you are hovering over the gimp drawing window. xidump is less friendly. In order to display the absolute position across the entire screen, it creates a small "listening window," grabs the device immediately, and does not release it until you quit the program. Neither program should fail, but you will not be able to draw in gimp and run xidump at the same time if they are both using the same input device.

We will run xidump in raw mode for the first time to see the stylus events directly. A small window will appear on the desktop while xidump runs; you can safely ignore it. Closing it will kill the application.

[jej@ayukawa src]$ ./xidump -u raw stylus
14.56291895: Proximity In
14.56305595: Motion: x= +5978 y=+28728 p=   0 tx= +64 ty= +64 w=   +0 ID: 2323 Serial:         -60
...
16.87158095: Motion: x= +4941 y=+27842 p= 225 tx= +41 ty= +67 w=   +0 ID: 2323 Serial:         -60
16.87164395: Button: 1 DOWN
16.87169595: Motion: x= +4964 y=+27844 p= 398 tx= +42 ty= +66 w=   +0 ID: 2323 Serial:         -60
...
17.27328395: Motion: x= +5261 y=+27543 p=   3 tx= +48 ty= +64 w=   +0 ID: 2323 Serial:         -60
17.27334395: Button: 1 UP
17.27515995: Motion: x= +5348 y=+27451 p=   4 tx= +48 ty= +63 w=   +0 ID: 2323 Serial:         -60
...
17.35933795: Motion: x= +7089 y=+27061 p=   4 tx= +48 ty= +63 w=   +0 ID: 2323 Serial:         -60
17.37444395: Proximity Out
<Ctrl-C>

The timestamp on the left is seconds elapsed; the next field is the event type. Mostly, you will encounter motion events although I've trimmed many of them out of this listing. As you can see from the above, the first line is a "proximity in" event which indicates the stylus came in range of the tablet. The last event was a "proximity out." At 16.87 seconds, I tapped the stylus to the tablet surface as recorded by the "Button: 1 DOWN" and subsequent "UP" message. Raw mode is useful for verifying the order and timing of messages, but is not particularly clean. The ncurses mode works much better.

[jej@ayukawa src]$ ./xidump stylus
InputDevice: stylus
Valuators: Absolute   ID:      2323  Serial Number:          -60

             x-axis    y-axis   pressure   x-tilt    y-tilt     wheel
     data:  +10826    +09919    +00084    +00058    +00065    +00000
      min:  +00000    +00000    +00000    -00064    -00064    +00000
      max:  +30480    +30480    +01023    +00063    +00063    +01023
      res:  +00000    +00000    +00039    +00001    +00001    +00001

********
Proximity:  IN
    Focus:
  Buttons:  1-DOWN
     Keys:

All of the ranges are displayed above, include their resolutions which as far as I know are not normally used. Only the proximity, focus, valuator, and button events are currently implemented.

For completeness sake, here are the command line options:

Usage: xidump [options] input_device
  -h, --help          - usage
  -v, --verbose       - verbose
  -V, --version       - version
  -l, --list          - list available input devices
  -u, --ui ui_type    - use specified ui, see