Schlagwort: Fedora 10

Tablet-PC Funktionalität unter Linux aktivieren für Lenovo X61t (Teil 3 – Autorotation)

Der letzte Teil der spezifischen Tabletfunktionalität ist die Autorotation.
Beim Überfliegen von Lukes Rotationsskript ist mir aufgefallen, dass es wohl eine Möglichkeit gibt die Beschleunigungssensoren des Thinkpads auszulesen und so eine automatische Rotation und eventuell auch die automatische Festplattenabschaltung zu realisieren.
Dazu benötigt man HDAPS welches nicht standardmäßig installiert ist.
Die Entwickler des HDAPS Treibers empfehlen die Verwendung des gepatchten Treibers von tp_smapi.

Also installieren wir den Kerneltreiber, dazu können wir einfach den Tarball herunterladen der auf der obenstehenden Seite verlinkt ist.
Den speichern wir an einem Ort an dem wir ihn wiederfinden, zum Beispiel im Home Ordner.

Nun benutzen wir wiedereinmal die Konsole. Dort entpacken wir den Tarball:

1
tar xzvf tp_smapi-0.40.tgz

Je nach Versionsnummer heißt die Datei etwas anders.
Wir wechseln in das neu erstellte Verzeichnis:

1
cd tp_smapi-0.40

Nun müssen wir einfach die Module erstellen lassen und sie danach laden, da wir sie öfter verwenden möchten benutzen wir die Installationsoption und natürlich geht es uns primär um den HDAPS Treiber. Also installieren wir die Module mit:

1
make install HDAPS=1

Nun sollten die Module gebaut und installiert werden. Mit modprobe laden wir die neuen Module:

1
modprobe -a tp_smapi hdaps

Sollten hier bereits Fehler auftreten so ist etwas schief gelaufen welches genauerer Betrachtung bedarf.

Nun gehen wir weiter nach dieser Anleitung vor: Karol Kritzkas Guide
Ich finde die Art wie das Script funktioniert zwar nicht schön, allerdings hat bei mir die alternative Variante leider nicht funktioniert.


Tablet-PC Funktionalität unter Fedora 10 aktivieren für Lenovo X61t (Teil 2 – Sondertasten + Rotation)

Für Ubuntu gibt es hier eine neue Anleitung:Rotation unter Ubuntu

So im zweiten Teil kümmern wir uns um die Zusatztasten des Tablets. Dazu untersuchen wir zunächst die relevanten Keycodes. Dazu gibt es zwei Werkzeuge, eins für die Konsole und eins für den XServer.
Für die Konsole showkey und für den XSever xev
Auf meinem Tablet ließen sich so folgende Keycodes herausfinden:

1
2
3
4
5
6
7
8
9
10
Taste       Showkey         xev
Rotate      191         199
Werkzeugkasten  152         (160)
Escape      1           9
Oben        103         111
Rechts      106         114
Unten       108         116
Links       105         113
Enter       28          36
Reset       Unknown->code 0x67   no_event

Bei mir waren die xev-Codes alle um 8 größer als die von showkey. Dies ist aber wohl nicht immer der Fall.
Escape und Enter haben natürlich schon die Standardfunktionen, ebenso sind die Oben, Rechts, Unten und Links-Tasten bereits richtig belegt. Der Werkzeugkasten sperrt bei mir den Bildschirm, nur der Rotierknopf ist mit keiner Funktion belegt.
Diesem wollen wir nun Leben einhauchen.
Dazu müssen wir die Tastenbelegung des XServers editieren.

1
2
3
4
cp /etc/X11/Xmodmap    /etc/X11/Xmodmap.ORIGINAL
echo "! Custom Xmodmap for X61 Tablet PC" > /etc/X11/Xmodmap
xmodmap -pke >> /etc/X11/Xmodmap
nano /etc/X11/Xmodmap

Dort suchen wir nun nach dem oben gefundenen Keycode und schreiben hinter das Istgleich XF86User1KB.
Damit führt der Xserver dann beim Drücken der Taste die Aktion XF86User1KB aus. Jetzt müssen wir also nur noch eine Rotationsfunktion einbinden die wir dann mit der Aktion verknüpfen und dann funktioniert das ganze schon hoffentlich. Da ich nicht der erste bin der ein Tablet gekauft hat, gibt es bereits ein Python Script welches die Rotation sehr gut erledigt. (Lukes Homepage) Es ist zwar für ein X60 Tablet geschrieben aber man wird es schon so umbiegen können, dass es auch auf einem X61 Tablet läuft.
Mit folgenden Anweisungen sollte das Script installiert sein:

1
2
3
4
5
6
7
8
mkdir -p /usr/local/src/X61_XF86
pushd /usr/local/src/X61_XF86
wget http://luke.no-ip.org/x60tablet/examples/rotate
chmod ugo+x rotate
pushd /usr/local/bin
ln -s /usr/local/src/X61_XF86/rotate
popd
popd

Als nächstes müssen wir noch Berechtigungen setzen, so ist es erforderlich sudo zu verwenden wenn man den Bildschirm rotiert oder die globale Tastaturbelegung ändern möchte.
Dazu müssen wir einmal eine Gruppe der Tabletbenutzer anlegen. Gruppen werden in der Datei /etc/group eingerichtet.

1
nano /etc/group

Wir fügen in eine zusätzliche Zeile einfach folgendes ein:

1
tabletgroup:x:501:root,<strong>Tabletnutzernamen</strong>

Wobei die Nutzernamen jeweils durch Komma getrennt einzutragen sind, bei mir wäre es zum Beispiel tabletgroup:x:501:root,arsenal.
Jetzt müssen wir der Gruppe noch die Rechte zuweisen die sie haben soll: sudo benutzen für Rotation und Tastenbelegungändern. Dabei wollen wir natürlich nicht jedemal unser Passwort eingeben um dieses Ziel zu erreichen. Die Berechtigungen für sudu sind in der Datei /etc/sudoers zu finden. Also bedienen wir uns wieder unseres allseitsbeliebten Konsoleneditor als root:

1
nano /etc/sudoers

Wir fügen dort am Ende hinzu:

1
2
##Allow users to do tablet screen rotations if in this group
%tabletgroup    ALL=(ALL)       NOPASSWD:/usr/bin/setkeycodes,/usr/local/bin/rotate

Zudem suchen wir nach der Zeile:

1
Defaults    requiretty

und kommentieren diese durch voranstellen eines # aus.

Jetzt müssen wir noch die XF86User1KB mit dem rotate-Script in Verbindung bringen.
Dazu benötigt man wohl den gconf-editor (zumindest für Gnome) um das ganze etwas komfortabel zu gestalten. (Dank an Codejacked.com für den Guide)
Wir starten ihn aus dem Menü Anwendungen -> Systemwerkzeuge -> Konfigurationseditor oder über ein Terminal mit der Eingabe von gconf-editor.
Wir wechseln dann in der Liste zu apps/metacity/keybinding-commands.
Nun können wir rechts bei command_1 oder einem anderen freien Befehl folgendes eingeben:

1
sudo /usr/local/src/X61_XF86/rotate

Danach wechseln wir zu /apps/metacity/global_keybindings/run_command_1 und fügen dort XF86User1KB ein und „schon“ sollte die Rotation beim drücken des Knopfes ausgeführt werden.

Beim Testen ist mir jedoch aufgefallen, dass das Script nicht ganz funktioniert sondern aus der Funktion mit einem Fehler herausspringt, es versucht einfach für jedes Wacomgerät die Rotation zu verändern. Dummerweise ist jedoch ein recht seltsames Gerät gelistet, namens „ThinkPad Extra Buttons“, es kann jedoch nicht vom Wacomtreiber angesteuert werden. Daher muss im Script ausgeschlosssen werden, dass versucht wird die Rotation von dem Gerät zu ändern, dargestellt im folgenden Screenshot:
rotatescript
Ein Download ist auch verfügbar: rotate
Einfach als root folgendes ausführen:

1
2
3
4
5
6
7
8
mkdir -p /usr/local/src/X61_XF86
pushd /usr/local/src/X61_XF86
wget http://www.arsenal-of-wisdom.org/wp-content/uploads/2009/01/rotate
chmod ugo+x rotate
pushd /usr/local/bin
ln -s /usr/local/src/X61_XF86/rotate
popd
popd

Damit verhält sich unser Tablet schon recht zufriedenstellend unter Linux. Als nächtes werde ich versuchen die automatische Orientierung des Bildschirms zu aktivieren.

Dieser Artikel entstand haupsächlich aus Informationen die ich auf folgenden Seiten erhalten habe:
Installing Fedora 8 on an X61 Tablet
Lukes X60 tablet Seite


Tablet-PC Funktionalität unter Fedora 10 aktivieren für Lenovo X61t (Teil 1 – Stifteingabe)

So, da ich ja erfolgreich Fedora installiert bekommen habe, möchte ich natürlich auch die Tabletfunktionen unter Linux nutzen. Der erste Schritt ist herauszufinden wie das Wacom-Tablet angeschlossen ist (USB oder Seriell? Welcher Schnittstellenport?)
Unter Fedora 10 sind die Wacomtreiber schon standardmäßig installiert, aber um sicherzugehen einfach prüfen ob das paket linuxwacom installiert ist.
Dann können wir anfangen zu testen wie das Tablet angeschlossen ist, dazu nehmen wir des Administrators liebstes Werkzeug, das Terminal, und um uns richtig wichtig zu machen am besten gleich mit su den root übernehmen.
Um den seriellen Port zu überprüfen fand ich cat hilfreich. Dazu geben wir ein:

1
cat /dev/ttyS<strong>X</strong>

Wobei X für eine Nummer steht, bei mir gingen sie von 0 bis 3. Hat man den Befehl ausgeführt, berührt man mit dem Stift den Bildschirm, wenn jetzt viele lustige Zeichen über den Bildschirm huschen wissen wir an welcher seriellen Schnittstelle unser Tablet angeschlossen ist.
Um herauszufinden ob und an welchem USB-Port unser Tablet angeschlossen ist empfiehlt es sich das Werkzeug wacdump zu verwenden.

1
wacdump /dev/input/event<strong>X</strong>

Wobei wiederum für X eine Zahl eingesetzt wird. Wacdump zeigt einem allerlei Informationen an, wenn man mit dem Stift den Bildschirm berührt sollte sich einiges ändern.

Bei mir war das Tablet über die serielle Schnittstelle 0 angeschlossen. Daher werde ich mich mangels anderer Erfahrungen darauf beschränken ein serielles Tablet einzurichten.

Für gewöhnlich werden Eingabegeräte in der xorg.conf des Xorg-Display-Servers eingetragen. Bei mir (vermutlich bei Fedora 10 allgemein) existierte diese Datei jedoch nicht. Da es ohne vorkonfigurierte xorg.conf jedoch recht schwer fällt die ganze Konfiguration manuell durchzuführen lassen wir das lieber Xorg selbst machen.

Dazu sollte man den aktuellen Xorg-Server beenden, als harte Methode, einfach in ein Textterminal wechseln (Strg+Alt+F2) und sich als root anmelden. Dann finden wir den aktuellen Xorg Prozess über:

1
ps -A |grep Xorg

heraus. Das produziert dann etwa folgende Ausgabe:

1
 2538 tty1     00:00:17 Xorg

Die erste Nummer gibt die Prozessid an, die wir nun mit:
Achtung: Alle nicht gespeicherten Daten von Programmen die grade im Xorg-Server laufen gehen verloren.

1
kill 2538

beenden können.

Nachdem wir uns des Xorg-Servers erfolgreich entledigt haben, können wir nun automatisch eine xorg.conf erzeugen lassen.

1
Xorg -configure

Dieser Befehl erzeugt automatisch eine Konfigurationsdatei im Home-Verzeichnis des angemeldeten Benutzers, in dem Fall sollte die Datei unter /root/xorg.conf.new zu finden sein.
Diese kopieren wir nun an den Ort wo sie sich normalerweise befindet, /etc/X11/:

1
cp /root/xorg.conf.new /etc/X11/xorg.conf

So, nun können wir eigentlich den Xorg-Server wieder starten.

1
Xorg

Jetzt können wir die xorg.conf so abändern, dass unser Tablet als Eingabegerät erkannt wird. Wir schnappen uns wieder eine Konsole und editieren als root die xorg.conf

1
nano /etc/X11/xorg.conf

Wir sollten nun eine recht ausführliche Konfigurationsdatei vor uns sehen.
Wir fügen am Ende folgende Dinge ein:

1
2
3
4
5
6
7
Section "InputDevice"
  Driver        "wacom"
  Identifier    "stylus"
  Option        "Device"        "/dev/ttyS<strong>X</strong>"          # SERIAL ONLY
  Option        "Type"          "stylus"
  Option        "ForceDevice"   "ISDV4"
EndSection
1
2
3
4
5
6
7
Section "InputDevice"
  Driver        "wacom"
  Identifier    "eraser"
  Option        "Device"        "/dev/ttyS<strong>X</strong>"          # SERIAL ONLY
  Option        "Type"          "eraser"
  Option        "ForceDevice"   "ISDV4"               # Serial Tablet PC
EndSection
1
2
3
4
5
6
7
Section "InputDevice"
  Driver        "wacom"
  Identifier    "cursor"
  Option        "Device"        "/dev/ttyS<strong>X</strong>"          # SERIAL ONLY
  Option        "Type"          "cursor"
  Option        "ForceDevice"   "ISDV4"               # Serial Tablet PC
EndSection

Sofern das Tablet Touchfunktion unterstützt noch folgendes:

1
2
3
4
5
6
7
Section "InputDevice"
  Driver        "wacom"
  Identifier    "touch"
  Option        "Device"        "/dev/ttyS<strong>X</strong>"          # SERIAL ONLY
  Option        "Type"          "touch"
  Option        "ForceDevice"   "ISDV4"               # Serial Tablet PC
EndSection

Wobei für X jeweils die oben ermittelte serielle Schnittstelle eingetragen werden muss.
Damit kennt unser Xorg alle Eingabemöglichkeiten. Damit es sie auch nutzt müssen wir noch die Events zuweisen.
Dazu suchen wir die Stelle in der xorg.conf mit dem Namen „Serverlayout“.
Diese ändern wir ab, so dass die neuen Eingabemethoden auch benutzt werden, das kann dann so aussehen:

1
2
3
4
5
6
7
8
9
10
Section "ServerLayout"
        Identifier     "X.org Configured"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
        <strong>InputDevice    "stylus"    "SendCoreEvents"
        InputDevice    "eraser"    "SendCoreEvents"
        InputDevice    "cursor"    "SendCoreEvents"
        InputDevice    "touch"  "SendCoreEvents"</strong>
EndSection

Nun starten wir den Xorg-Server neu mit Strg+Alt+Backspace.
Damit sollte die Tableteingabe nun funktionieren.
Als nächsten werfen wir dann einen Blick auf Tablet-Sondertasten und auch die Bildschirmrotation will eingerichtet werden.