Ubuntu 12.04 „Precise Pangolin“
Ubuntu 10.04 „Lucid Lynx“
Die meisten Touchscreens funktionieren mittlerweile unter Ubuntu ohne weitere Anpassung problemlos. Jedoch ist es in der Standardinstallation des Systems nicht vorgesehen, einen angeschlossenen Touchscreen zu konfigurieren oder zu kalibrieren. Dies wird in diesem Artikel behandelt.
Erfreulicherweise werden gerade Touchscreens für Spezialanwendungen (z.B. für Car-Pcs) oftmals auch herstellerseitig mit Treibern und Tools für Linux versorgt. Sollte der Screen bereits mit Boardmitteln funktionieren, ist von einer nachträglichen Installation von Herstellersoftware jedoch abzuraten, da diese entweder für ältere/veraltete Systeme (Stichwort xorg, evtouch) entwickelt wurde und/oder tiefere Eingriffe in das System und den Kernel erfordert.
Ab Ubuntu 11.04 wird der Touchscreen ausschließlich über evdev angesteuert.
Um den Screen zu kalibrieren, kann das Werkzeug xinput-calibrator verwendet werden.
xinput-calibrator
mit apturl
Paketliste zum Kopieren:
sudo apt-get install xinput-calibrator
sudo aptitude install xinput-calibrator
Das Programm ist nach der Installation in der Systemverwaltung unter "Touchscreen kalibrieren" zu finden. Im Terminal lässt es sich mit dem Befehl:
xinput_calibrator
starten. Nach Ausführen und Durchlaufen des Programms werden einige Parameter ausgegeben, die manuell in /etc/X11/xorg.conf.d/99-calibration.conf einzufügen sind (normalerweise müssen Datei und Verzeichnis vorher erst noch angelegt werden).
Unter Ubuntu 10.04 kann der Touchscreen bereits mit evdev angesteuert werden, die Vorgehensweise gleicht dann der oben beschriebenen. Alternativ lassen sich viele Screens auch mit dem Xorg-Treiber evtouch
einrichten. Voraussetzung ist die Installation [1] des Xorg-Treibers:
xserver-xorg-input-evtouch universe
mit apturl
Paketliste zum Kopieren:
sudo apt-get install xserver-xorg-input-evtouch universe
sudo aptitude install xserver-xorg-input-evtouch universe
Ubuntu 10.04 benutzt sogenannte xorg.conf.d-snippets. Dazu muss die Datei /usr/share/X11/xorg.conf.d/50-evtouch.conf bearbeitet werden:
Section "InputClass" Identifier "touchscreen catchall" MatchIsTouchscreen "on" MatchDevicePath "/dev/input/event*" Driver "evtouch" # hier Optionen einfügen EndSection
Diese Optionen werden nur dann geladen, wenn ein Touchscreen angeschlossen wurde. Um die Änderungen zu übernehmen, muss der XServer neu gestartet werden.
Die eleganteste Lösung wäre eigentlich, eine neue Datei anzulegen (wie unter xorg.conf.d beschrieben), aber dies kann dazu führen, dass der XServer versucht, diese Einstellungen auch auf die Maus anzuwenden, worauf sich dann das ganze System aufhängen kann (siehe auch LG 1730SF on Ubuntu 10.04 Lucid Lynx ).
Option | Default | Verhalten | |
Device | Gerätedatei für das Touchscreen. Üblicherweise /dev/input/event1 , /dev/input/event2 oder höher. Wird hier ein falscher Wert eingetragen, ist der Touchscreen meist verwendbar, doch sind alle Einstellungen wirkungslos. | ||
MinX | Pixel, an dem der Touchscreen links beginnt. | ||
MinY | Pixel, an dem der Touchscreen oben beginnt. | ||
MaxX | Pixel, an dem der Touchscreen rechts endet. | ||
MaxY | Pixel, an dem der Touchscreen unten endet. | ||
TapTimer | 200 | Zeit in Millisekunden, die man den Touchscreen berühren muss, damit ein Klick-Ereignis ausgelöst wird. | |
LongTouchTimer | 400 | Zeit in Millisekunden, die man den Tochscreen berühren muss, damit ein Lang-Klick-Ereignis ausgelöst wird. | |
Emulate3Buttons | true | Emulation einer Drei-Tasten-Maus | |
Emulate3Timeout | 50 | Zeit in Millisekunden, die man die zwei Tasten drücken muss, damit ein Mittel-Klick-Ereignis ausgelöst wird. | |
MoveLimit | 30 | Radius in Pixeln, innerhalb dessen man beim Klicken bleiben muss, damit der Klick nicht zu einem Ziehen wird. | |
SwapX | false | X-Achse umkehren (links wird zu rechts und anders herum) | |
SwapY | false | Y-Achse umkehren (oben wird zu unten und anders herum) | |
Rotate | Drehung des Touchscreens: cw (im Uhrzeigersinn) oder ccw (gegen den Uhrzeigersinn) |
Die Gerätedatei kann sich durch das nachträgliche Anschließen mehrerer USB-Geräte verändern. Mit dem Programm udev kann man sich einen symbolischen Link /dev/input/touchscreen
erstellen, der dann immer auf die richtige Gerätedatei verweist.
Um die Kalibrationsdaten für minX/maxX
und minY/maxY
zu erhalten, kann xinput_calibration verwendet werden. Diesem Werkzeug sollte jedoch die aktuelle Konfiguration übergeben werden, damit die Resultate auch stimmen:
./xinput_calibrator --output-type xorg.conf.d --precalib <minX> <maxX> <minY> <maxY>
Falls der Touchscreen nicht der einzige ist (beispielsweise ein TouchNotebook mit Beamer), gibt es eine modifizierte Version von xinput , der man mittels
--geometry
-Parameter mitteilen kann, welcher Schirm der richtige ist:
cd <Ordner wo xinput hin soll> git clone https://github.com/floe/xinput_calibrator.git sh autogen.sh --with-gui=x11 make cd src/ ./xinput_calibrator --output-type xorg.conf.d --precalib <minX> <maxX> <minY> <maxY> --geometry <Breite>x<Höhe>+<X>+<Y>
Bei einigen Touchscreens kann es nach dem Anschließen passieren, dass das Device zwar erkannt wird und auch Eingaben verarbeitet, allerdings eine Achse (meist die X-Achse) spiegelverkehrt interpretiert wird ("Drück links auf den Schirm - Maus springt nach rechts"). Um das Problem beheben zu können, muss man erst einmal die ID des Touchscreens ermitteln. Dazu wird im Terminal der Befehl
xinput list
eingegeben. Aus der Ausgabe lässt sich die ID des Touchscreens ablesen (bei Mehrfachnennung einfach ausprobieren). Mit
xinput set-prop <ID> 'Evdev Axis Inversion' <X> <Y>
lassen sich nun die Eingabekoordinaten spiegeln (<X>: X-Achse, horizontal; <Y>: Y-Achse, vertikal; zu spiegelnde Achse auf "1" setzen, ansonsten "0").
Eventuell kann man auch durch Ausprobieren die richtige Einstellung herausfinden:
xinput set-prop <ID> "Evdev Axes Swap" 1
oder
xinput set-prop <ID> "Evdev Axis Calibration" <Min-X> <Max-X> <Min-Y> <Max-Y>
Damit man den Befehl nicht mit jedem Systemstart erneut ausführen muss, kann man den entsprechenden Befehl im Autostart anlegen oder ein Skript schreiben.