<!doctype linuxdoc system>
<!-- LinuxDoc file was created by hand and emacs
 Fri Dec 10 17:45:29 GMT 1999 -->
<article>
<title>
Linux Touch Screen HOWTO
</title>
<author>
(c) 2002-2006 by Christoph Baumann, cgb(at)debian.org
</author>
<date>v3.4 -- Nov 7, 2006 -- the GNU Free
Documentation License applies to this document
</date>
<abstract>
This document describes how to set up a touch screen input device under 
XFree86. As the author had only the opportunity to work with devices
from EloTouch(R) and MicroTouch(R) this HOWTO is rather specific for these
devices. The examples given in this HOWTO concentrate on devices
connected via the serial port i.e. /dev/ttyS0 or /dev/ttyS1.
(Information about USB devices would be appreciated!)
</abstract>
<toc>

<sect>How to configure the device
<p>
Touch screen devices are configured in the Xinput section in the XF86Config
file (mostly /etc/X11/XF86Config or /etc/XF86Config).
At first verify that the device driver modules exist. They are located in
/usr/X11R6/lib/modules/ (the modules for the above mentioned devices are 
xf86Elo.so and xf86MuTouch.so). Now have a look into XF86Config.
There should be a section looking like this:
</p>

<p><verb>
Section "Files"
...
ModulePath "/usr/X11R6/lib/modules"
...
EndSection
</verb></p>
<p>
To get the module loaded by the X server there has to be a section like this:
</p>
<p><verb>
Section "Module"
Load "xf86Elo.so"
EndSection
</verb></p>
<p>
Now the more tricky part. X needs to know some parameters about the device.
The section for this looks like this (see "man XF86Config" for more details):
</p>
<p><verb>
Section "Xinput"
 SubSection "Elographics"  
#the entry for a MicroTouch device would be SubSection "MicrotouchFinger"
  Port "/dev/ttyS1" # for a device at serial port 2
  DeviceName "TouchScreen" #could be any unambiguous name
  MinimumXPosition 300
  MaximumXPosition 3700
  MinimumYPosition 300
  MaximumYPosition 3700
  UntouchDelay 10 #not supported with MuTouch
  ReportDelay 10  #not supported with MuTouch
  AlwaysCore #activates the device on startup
 EndSubSection
EndSection
</verb></p>

<p>
The values for the entries MinimumXPosition etc. are of course specific
for the setup of the hardware (i.e. depend on the position of the touch
screen relative to the monitor). The values determine where the points (0,0)
and (xmax,ymax) on your monitor (xmax and ymax depend on the resolution
chosen for the Xserver, such as 1024x768) are mapped on the touch screen.
The device driver reads these values and interpolishes the other coordinates.
For illustration:
</p>

<p><verb>
 --------------touch screen area-----------------
 I                                              I
 I  ########visible monitor area##############  I
 I  #x                                       #  I
 I  # (0,0)                                  #  I
 I  # (MinimumXPosition,MinimumYPosition)    #  I
 I  #                                        #  I
 I  #                                        #  I
 I  #                                        #  I
 I  #                                        #  I
 I  #                                        #  I
 I  #                                        #  I
 I  #                                        #  I
 I  #     (MaximumXPosition,MaximumYPosition)#  I
 I  #                             (xmax,ymax)#  I
 I  #                                       x#  I
 I  ##########################################  I
 I                                              I
 ------------------------------------------------
</verb></p>

<p>
This mapping can be done by trial and error or by reading the raw output
of the device (needs some serial port programming, see "The Linux Serial 
Programming HOWTO"). For the types EloTouch and MicroTouch exists a
rudimentary calibration tool (written by the author of this document,
it can be found at 
<url
url="http://touchcal.sourceforge.net"
name="http://touchcal.sourceforge.net">).
</p>


<sect>Activating the device
<p>
After starting X, type in an Xterminal the command 
<p><tt>xsetpointer &lt;devicename&gt;</tt></p>
<p>
where<tt>&lt;devicename&gt;</tt> is the name defined in XF86Config  
with the line
<tt>DeviceName "....."</tt>, in this example it would be TouchScreen.
</p>
<p>To get the device working on startup use the AlwaysCore option in
the touch screen section (see above)</p>

<sect>Using touch screen and mouse in parallel
<p>
To use the touch screen and a mouse in parallel you need to enter the
mouse specs in the Xinput-section. This definitions should be the same
as in the Pointer-section. The following example is for a
PS/2-mouse:
<verb>
Section "Xinput" 
   SubSection "Mouse" 
      Protocol "PS/2" 
      Port "/dev/mouse" #could also be /dev/psaux 
      DeviceName "Mouse" 
      AlwaysCore 
   EndSubSection
...
EndSection 
</verb>
Several people pointed this out, especially the usage of the
AlwaysCore option. Thanks to them all.
</p>

<sect>Configuration under XFree86 4
<p>
(from Lee Monamy)
</p>
<p>
Example XF86Config-4 for an ELO touch screen:

<verb>
Section "InputDevice"
        Identifier "ELO touchscreen"
        Driver "elographics"
        Option  "Device"        "/dev/ttyS0"
        Option  "MinimumXPosition"      "300"
        Option  "MaximumXPosition"      "3700"
        Option  "MinimumYPosition"      "300"
        Option  "MaximumYPosition"      "3700"
        Option  "UntouchDelay"  "10"
        Option  "ReportDelay"   "10"
        Option  "SendCoreEvents"        "yes"
EndSection
</verb>

Noteable differences between this and the version 3 config are that you
specify a Device, *not* a Port, otherwise you get an error.
Also, AlwaysCore from v3 has been replaced with SendCoreEvents.
</p>

<p>
You must also add to the ServerLayout section, despite that X might
say:
"(II) XINPUT: Adding extended input device "TOUCHSCREEN" (type:
Elographics Touch Screen)"
</p>
<p>
<verb>
Section "ServerLayout"
        Identifier      "Default Layout"
        Screen  "Default Screen"
        InputDevice "Generic Keyboard"
...
        InputDevice "ELO touchscreen"
EndSection
</verb>
</p>

<sect1>Another configuration example
<p>
from Dirk Mueller 
(for Microtouch SMT3 Series):
</p>
<p>
<verb>
Section "InputDevice"
        Identifier  "MicroTouchFinger"
        Driver      "mutouch"
        Option      "Type" "finger"
        Option      "Device" "/dev/ttyS0"
        Option      "ScreenNo" "0"
        Option      "MinimumXPosition" "0"
        Option      "MaximumXPosition" "16383"
        Option      "MinimumYPosition" "0"
        Option      "MaximumYPosition" "16383"
EndSection
</verb>
</p>
<p>
Option "Type" can be "finger" or "stylus"
Since Microtouch was bought by 3M-Touch, the resources are on
<url
url="http://www.3M.com/3MTouchSystems/downloads/legacy.jhtml#Linux"
name="http://www.3M.com/3MTouchSystems/downloads/legacy.jhtml#Linux">
</p>

<sect1>Addendum
<p>
According to Wong Yeow Sen the configuration option names have changed
in XFree86 4.2 (at least with Red Hat 7.3). If it seems your
calibration values aren't parsed try the following:
</p>
<p>
<verb>
...
        Option  "MinX"      "100"
        Option  "MaxX"      "4000"
        Option  "MinY"      "100"
        Option  "MaxY"      "4000"
...
</verb>
</p>


<sect>Touch Screens on Fujitsu LifeBooks
<p>(from Joerg Hau)</p>
<p>Information about these devices can be found here:</p>
<p>"...</p>
<p>
Harald Hoyer's Linux Touch Panel Drivers for the Fujitsu Lifebooks
B112/B142/B2130, 
<url url="http://parzelle.de/Linux/Lifebook/"
name="http://parzelle.de/Linux/Lifebook/">. Unfortunately,
this is XFree 3.x only and it seems that this information is now
"static" (dead?).
</p>

<p>
Kenan Esau's Lifebook Series B Touchscreen driver, which is the
adaptation of Harald's driver to XFree 4.x.
<url
url="http://www.conan.de/lifebook/lifebook.html"
name="http://www.conan.de/lifebook/lifebook.html">.
</p>

<p>
I [Joerg Hau] have used Kenan's driver on my Fujitsu LifeBook B142 
(described at
<url url="http://www.mysunrise.ch/users/joerg.hau/linux/b142.htm"
name="http://www.mysunrise.ch/users/joerg.hau/linux/b142.htm">), 
and it works like a charm.
</p>

<p>..."</p>

<sect>Configuration under X.Org
<p>
(from Kenan Bektas)
</p>
<p>
Example xorg.conf for an Elo TouchSystems 2216 AccuTouch&reg; USB Touch-Monitor:
<verb>
Section "InputDevice"
    Identifier "elo"
    Driver "elo"
    Option "AlwaysCore"
    Option "MinX"          "300"
    Option "MaxX"          "3700"
    Option "MinY"          "300"
    Option "MaxY"          "3700"
    Option "ScreenNumber"  "0"
    Option "ButtonNumber"  "1"
EndSection
</verb>
</p>

<sect>Suggested reading
<p>
<itemize>
<item>Manpage for XF86Config
<item><url url="http://www.elotouch.com/support/linux.asp"
name="http://www.elotouch.com/Support/linux.asp">
<item><url url="http://www.3M.com/3MTouchSystems/downloads/legacy.jhtml#Linux"
name="http://www.3M.com/3MTouchSystems/downloads/legacy.jhtml#Linux">
<item><url url="http://www.hof-berlin.de/tablet/tablet.html"
name="http://www.hof-berlin.de/tablet/tablet.html"> (Thanks to
Christer Olofsson for sending me this URL)
<item><url url="http://freshmeat.net/projects/xf86elousb"
name="http://freshmeat.net/projects/xf86elousb"> (Driver for iTouch USB)
<item>The manual shipped with your touch screen :-)
</itemize>
</article>

