Using a Wacom Graphire 2 USB with SuSE 8.0 1. This note provides step-by-step instructions for connecting a Graphire 2 USB (G2) to a PC running SuSE Linux 8.0. It has been tested on 2 PCs, one with an Asus A7V mobo with Voodoo3 graphics card, using usb-uhci, and the other with an Asus A7N266-VM with onboard nVidia graphics, using usb-ohci. 2. Comments, amendments, or further tips should be sent to kevin@dotmon.com. 3. This note builds on various items on the web, and I am grateful in particular to the authors of the following: John's Linux USB Wacom Intuos Page (http://www.joganic.com/wacom/). A superbly detailed explanation. The bits about the wacom driver itself are not relevant ? the SuSE driver does not seem to have the bug he refers to ? but the description of how to ensure the hardware is working is very helpful. Wacom XInput driver for Xfree86 (http://people.mandrakesoft.com/~flepied/projects/wacom/). An important site for background on the basic driver. There are very useful forum archives at http://www.lepied.com/archive_wacom.html. Graphire USB (http://www.pxh.de/fs/graphire/). Home of the driver that makes it all happen. Wacom Tablet HOWTO (Stefan Runkel) ? 11 August 2001. Very useful. Has tip for switching off your normal mouse if you want to use the tablet/pen the whole time (5.8). Wacom USB mini-HOWTO (Arnaud Claden) ? 1 June 2000. Very out-of-date. Tablette Wacom Graphire USB (http://lea-linux.org/hardware/graphire.php). A short overview. Ayoros' tutorial - Wacom Intuos/Grahire USB tablets under Linux HOWTO (http://gug.sunsite.dk/tutorials/ayoros1/). 3. The following assumes that you have a fully-functioning basic install of SuSE 8.0, and that your USB subsystem is working. You can do a preliminary check by running: usbview This should give you a little GUI application which shows you your USB resources. If there seems to be something wrong here, you need to do more reading of various SuSE resources in order to sort that out before proceeding. 4. First of all, copy your existing XF86Config file to a backup, so that you can wind back if necessary. su cp /etc/X11/XF86Config /etc/X11/XF86Config.orig 5. If you have already attempted to install the G2, it is best to start from scratch. Unplug the tablet, and comment out any related lines in your XF86Config file. Then examine what modules are currently loaded: lsmod You should get something similar to the following: Module Size Used by Not tainted nls_iso8859-1 2880 1 (autoclean) nls_cp437 4384 1 (autoclean) vfat 9244 1 (autoclean) fat 28984 0 (autoclean) [vfat] snd-pcm-oss 45152 1 (autoclean) snd-mixer-oss 11136 1 (autoclean) tdfx 34424 28 nfsd 64800 4 (autoclean) parport_pc 25448 1 (autoclean) lp 5824 0 (autoclean) parport 21856 1 (autoclean) [parport_pc lp] ipv6 123424 -1 (autoclean) snd-ens1371 12036 2 snd-pcm 58528 0 [snd-pcm-oss snd-ens1371] snd-timer 11456 0 [snd-pcm] snd-rawmidi 13536 0 [snd-ens1371] snd-seq-device 4336 0 [snd-rawmidi] snd-ac97-codec 24196 0 [snd-ens1371] snd 31720 0 [snd-pcm-oss snd-mixer-oss snd-ens1371 snd-pcm snd-timer snd-rawmidi snd-seq-device snd-ac97-codec] soundcore 3268 6 [snd] isa-pnp 27816 0 (unused) joydev 5728 0 (unused) evdev 3904 0 input 3072 0 [joydev evdev] st 25844 0 (autoclean) (unused) sg 23620 0 (autoclean) usb-uhci 20996 0 (unused) usbcore 55136 1 [usb-uhci] via-rhine 11748 1 mii 1040 0 [via-rhine] ide-scsi 7648 0 reiserfs 158816 1 advansys 82368 0 If the module wacom is loaded, unload it: rmmod wacom Check for the existence of /dev/input/mouse0 and event0: su cd /dev/input ls -al mouse0 event0 You should get: crw-r--r-- 1 root root 13, 64 Mar 23 2002 event0 crw-r----- 1 root root 13, 32 Mar 23 2002 mouse0 Then run xxd on each of these devices (xxd "creates a hexdump of a given file or input", according to the man page): xxd mouse0 xxd event0 You should get a response saying "No such device" to each. If you get a blank response for evdev, try: modprobe joydev and then try it again. Check that graphireusb_drv.o is in /usr/X11R6/lib/modules/input: locate graphireusb (If you get a message that locate is an unknown command, install the package find-utils, which is not installed by default on a new system, and run updatedb. Then repeat the command). Start usbview if it is not already running: (Alt+F2) usbview and also get a window into the message log: su tail -f /var/log/messages Plug the tablet into a USB socket. You should hear two beeps, and usbview should show a new device in the tree. The log should show something like this: Nov 6 11:39:58 babylon kernel: hub.c: USB new device connect on bus2/2/2, assigned device number 3 Nov 6 11:39:58 babylon kernel: usb.c: USB device 3 (vend/prod 0x56a/0x11) is not claimed by any active driver. Nov 6 11:39:58 babylon kernel: usb.c: registered new driver wacom Nov 6 11:39:58 babylon kernel: usb-uhci.c: interrupt, status 3, frame# 1364 Nov 6 11:39:58 babylon insmod: Using /lib/modules/2.4.18-4GB/kernel/drivers/usb/wacom.o Nov 6 11:39:58 babylon insmod: Symbol version prefix '' Nov 6 11:39:58 babylon kernel: input0: Wacom Graphire2 4x5 on usb2:3.0 Nov 6 11:39:58 babylon kernel: wacom.c: v1.21.3 Vojtech Pavlik Nov 6 11:39:58 babylon kernel: wacom.c: USB Wacom Graphire and Wacom Intuos tablet driver Nov 6 11:39:58 babylon insmod: Using /lib/modules/2.4.18-4GB/kernel/drivers/usb/hid.o Nov 6 11:39:58 babylon insmod: Symbol version prefix '' Nov 6 11:39:58 babylon kernel: usb.c: registered new driver hiddev Nov 6 11:39:58 babylon kernel: usb.c: registered new driver hid Nov 6 11:39:58 babylon kernel: hid-core.c: v1.8.1 Andreas Gal, Vojtech Pavlik Nov 6 11:39:58 babylon kernel: hid-core.c: USB HID support drivers Nov 6 11:39:58 babylon insmod: Using /lib/modules/2.4.18-4GB/kernel/drivers/input/mousedev.o This shows the new device being recognised and assigned to input0 - information on pressure etc will be received on /dev/input/event0. The module wacom is loaded, followed by further modules, eg hid (Human Interface Device), and mousedev - mouse information will appear at /dev/input/mouse0. Now you can check whether the PC is receiving a data stream from the device: su cd /dev/input xxd event0 Bring the mouse or stylus into contact with the tablet and move it about. You should get something like this: 0000000: 2c01 c93d 1cf1 0600 0400 0000 0000 0000 ,..=............ 0000010: 2c01 c93d 4b10 0700 0400 0000 0000 0000 ,..=K........... 0000020: 2c01 c93d 892f 0700 0400 0000 0000 0000 ,..=./.......... 0000030: 2c01 c93d c84e 0700 0400 0000 0000 0000 ,..=.N.......... 0000040: 2c01 c93d ebde 0900 0400 0000 0000 0000 ,..=............ 0000050: 2c01 c93d 28fe 0900 0400 0000 0000 0000 ,..=(........... 0000060: 2c01 c93d 661d 0a00 0400 0000 0000 0000 ,..=f........... 0000070: 2c01 c93d e35b 0a00 0400 0000 0000 0000 ,..=.[.......... 0000080: 2c01 c93d 227b 0a00 0400 0000 0000 0000 ,..="{.......... 0000090: 2c01 c93d 5f9a 0a00 0400 0000 0000 0000 ,..=_........... 00000a0: 2c01 c93d ddd8 0a00 0400 0000 0000 0000 ,..=............ 00000b0: 2c01 c93d 1cf8 0a00 0400 0000 0000 0000 ,..=............ 00000c0: 2c01 c93d 5917 0b00 0400 0000 0000 0000 ,..=Y........... 00000d0: 2c01 c93d 9936 0b00 0400 0000 0000 0000 ,..=.6.......... 00000e0: 2c01 c93d 1875 0b00 0400 0000 0000 0000 ,..=.u.......... 00000f0: 2c01 c93d 5594 0b00 0400 0000 0000 0000 ,..=U........... 0000100: 2c01 c93d 9ab3 0b00 0400 0000 0000 0000 ,..=............ 0000110: 2c01 c93d d3d2 0b00 0400 0000 0000 0000 ,..=............ Press Ctrl-C to exit xxd. You can then try: xxd mouse0 and you should get something similar. Running lsmod should now show something like: Module Size Used by Not tainted mousedev 3872 0 (unused) hid 17824 0 (unused) wacom 6048 0 (unused) nls_iso8859-1 2880 1 (autoclean) nls_cp437 4384 1 (autoclean) vfat 9244 1 (autoclean) fat 28984 0 (autoclean) [vfat] snd-pcm-oss 45152 0 (autoclean) snd-mixer-oss 11136 1 (autoclean) tdfx 34424 21 nfsd 64800 4 (autoclean) parport_pc 25448 1 (autoclean) lp 5824 0 (autoclean) parport 21856 1 (autoclean) [parport_pc lp] ipv6 123424 -1 (autoclean) snd-ens1371 12036 1 snd-pcm 58528 0 [snd-pcm-oss snd-ens1371] snd-timer 11456 0 [snd-pcm] snd-rawmidi 13536 0 [snd-ens1371] snd-seq-device 4336 0 [snd-rawmidi] snd-ac97-codec 24196 0 [snd-ens1371] snd 31720 0 [snd-pcm-oss snd-mixer-oss snd-ens1371 snd-pcm snd-timer snd-rawmidi snd-seq-device snd-ac97-codec] soundcore 3268 6 [snd] isa-pnp 27816 0 (unused) joydev 5728 0 (unused) evdev 3904 0 input 3072 0 [mousedev hid wacom joydev evdev] st 25844 0 (autoclean) (unused) sg 23620 0 (autoclean) usb-uhci 20996 0 (unused) usbcore 55136 1 [hid wacom usb-uhci] via-rhine 11748 1 mii 1040 0 [via-rhine] ide-scsi 7648 0 reiserfs 158816 1 advansys 82368 0 The next thing is to set up the tablet in X. Launch the mouse portion of Sax2: sux sax2 -F mouse (the sux is needed because this is a GUI application) Select Add, Tablet, Wacom, Graphire/Intuos (USB), and from the Expert tab change the driver to graphireusb. Then press OK. Then select Add, Pen, Wacom, Graphire/Intuos Stylus (USB), change the driver, and press OK. Finally, select Add, Pen, Wacom, Graphire/Intuos Eraser (USB), change the driver, and press OK. Then press Finish, Save configuration, and Yes to exit Sax2. XF86Config will now have additional InputDevice sections for the tablet, as shown here: Section "InputDevice" Driver "graphireusb" Identifier "Mouse[3]" Option "Device" "/dev/input/event0" Option "InputFashion" "Tablet" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "cursor" Option "USB" "on" Option "Vendor" "Wacom" EndSection Section "InputDevice" Driver "graphireusb" Identifier "Mouse[5]" Option "Device" "/dev/input/event0" Option "InputFashion" "Pen" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos Stylus (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "stylus" Option "USB" "on" Option "Vendor" "Wacom" EndSection Section "InputDevice" Driver "graphireusb" Identifier "Mouse[7]" Option "Device" "/dev/input/event0" Option "InputFashion" "Pen" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos Eraser (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "eraser" Option "USB" "on" Option "Vendor" "Wacom" EndSection However, these need to be edited, and further items need to be added. Open the file in an editor: su pico /etc/X11/XF86Config and make changes as follows. In the Module section, add: Load "graphireusb" to load the tablet driver. In the InputDevice section for the tablet, change the lines: Identifier "Mouse[3]" Option "Type" "cursor" to read: Identifier "gmouse" Option "Type" "gmouse" In the InputDevice section for the stylus, change the lines: Identifier "Mouse[5]" Option "Type" "stylus" to read: Identifier "gstylus" Option "Type" "gstylus" In the InputDevice section for the eraser, change the lines: Identifier "Mouse[7]" Option "Type" "eraser" to read: Identifier "geraser" Option "Type" "geraser" Note that you MUST use these names with the graphireusb driver. If you use any others, the XServer will error on startup: "No type or invalid type specified" (the message will be in the log at /var/log/XFree86.0.log). This means that using graphireusb gives fewer options than using the wacom driver, since you can't set up the same physical device as two logical devices (see section 5.12 of the Wacom HOWTO). Next, in the ServerLayout section, add: InputDevice "gmouse" "SendCoreEvents" InputDevice "gstylus" "SendCoreEvents" InputDevice "geraser" "SendCoreEvents" The revised sections should then look something like this: Section "Module" Load "type1" Load "speedo" Load "extmod" Load "freetype" Load "glx" Load "graphireusb" EndSection Section "InputDevice" Driver "Keyboard" Identifier "Keyboard[0]" Option "Protocol" "Standard" Option "XkbLayout" "gb" Option "XkbModel" "pc105" Option "XkbRules" "xfree86" EndSection Section "InputDevice" Driver "mouse" Identifier "Mouse[1]" Option "ButtonNumber" "5" Option "Device" "/dev/mouse" Option "InputFashion" "Mouse" Option "Name" "Autodetection" Option "Protocol" "imps/2" Option "Vendor" "Sysp" Option "ZAxisMapping" "4 5" EndSection Section "InputDevice" Driver "graphireusb" Identifier "gmouse" Option "Device" "/dev/input/event0" Option "InputFashion" "Tablet" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "gmouse" Option "USB" "on" Option "Vendor" "Wacom" EndSection Section "InputDevice" Driver "graphireusb" Identifier "geraser" Option "Device" "/dev/input/event0" Option "InputFashion" "Pen" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos Eraser (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "geraser" Option "USB" "on" Option "Vendor" "Wacom" EndSection Section "InputDevice" Driver "graphireusb" Identifier "gstylus" Option "Device" "/dev/input/event0" Option "InputFashion" "Pen" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos Stylus (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "gstylus" Option "USB" "on" Option "Vendor" "Wacom" EndSection Section "ServerLayout" Identifier "Layout[all]" InputDevice "Keyboard[0]" "CoreKeyboard" InputDevice "Mouse[1]" "CorePointer" InputDevice "gmouse" "SendCoreEvents" InputDevice "gstylus" "SendCoreEvents" InputDevice "geraser" "SendCoreEvents" Option "Clone" "off" Option "Xinerama" "off" Screen "Screen[0]" EndSection Save the file XF86Config, and then close all windows and log out (to restart X). When X starts up again, log back in. If X does not start, log in as root at the console, and run: grep -i XINPUT /var/log/XFree86.0.log and grep -i graphireusb /var/log/XFree86.0.log which should give you an indication of the error. Correct it, log out, then log in as yourself, and run startx to launch X. If it still doesn't oblige, log back in as root, and revert to the old XF86Config file: cd /etc/X11 cp XF86Config.orig XF86Config Then go through the above steps again from scratch. Note that the USB subsystem is a bit fiddly on 8.0, and you may have to experiment with unloading various modules, or even rebooting to get a clean start environment. If all has gone well, and X has started without any problems, the above two commands should show something like this: babylon:/home/kevin # grep -i XINPUT /var/log/XFree86.0.log XFree86 XInput driver : 0.3 Module class: XFree86 XInput Driver ABI class: XFree86 XInput driver, version 0.3 Module class: XFree86 XInput Driver ABI class: XFree86 XInput driver, version 0.3 (II) Initializing built-in extension XInputExtension (II) XINPUT: Adding extended input device "geraser" (type: Graphire Eraser) (II) XINPUT: Adding extended input device "gstylus" (type: Graphire Stylus) (II) XINPUT: Adding extended input device "gmouse" (type: Graphire Mouse) (II) XINPUT: Adding extended input device "Mouse[1]" (type: MOUSE) babylon:/home/kevin # grep -i graphireusb /var/log/XFree86.0.log (II) LoadModule: "graphireusb" (II) Loading /usr/X11R6/lib/modules/input/graphireusb_drv.o (II) Module graphireusb: vendor="The XFree86 Project" (II) LoadModule: "graphireusb" (II) Reloading /usr/X11R6/lib/modules/input/graphireusb_drv.o (==) GraphireUSB tablet top X=0 top Y=0 bottom X=9897 bottom Y=7422 (==) GraphireUSB tablet top X=0 top Y=0 bottom X=9897 bottom Y=7422 (==) GraphireUSB tablet top X=0 top Y=0 bottom X=9897 bottom Y=7422 This shows that the 3 new devices have been recognised, and that the driver for the tablet has been loaded OK. It is also possible to use the wacom driver instead of the graphireusb driver. To do this, just replace in the XF86Config file the words "graphireusb" with "wacom", "gmouse" with "cursor", "gstylus" with "stylus", and "geraser" with "eraser", so that the end result looks like this: Section "Module" Load "type1" Load "speedo" Load "extmod" Load "freetype" Load "glx" Load "dri" Load "wacom" EndSection Section "InputDevice" Driver "keyboard" Identifier "Keyboard[0]" Option "Protocol" "Standard" Option "XkbKeyCodes" "xfree86" Option "XkbLayout" "gb" Option "XkbModel" "pc104" Option "XkbRules" "xfree86" EndSection Section "InputDevice" Driver "mouse" Identifier "Mouse[1]" Option "ButtonNumber" "5" Option "Device" "/dev/psaux" Option "InputFashion" "Mouse" Option "Name" "AutoDetected" Option "Protocol" "imps/2" Option "Vendor" "AutoDetected" Option "ZAxisMapping" "4 5" EndSection Section "InputDevice" Driver "wacom" Identifier "cursor" Option "Device" "/dev/input/event0" Option "InputFashion" "Tablet" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "cursor" Option "USB" "on" Option "Vendor" "Wacom" EndSection Section "InputDevice" Driver "wacom" Identifier "stylus" Option "Device" "/dev/input/event0" Option "InputFashion" "Pen" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos Stylus (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "stylus" Option "USB" "on" Option "Vendor" "Wacom" EndSection Section "InputDevice" Driver "wacom" Identifier "eraser" Option "Device" "/dev/input/event0" Option "InputFashion" "Pen" Option "KeepShape" "on" Option "Mode" "Absolute" Option "Name" "Graphire/Intuos Eraser (USB)" Option "Protocol" "Auto" Option "SendCoreEvents" "on" Option "Tilt" "on" Option "Type" "eraser" Option "USB" "on" Option "Vendor" "Wacom" EndSection Section "ServerLayout" Identifier "Layout[all]" InputDevice "Keyboard[0]" "CoreKeyboard" InputDevice "Mouse[1]" "CorePointer" InputDevice "cursor" "SendCoreEvents" InputDevice "stylus" "SendCoreEvents" InputDevice "eraser" "SendCoreEvents" Option "Clone" "off" Option "Xinerama" "off" Screen "Screen[0]" EndSection Log out and back in again, and a grep of the X log will show that the device has been started OK: babylon:/home/kevin # 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: 26 $ (II) LoadModule: "wacom" (II) Reloading /usr/X11R6/lib/modules/input/wacom_drv.o (II) Wacom driver level: 26 $ (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 Graphire2 4x5" (==) Wacom tablet maximum X=10206 maximum Y=7422 X resolution=0 Y resolution=0 suppress=9 (==) Wacom tablet top X=0 top Y=0 bottom X=9897 bottom Y=7422 (==) Wacom tablet top X=0 top Y=0 bottom X=9897 bottom Y=7422 (==) Wacom tablet top X=0 top Y=0 bottom X=9897 bottom Y=7422 There may be good arguments for using one driver rather than the other, but I don't know what they are! The best one I can see for using the wacom driver is that the graphireusb driver seems not to start properly sometimes. It complains that an invalid threshold has been set, and resets that to 0, which seems to prevent the pen and eraser working. Inserting Option "Threshold" "5" or Option "Threshold" "1" into the InputDevice sections for the pen and eraser worked sometimes, but not always. More serious is the fact that under both drivers, unplugging and replugging the tablet will mean that the GIMP loses contact with it, and doesn't see it when it is plugged in again. It is recognised OK by the system, so this may be a GIMP failing. The tablet input devices are still listed, but they are not operational. Logging in again and restarting GIMP leads to no devices at all being recognised. The only thing that works is a reboot! Pretty drastic.