Linux Touch Screens
From: https://wiki.ubuntu.com/Touchscreen
Touchscreen
This page is a documentation of my dealings with various touchscreen devices
I've encountered. In my experience, most modern devices work out of the box with
both 10.04 LTS or 12.04 LTS, but lack the proper calibration or configuration.
Some older devices, especially those embedded in laptops such as GD Itronix line
of rugged computers, use serial interfaces which lack the configuration to work
in Linux. The methods documented here should work with other distros as well.
Global Dynamics Itronix GoBook XR-1
This is a rugged laptop I picked up from ebay for a good price, which the
seller wiped with Ubuntu 10.04 due to the expense of Microsoft's Windows
relicensing fee. The device has an integrated serial touchscreen, and the
manufacturer is notorious for hiding any and all documentation on legacy
devices such as this one. With a little trial and error however, it's
relatively simple to configure this and similar devices. This method should
work for most GD products, including the newer GD8000 which replaced this
device. Skip to the section for configuring serial devices for these
machines.
Checking for touchscreen connectivity
When encountering a new device, the first order of business is to determine how
the touchscreen is connected to your computer. If the touchscreen produces no
events out of the box, check to see if it's an USB device or not:
lsusb
USB connection
Check the output for any reference to a touchscreen. If your touchscreen has an
USB interface, and it isn't working, then you may need to blacklist the
usbtouchscreen driver for it to work:
sudo modprobe -r usbtouchscreen
If your touchscreen begins to produce events, then you can permanently blacklist
the usbtouchscreen driver:
echo "blacklist usbtouchscreen" | sudo tee -a /etc/m
odprobe.d/blacklist.conf
Some touchscreens might already have good or perfect calibrations, otherwise
you'll need to continue to the calibration section.
Serial connection
If there is no reference to a touchscreen device in your lsusb output, the
connection is most likely through one of your serial ports. The actual IRQ
mapping varies between manufacturers. In the case of Itronix devices, the
default is /dev/ttyS3. A simple way to check for connections is to check each
one for events:
screen /dev/ttyS0
Touch anywhere on your screen to check for any character output. If nothing
happens, quit screen by pressing Ctrl+A and then the '\' key to quit. Continue
with /dev/ttyS1, etc. until you get a response. Once you've determined the
device, we can try a few different drivers. In the case of Itronix (and most
other devices using the Touchkit driver), the correct driver is touchit213.
sudo inputattach --touchit213 /dev/ttyS3
Will work for most touchkit screens. The calibration or one or more axes may be
swapped, but if the calibration is approximate then it's probably the correct
driver. Press Ctrl+C to try a new mode. inputattach supports any of the
following modes, which includes external touchscreens which may attach through
a physical serial port:
| |
|
--h3600ts | -ipaq | Ipaq h3600 touchscreend
|
--elotouch | -elo | ELO touchscreen, 10-byte mode
|
--elo4002 | -elo6b | ELO touchscreen, 6-byte mode
|
--elo271-140 | -elo4b | ELO touchscreen, 4-byte mode
|
--elo261-280 | -elo3b | ELO Touchscreen, 3-byte mode
|
--mtouch | -mtouch | MicroTouch (3M) touchscreen
|
--touchit213 | -t213 | Sahara Touch-iT213 Tablet PC
|
--touchright | -tr | Touchright serial touchscreen
|
--touchwin | -tw | Touchwindow serial touchscreen
|
--penmount | -pm | Penmount touchscreen
|
--fujitsu | -fjt | Fujitsu serial touchscreen
|
If your device is built into a laptop, you'll have the best luck with the mtouch
, touchright, touchwin, or touchit213 drivers. Likewise, non-Elo external
touchscreens will most likely use touchit213. If your device is a tablet with
stylus-only input, fujitsu is a popular maker of embedded tablet devices.
To attach the touchscreen at startup, edit your /etc/rc.local to look like the
following:
/usr/bin/inputattach --daemon --always -t213 /dev/ttyS3
exit 0
Replace -t213 with your appropriate driver and /dev/ttyS3 with the correct
device.
Again, don't worry if the calibration isn't perfect, or if an axis is inverted
or reversed - this will be addressed in the calibration section.
Calibration
Thanks to the wonderful work of the freedesktop.org developers, calibration
is no longer a black art in Linux. The calibration utility is included in
Ubuntu 12.04 and later:
sudo apt-get install xinput-calibrator
And for 10.04, there's a ppa available:
sudo add-apt-repository ppa:tias/xinput-calibrator-ppa
sudo apt-get update && sudo apt-get install xinput-calibrator
Packages and source files are available for other distros here.
The use is pretty straight forward. I had issues getting it to work properly
with HAL, however this will work regardless:
xinput_calibrator --output-type xinput
Follow the instructions pressing each target, and the calibration output will be
printed to the terminal. The calibration will be set immediately, but will not
survive reboots. If you're using GDM, you can put the calibration command in
your /etc/gdm/Init/Default. I placed calibration values for my XR-1 in both GDM
and as a gnome startup script, since it uses automatic login:
/usr/bin/xinput set-prop "Sahara Touch-iT213 Serial TouchScreen" "Evdev Axis
Inversion" 0 1
/usr/bin/xinput set-int-prop "Sahara Touch-iT213 Serial TouchScreen" "Evdev
Axis Calibration" 32 27 2027 39 1977
Inverted/reversed axes
If your axes are swapped or reversed with the calibration output from
xinput_calibrator (after a reboot or X restart), you may need to invert them
explicitly, as I did with the XR-1.
xinput set-prop "Sahara Touch-iT213 Serial TouchScreen" "Evdev Axis
Inversion" 0 1
The 0 and 1 in the above command enables axis inversion for the x or y axis
(0=normal, 1=invert).
If your x and y axis are swapped, use the "Evdev Axis Swap" 1 verb:
xinput set-prop "Sahara Touch-iT213 Serial TouchScreen" "Evdev Axis Swap" 1
When you're satisfied with the result, you may need to perform calibration again
with xinput-calibrator.
Troubleshooting
Different modes and drivers accept different xinput options. To get your
touchscreen's device name, use xinput list. Individual driver options can be
obtained by using xinput list-props , where is either
the device name as a string or the id= number.
eGalax Touchscreens in 14.04LTS
After fighting with USB eGalaxy Touchscreens for a week or so the solution
turned out to be quite simple. I've documented everything with photos here
on Google Drive
https://docs.google.com/document/d/1G4oD6Y8vlyNHW6wJT89pxcjWHoETLLT
-SEoAIW6_7Xc/pub
Files
You can get the files here on the website of EETI eGalax
http://www.eeti.com.tw/drivers_Linux.html
Unzip the file
Just unzip the file in the current directory
gunzip /home/$USER/Downloads/eGTouch_v2.5.4330.L-x.zip
Here is a quick rundown of the steps
Ensure the Kernel Modules start on boot
Modify the file /etc/modules to add the modules usbtouchscreen and usbhid. These
must come after lp and before rtc.
/etc/modules
Toggle line numbers
- # /etc/modules: kernel modules to load at boot time.
- #
- # This file contains the names of kernel modules that should be
loaded
- # at boot time, one per line. Lines beginning with "#" are ignored.
-
- loop
- lp
- usbtouchscreen
- usbhid
- rtc
=====================
Load the Kernel Modules (only the 1st time)
Then load the modules by hand the 1st time (or reboot)
sudo modprobe usbtouchscreen usbhid
Move the Daemon and Calibration Files
Move al the files in the folder /home/user/Downloads
/eGalax/eGTouch_v2.5.4330.L-x/eGTouch64/eGTouch64withX to /usr/local/bin/
*Note the following command is one line
sudo rsync -avz /home/$USER/Downloads/eGalax/eGTouch_v2.5.4330.L
-x/eGTouch64/eGTouch64withX /usr/local/bin/
Place Upstart Job
place the following Upstart job in /etc/init
/etc/init/egalaxtouch.conf
Toggle line numbers
- #!/bin/bash
-
- description "Start the egalax touchscreen daemon on boot"
- author "globeone Damiƶn la Bagh"
-
- start on runlevel 2
-
- exec /usr/local/bin/eGTouchD
=========================
Start the Touchscreen Daemon
Start the touchscreen daemon with the following command
sudo service egalaxtouch start
Calibration
Calibrate the Touchscreen with eGTouchU
sudo /usr/local/bin/eGTouchU
For Dual Screen Configurations:
Follow the onscreen prompts of the config program for dual screen setup choose
Left or Right mode!
Then calibrate the screen using the tools tab