Linux auf X-Serie Tablets: Unterschied zwischen den Versionen

Aus ThinkPad-Wiki
(Die Seite wurde neu angelegt: ==Einleitung== Die gerätespezifischen Funktionen der X-Tablets funktionieren unter Linux zumeist nicht gleich nach der Installation des Grundsystems. Dieser Beitrag ze...)
 
Keine Bearbeitungszusammenfassung
Zeile 145: Zeile 145:


Diese vier Schnellstarter können dann noch zu denn Favoriten zugefügt werden, so dass diese schnell erreichbar sind. Einer der Hardware-Button fungiert bekanntlich als Super-Taste, so dass mit einem tastendruck die Gnome-Shell geöffnet werden kann.
Diese vier Schnellstarter können dann noch zu denn Favoriten zugefügt werden, so dass diese schnell erreichbar sind. Einer der Hardware-Button fungiert bekanntlich als Super-Taste, so dass mit einem tastendruck die Gnome-Shell geöffnet werden kann.
Sollte gewünscht werden, dass das Tablet auch im Tablet-Modus herunter gefahren wird, benötigt man noch eine weiter Zeile in der Datei /etc/rc.local, welche den Status-File auf "0" setzt:
#rc.local (Auszug)
echo 0 > /Pfad/zum/Status-File


==Links==
==Links==

Version vom 24. Januar 2012, 23:09 Uhr

Einleitung

Die gerätespezifischen Funktionen der X-Tablets funktionieren unter Linux zumeist nicht gleich nach der Installation des Grundsystems. Dieser Beitrag zeigt Wege auf, wie die Tabletfunktionen unter den verschiedenen Linux-Distibutionen eingerichtet werden können.

Debian

Gundistallation

Die folgende Installationsanleitung bezieht sich auf ein X61t mit Debian Testing. Als Installationmedium kann ein Image von [1] verwendet werden. Hier wird empfohlen erst ein Grundsystem ohne X zu installieren. Nach einer Anpassung der Datei /etc/fstab kann dann der bevorzugte Desktop-Manager installiert werden. Für die hier aufgezeigte Installation von Debian Testing wurde Gnome 3 verwendet.

Erster Reboot unter X

Nach dem ersten Reboot funktioniert bereits der Stift. Bis hierhin wurden noch keine Veränderungen am System vorgenommen.

Anforderungen und Ziele

Das X61t soll die folgenden Anforderungen erfüllen können:

Rotations-Button - Es soll eine Bildschirmrotation von 90° gegenüber der vorherigen Einstellung über einen Knopfdruck auf den Rotationsbutton ausgeführt werden. Des Weiteren soll sich die Stiftausrichtung automatisch so verändern, dass die Ausrichtung des Stiftes der Ausrichtun des Bildschirms entspricht. Schnellstarter - Es sollen Schnellstarter vorhanden sein, mit der eine beliebige Bildschirmausrichtung sofort anwählbar ist. Auch hier soll sich der Stift der Bildschirmausrichtung anpassen. Super-Taste - Unter Gnome 3 ist der Super-Taste eine elementare Funktion zugeordnet. Ein Hardware-Button soll diese Funktion übernehmen. Hoch / Runter / Rechts / Links-Tasten - Die Tablets der Serie X6xt verfügen an der rechten Bildschirmunterkante über eine gemeinsame Taste, die die Funktionen Hoch, Runter, Rechts und Links ausführen kann. Die Funktionen Hoch und Runter sind im Tablet-Modus durchaus sinnvoll, die Funktionen Rechts und Links sind zum beispiel beim surfen eher unwichtig und sollen durch die Tastenbelegungen Vor und Zurück ersetzt werden. Mitdrehen der Hoch / Runter / Vor / Zurück - Tasten - Die oben genannten Tasten sollen sich bei der Bildschirm-Rotation mitdrehen und der Bildschirmausrichtung folgen. Hält der Nutzer bspw. sein Tablet hochkant, soll Zurück zu Hoch werden, Vor zu Runter, Runter zu Zurück und Hoch zu Vor. Automatische Bildschirm-Rotation - Auf diesen Punkt wird hier nicht eingegangen.

Hardware-Buttons konfigurieren

Eine gute Möglichkeit den Scancode herauszufinden bietet das Programm evtest. evtest erfordert root-Rechte. Führen Sie also die folgenden Befehle als root aus. Das Programm evtest befindet sich in den Main-Repos und kann über einen Paket-Manager installiert werden. Als erstes wird herausgefunden, welches Device enötigt wird.

root# egrep -e ".*keyboard.*/dev/input/event[0-9]{1,2}.*" /var/log/Xorg.0.log

Daraufhin erhält man eine Ausgabe wie:

[     5.543] (**) AT Translated Set 2 keyboard: Device: "/dev/input/event0"

Als nächstes startet man evtest mit folgendem Aufruf:

root# evtest /dev/input/event0

Daraufhin erhält man eine ziemlich lange Liste. Die oben aufgeführten Codes kann man sich ansehen, diese werden zum Teil später noch benötigt, wichtig sind jedoch die, die durch den Tastendruck im unteren Bereich herauslesen werden können. Ein solcher Abschnitt sieht etwa so aus:

Event: time 1326493063.385652, type 4 (Misc), code 4 (ScanCode), value 68
Event: time 1326493063.385661, type 1 (Key), code 125 (Leftmeta), value 0
Event: time 1326493063.385664, -------------- Report Sync ------------

Die wichtigen Werte habe sind fett hinterlegt. Die Scancodes der Hardware-Buttons sollten nun der Reihe nach ausgelesen und notiert werden. Mit den gewonnen Werten kann man schon ein wenig arbeiten. Um beispielsweise die mittlere der drei Hardware-Buttons mit dem Keysym der Supertaste zu hinterlegen, gibt man als root den folgenden Befehl ein:

root# setkeycodes 68 125

Das wäre quasi die Taste aus dem obigen Beispiel. Hierbei kann (fast) noch nichts schief gehen. Die Änderung der Tastenbelegung verschwindet nach einem reboot. Es können so also testweise alle Tasten mit neuen Keycodes hinterlegt und vor allem getestet werden.

Nachdem die nötigen Belegungen heraus gefunden und getestet wurden, können diese in die Datei /etc/rc.local eingetragen werden, damit sie nach einem Neustart immer zur Verfügung stehen. Hier ein Auszug:

#rc.local
# Button Left
setkeycodes 6e 158

# Button Right
setkeycodes 6d 159

Damit sollten die Tasten schonmal die vorgesehen Aktionen ausführen.

Rotationsscript

Was soll das Rotationsscript können?

  1. Bildschirm der Reihe nach von "None" über "Right" nach "inverted" und weiter zu "Left" und wieder nach "None" drehen.
  2. Stift "mitdrehen"
  3. Belegung der Hoch / Runter / Rechts (Vor) / Links (Zurück)-Buttons nach der Bildschirmausrichtung ändern.
  4. Bildschirmausrichtung in einen status-File schreiben

Zusätzlich sollte ja auch noch die Bildschirmdrehung per "Schnellstarter" möglich sein, so dass es nötig ist, die aktuelle Bildschirmausrichtung jederzeit abfragen zu können. Es muss also noch eine Status-Datei angelegt werden, in die der aktuelle Rotations-Status hineingeschrieben wird.

Die obigen Punkte erreicht man über die folgenden Befehle:

  1. xrandr
  2. xsetwacom set "Serial Wacom Tablet stylus" Rotate
  3. setkeycodes
  4. echo

Wie oben bereits dargestellt benötigt man für den Befehl "setkeycodes" root-Rechte, was eine Änderung der /etc/sudoers mit sich bringt, damit das Script auch von nicht-priviligierten Nutzern ausgeführt werden kann. Dazu legt man eine Gruppe "rotation" an und erlaubt dieser Gruppe, den Befehl "setkeycodes" auszuführen. Die Bearbeitung der Datei /etc/sudoers ist hinlänglich dokumentiert.

Der "Status-File" kann bespielsweise im /home-Verzeichnis oder in /tmp angelegt werden. Nicht-priviligierte Nutzer müssen jedoch Schreibrechte für diese Datei haben.

touch /Pfad/zum/anzulegenden/Status-File

Hier das Rotations-Script:

#!/bin/bash
# name: rotatex61t.sh
# from: Frank Zimmermann
# date: 2011-12-21
# version: 0.0.1

STATUS_FILE=/home/frank/bin/rotatex61t/.rotate-status
CONDITION=`cat $STATUS_FILE`

if [ -n "$1"  ]
    then
    case "$1" in
    3|right)    N=3; T=cw ;;
    1|left)        N=1; T=ccw ;;
    2|inverted)    N=2; T=half ;;
    0|normal)    N=0; T=none ;;
esac
    /usr/bin/xrandr -o $N && xsetwacom set "Serial Wacom Tablet stylus" Rotate $T && echo $N > $STATUS_FILE
    else    
case "$CONDITION" in
    0) `xrandr -o 3` && xsetwacom set "Serial Wacom Tablet stylus" Rotate cw && `sudo setkeycodes 6d 103 6e 108 71 158 6f 159` && echo 3 > $STATUS_FILE ;;
    3) `xrandr -o 2` && xsetwacom set "Serial Wacom Tablet stylus" Rotate half && `sudo setkeycodes 6d 158 6f 103 6e 159 71 108` && echo 2 > $STATUS_FILE ;;
    2) `xrandr -o 1` && xsetwacom set "Serial Wacom Tablet stylus" Rotate ccw && `sudo setkeycodes 6e 103 71 159 6d 108 6f 158` && echo 1 > $STATUS_FILE ;;
    1) `xrandr -o 0` && xsetwacom set "Serial Wacom Tablet stylus" Rotate none && `sudo setkeycodes 71 103 6d 159 6f 108 6e 158` && echo 0 > $STATUS_FILE ;;
esac
fi

exit 0

Der obere Bereich (bis else) ermöglicht die direkte Eingabe in ein Terminal (wird während der täglichen Arbeit mit dem Tablet aber nicht benötigt), der untere Bereich liest den Status-File ein und führt dann die entsprechenden Befehle aus und schreibt das Ergebnis wieder in den Status-File.

Das Script kann beispielsweise unter /usr/local/bin/rotatex61t.sh abgelegt werden. Für das Script sind noch die Rechte mit dem Befehl chmod anzupassen.

Beispiel:

root# chmod a+x /usr/local/bin/rotatex61t.sh

Über die Tastenkombinationen kann die Rotationstaste mit diesem Script belegt werden. Die Rotationsfunktion .

Schnellstarter

Die gewünschten Schnellstarter sind ähnlich wie das Script aufgebaut. Hier die Datei "tabletright" als Anschauung:

/usr/bin/xrandr -o right
xsetwacom set "Serial Wacom Tablet stylus" Rotate Cw
xsetwacom set "Serial Wacom Tablet eraser" Rotate Cw
sudo setkeycodes 6d 103 6f 159 6e 108 71 158
echo 3 > /home/frank/bin/rotatex61t/.rotate-status

Man sieht also, dass diese einzelne Datei im Prinzip das gleich macht, die der Abschnitt "0)" in der zweiten case-Verzweigung des Rotation-Scripts. Ähnliche Dateien werden nun für jede einzelne Bildschirmausrichtung nach dem Muster des Rotations-Scripts angelegt. Diese werden ebenfalls in /usr/local/bin abgelegt und die Rechte angepasst.

Als Abschluss habe ich mir noch vier Icons gebastelt, die ich für die Schnellstarter verwenden kann.


Über "alacarte" können in der Sektion "Zubehör" vier neue Einträge erstellt werden:

"Neuer Eintrag" --> "Name: Rotate Inverted" --> "Befehl: Ablageort der Schnellstarte-Datei" --> Kommentar nach belieben.

Diese vier Schnellstarter können dann noch zu denn Favoriten zugefügt werden, so dass diese schnell erreichbar sind. Einer der Hardware-Button fungiert bekanntlich als Super-Taste, so dass mit einem tastendruck die Gnome-Shell geöffnet werden kann.

Sollte gewünscht werden, dass das Tablet auch im Tablet-Modus herunter gefahren wird, benötigt man noch eine weiter Zeile in der Datei /etc/rc.local, welche den Status-File auf "0" setzt:

#rc.local (Auszug)
echo 0 > /Pfad/zum/Status-File

Links

Noch offen