Posts Tagged ‘how to’
ELO Touchscreen monitor under Linux
*Edit* I have updated this to no longer require you to edit xorg.conf. This also fixes issues if the touchscreen’s usb cable is hotplugged while X is already running.
I recently purchased an ELO 1537L 15-inch open-frame touchmonitor for a project I am doing at work. I have successfully gotten the touchscreen monitor to work under linux (specifically Scientific 6.x) using USB (I haven’t tried the serial interface). Plugging in the monitor, it is recognized as a 5020 Surface Capacitive:
19746:Aug 3 02:51:13 localhost kernel: usb 2-1: Product: Elo TouchSystems Surface Capacitive 5020
19747:Aug 3 02:51:13 localhost kernel: usb 2-1: Manufacturer: Elo TouchSystems
19750:Aug 3 02:51:13 localhost kernel: input: Elo TouchSystems Elo TouchSystems Surface Capacitive 5020 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1:1.0/input/input7
19751:Aug 3 02:51:13 localhost kernel: generic-usb 0003:04E7:0042.0003: input,hidraw2: USB HID v1.11 Pointer [Elo TouchSystems Elo TouchSystems Surface Capacitive 5020] on usb-0000:00:1d.0-1/input0
ELO provides some generic drivers for this device. I first attempted to directly use them and found them to be a complete disaster. The whole configuration was really silly (putting stuff into /etc/opt, are you kidding me?). The elo daemon constantly hung and had to be restarted. Restarting X caused the daemon to stop working, thus the touchscreen stopped working.
I quickly removed these drivers and tried it with the evtouch drivers which I have used for a USB displaylink touchscreen monitor in the past (MIMO). With a few changes to my xorg.conf, the evtouch driver immediately recognized it and I was able to capture touch events. Although the calibration was initially completely off.
Here’s the steps I took to get this working on Scientific Linux 6.0
Install evtouch
Unfortunately, Scientific Linux does not come with the evtouch driver. I have built a 64-bit rpm for Scientific Linux here . If you need a 32-bit version or for another platform (Fedora), download the src rpm and rebuild it (rpmbuild –rebuild xorg-x11-drv-evtouch-0.8.8-1.el6.src.rpm).
Setup Xorg
It is not required to directly edit xorg.conf. Instead, we will create a hal fdi file
We will create an fdi file in /etc/hal/fdi/policy called elo_touchscreen.fdi
/etc/hal/fdi/policy/elo_touchscreen.fdi
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="input.product" contains="Elo TouchSystems, Inc. Elo TouchSystems Surface Capacitive 5010">
<merge key="input.x11_driver" type="string">evtouch</merge>
<merge key="input.x11_options.MinX" type="string">3724</merge>
<merge key="input.x11_options.MaxX" type="string">318</merge>
<merge key="input.x11_options.MinY" type="string">3724</merge>
<merge key="input.x11_options.MaxY" type="string">318</merge>
<merge key="input.x11_options.SwapX" type="string">true</merge>
<merge key="input.x11_options.SwapY" type="string">true</merge>
</match>
</device>
</deviceinfo>
If your monitor is slightly different, you will need to get the product id, and replace the match key=”input.product” line in the above file.
$ lshal | grep input.product
input.product = 'Sleep Button' (string)
input.product = 'Power Button' (string)
input.product = 'Macintosh mouse button emulation' (string)
input.product = 'ImExPS/2 Generic Explorer Mouse' (string)
input.product = 'AT Translated Set 2 keyboard' (string)
input.product = 'Elo TouchSystems, Inc. Elo TouchSystems Surface Capacitive 5010' (string)
You should now be able to unplug and plug your touchscreen back in and have it work without restarting X
Calibration
The MinX,MinY,MaxX,MaxY values are used for calibrating the touchscreen. The evtouch source available on their site comes with a calibration utility. However, I was unable to get this to run. For me I played with the MinX, MaxX, MinY, MaxY values in my xorg.conf until it was close enough. As you can see, I had to mirror both the X and Y values.
Other Drivers
I noticed that Scientific Linux also includes an elographics package: xorg-x11-drv-elographics. I have no idea if this works better or not although I have heard they only work with the serial interface. I have it working with evtouch, so I’m happy. If anyone has tried the elographics and had success, please comment!
Genius G-Pen F350 under Ubuntu 9.10 (Karmic)
I purchased a Genius G-Pen F350 for cheap last week. I am working on translating a book from Chinese, and need to look up characters. The quickest way to do this is to draw the character and use handwriting recognition software such as tegaki. My mousing skills are subpar, so I though a tablet would help. I picked the Genius for several reasons: it was cheap, it was thin so I can carry it to chinese class, it’s supposed to work under Linux.
Unfortunately, this table does not work out of the box on Ubuntu 9.10 (Karmic). Plugging it in recognizes it as a mouse which can be controlled with the pen. Unfortunately, none of the buttons work, and the tablet isn’t relative to the screen (i.e., if you touch the upper left part of the tablet, the mouse should jump to the upper left part of your screen). After digging around, I have finally been able to get this to work satisfactorally. Some things are not working, such as the buttons or all the shortcuts, but for my needs, it works well. Here’s the steps I took:
Install the wizardpen driver
There are two ways to do this:
- You can try this precompiled .deb for 32-bit Ubuntu Karmic
- Download the following deb: GeniusMousePen
- Install the .deb by double clicking on it.
- Or you can build the source for yourself
- Download the source
- Extract it:
$ tar zxvf wizardpen-0.7.0-alpha2.tar.gz
$ cd wizardpen-0.7.0-alpha2
- Install the necessary development packages:
$ sudo aptitude install xutils libx11-dev libxext-dev build-essential xautomation xinput xserver-xorg-dev - Compile it:
$ ./configure --with-xorg-module-dir=/usr/lib/xorg/modules
$ make - Install it:
$ sudo make install
Configure the driver
The install should have copied a file called 99-x11-wizardpen.fdi into /etc/hal/fdi/policy/. You will need to edit this file with your favorite text editor and change a few things. For example, in mine, I needed to change the info.product line to WALTOP International Corp. Slim Tablet. I got the name from the output of grep -i name /proc/bus/input/devices:
$ grep -i name /proc/bus/input/devices
N: Name="Lid Switch"
N: Name="Power Button"
N: Name="Sleep Button"
N: Name="Macintosh mouse button emulation"
N: Name="AT Translated Set 2 keyboard"
N: Name="Video Bus"
N: Name="Logitech Optical USB Mouse"
N: Name="DualPoint Stick"
N: Name="AlpsPS/2 ALPS DualPoint TouchPad"
N: Name="Dell WMI hotkeys"
N: Name="HDA Intel Mic at Ext Left Jack"
N: Name="HDA Intel HP Out at Ext Left Jack"
N: Name="WALTOP International Corp. Slim Tablet"
Save this file, then unplug and replug in your tablet. The new settings should be picked up immediately. You will probably also need to change the TopX, TopY, BottomX, and BottomY values. Please see the next section on calibration.
Calibration
Hopefully at this point your tablet is basically working. However, for it to be useful, it needs to be calibrated. You can try to guess on these values or you can use the calibration tool that came in the wizardpen-0.7.0-alpha2.tar.gz package from above (it is not included in the .deb!). Extract the source archive and go into the calibrate folder. There should already be a wizardpen-calibrate executable. If not, run make to build it.
To calibrate your device, run:
$ sudo ./wizardpen-calibrate /dev/input/event6
You may need to replace /dev/input/event6 with the event your tablet is on. You can figure this out by running:
$ ls -l /dev/input/by-id
total 0
lrwxrwxrwx 1 root root 9 2010-01-06 10:56 usb-Logitech_Optical_USB_Mouse-event-mouse -> ../event7
lrwxrwxrwx 1 root root 9 2010-01-06 10:56 usb-Logitech_Optical_USB_Mouse-mouse -> ../mouse2
lrwxrwxrwx 1 root root 9 2010-01-06 11:25 usb-WALTOP_International_Corp._Slim_Tablet-event-if00 -> ../event6
As you can see, my tablet points to event6. Follow the directions of the calibration tool, and it will give you the TopX, TopY, BottomX, and BottomY values you need to replace in your 99-x11-wizardpen.fdi
Changing the sensitivity
The buttons on mine did not work, and it is by default way to sensitive. By changing the pressure, you can specify how hard you must push down before it pushes the left mouse button. This means you can lightly drag the pen and it will just move the mouse. But if you push down harder, it will push and hold the left mouse button down. You can change this by adding the following to your 99-x11-wizardpen.fdi (make sure you add it next to the other lines starting with merge)
<merge key="input.x11_options.TopZ" type="string">512</merge>
Valid values are 0 to 1024. The higher the value, the more you need to push down before the left mouse button activates. I found 512 to be an acceptable value. However, if you are trying to do pressure sensitive drawing, this may not be ideal.
My entire /etc/hal/fdi/policy/99-x11-wizardpen.fdi looks like:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<deviceinfo version="0.2">
<device>
<!-- This MUST match with the name of your tablet -->
<match key="info.product" contains="WALTOP International Corp. Slim Tablet">
<merge key="input.x11_driver" type="string">wizardpen</merge>
<merge key="input.x11_options.SendCoreEvents" type="string">true</merge>
<merge key="input.x11_options.TopZ" type="string">512</merge>
<merge key="input.x11_options.TopX" type="string">573</merge>
<merge key="input.x11_options.TopY" type="string">573</merge>
<merge key="input.x11_options.BottomX" type="string">9941</merge>
<merge key="input.x11_options.BottomY" type="string">5772</merge>
<merge key="input.x11_options.MaxX" type="string">9941</merge>
<merge key="input.x11_options.MaxY" type="string">5772</merge>
</match>
</device>
</deviceinfo>