Touch screen calibration linux

Ubuntu Wiki

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:

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/modprobe.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:

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.

Читайте также:  Starting apache server in linux

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.

Читайте также:  Veeam резервное копирование linux

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

eGalax Touchscreens in 14.04LTS

Files

You can get the files here on the website of EETI eGalax

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

 1  # /etc/modules: kernel modules to load at boot time.  2  #  3  # This file contains the names of kernel modules that should be loaded  4  # at boot time, one per line. Lines beginning with "#" are ignored.  5    6  loop  7  lp  8  usbtouchscreen  9  usbhid  10  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

 1  #!/bin/bash  2    3  description "Start the egalax touchscreen daemon on boot"  4  author "globeone Damiön la Bagh"  5    6  start on runlevel 2  7    8  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

Touchscreen (последним исправлял пользователь 200 2015-05-30 10:25:36)

The material on this wiki is available under a free license, see Copyright / License for details.

Источник

Calibrating Touchscreen

To use multiple displays (some of which are touchscreens), you need to tell Xorg the mapping between the touch surface and the screen. This can be done using xinput to set the touchscreen's coordinate transformation matrix.

This is a guide to do that, the old-fashioned way, in cases when xrandr does not know about your separate screens because they have been merged into one (e.g., when using TwinView). Everyone else, please go to Touchscreen to do it the easy way.

You will need to run the xinput command every time you attach the monitor or log in. Or course, you can add the command to your session-autostart. You can also use Udev to automate this.

Using nVidia's TwinView

Get to know your system

Your screen

Using TwinView, X will see all your Screens as one big screen. You can get your total height and width by executing

$ xrandr | grep \* # xrandr uses "*" to identify the screen being used

You should see a line like this:

what means, your total width is 3600 and your total height is 1230.

Your touch device

Your next job is to get your device's name. Execute

Читайте также:  Crossover linux как установить

and find it by its name. Find the item containing [slave pointer (2)] , which is usually your own device name. E.g. if the line can look like this

⎜ ↳ Acer T230H id=24 [slave pointer (2)]

Tip: If your device contains both a stylus and a touch screen and more touch devices, then please pay attention to the name when determining the device.

$ xinput list-props "Device Name"

and make sure there is a property called

Coordinate Transformation Matrix

(If not, you may probably selected the wrong device, please try another one.)

Touch area

You need to shrink your touch area into a rectangle which is smaller than the total screen. This means, you have to know four values:

  • Height of touch area
  • Width of touch area
  • horizontal offset (x offset) (amount of pixels between the left edge of your total screen and the left edge of your touch area)
  • vertical offset (y offset) (amount of pixels between the top edge of your total screen and the top edge of your touch area)

Calculate the Coordinate Transformation Matrix

Now, calculate these as accurate as possible:

  • c0 = touch_area_width / total_width
  • c2 = touch_area_height / total_height
  • c1 = touch_area_x_offset / total_width
  • c3 = touch_area_y_offset / total_height
[ c0 0 c1 ] [ 0 c2 c3 ] [ 0 0 1 ]

which is represented as a row-by-row array:

Apply the Matrix

$ xinput set-prop "Device Name" --type=float "Coordinate Transformation Matrix" c0 0 c1 0 c2 c3 0 0 1
$ xinput set-prop "Acer T230H" --type=float "Coordinate Transformation Matrix" 0.533333333 0 0 0 0.87804878 0.12195122 0 0 1

to calibrate your touchscreen device. Now, it should work properly.

Do it automatically via a udev rule

Create a file something like /etc/udev/rules.d/99-acer-touch.rules with contents like this:

/etc/udev/rules.d/99-acer-touch.rules
ENV=="2149",ENV=="2703",ENV="DVI1",ENV="1 0 0 0 1 0"

Substitute your own touchscreen's vendor ID, model ID, the xrandr output name, and the calibration matrix that you calculated above. This is based on the assumption that you are using the libinput driver for your touchscreen.

Wayland

Using libinput you can calibrate your touchscreen on Wayland compositors. See the libinput documentation.

If you have weston installed, you can use the weston-calibrator utility to get the transformation matrix. You can then apply it using a udev rule.

Troubleshooting

If, after following these instructions, multiple clicks occur in different places when you touch the screen, you will need to build the xorg-server package using the ABS, applying this patch before you build the package. (This patch fails on the current xorg source, but the bug is present on at least 1 system.)

Using libinput

The libinput package provides a few utilities to debug input events:

  • The libinput debug-events command provides a list of events emitted by all devices, including the touchscreen driver. You can use the --verbose option to get more information.
  • libinput debug-gui provides a graphical debug environment. This can be useful to verify visually that the transformation matrix has the correct values.
  • libinput list-devices lists all input devices. This can be useful to identify the name and eventual attributes of an input device. Using this command you can also verify that the transformation matrix was applied correctly.

For more information see the troubleshooting section of the libinput page.

See also

Источник

Оцените статью
Adblock
detector