Tablet-PC-Buttons mit dem neuen Xorg-Server und HAL

Zum Tablet-PC gehört ein Stift. Der hat eine Spitze, mit der man auf dem Digitizer schreibt oder malt; in Griff-Höhe liegt ein Taster, der sich mit einer Mausfunktion belegen lässt; am anderen Stift-Ende sitzt schließlich der virtuelle Radiergummi („Eraser“). Bevor der Taster aber die richtige Maus-Aktion ausführt und der Radierer wirklich radiert, ist unter Linux oft genug noch etwas Handarbeit angesagt. Wie das – im Vergleich zur alten xorg.conf – mit dem neuen Xorg-Server 1.6 in Verbindung mit HAL funktioniert, beschreibe ich in diesem Posting. Was es mit der Kombination Xorg/HAL grundsätzlich auf sich hat, steht in einem anderen Artikel.

Damit überhaupt etwas geht, müssen zunächst mal die Wacom-Pakete installiert sein:

$ sudo apt-get install xserver-xorg-input-wacom wacom-tools

Diese Anweisung installierte zum Zeitpunkt, als dieser Text verfasst wurde, unter Ubuntu Jaunty Beta die Version 0.8.8.2 des Wacom-Treibers, der unter dem Dach des Linuxwacom-Projektes entwickelt wird. Debian Sid/Sidux-Nutzer sparen sich das „sudo“. Auch wenn das hier Beschriebene unter Ubuntu getestet wurde, sollte es ebenso für Debian gelten.

Die Funktion des Wacom-Tablets lässt sich gut mit dem Kommandozeilen-Utility xidump überprüfen. Es wurde mit den Wacom-Tools installiert. Zunächst schauen wir uns damit alle erkannten Erweiterungen an:

$ xidump -l
Virtual core pointer           disabled
Virtual core keyboard          keyboard
AT Translated Set 2 keyboard   extension
Wacom Serial Tablet PC Pen Tablet/Digitizer extension
Video Bus                      extension
Wacom Serial Tablet PC Pen Tablet/Digitizer eraser extension
Macintosh mouse button emulation extension
PS/2 Generic Mouse             extension

Soweit die Ausgabe auf meinem HP 2710p, die schon eine Neuerung aufweist: Die Geräte erscheinen nicht mehr unter den früher in der xorg.conf konfigurierten Namen, sondern haben von HAL vergebene Bezeichnungen – hier Wacom Serial Tablet PC Pen Tablet/Digitizer für den Stift (früher schlicht: „Stylus“) und  Wacom Serial Tablet PC Pen Tablet/Digitizer eraser (früher nur „Eraser“). Vorsicht: Ich habe von Nutzern anderer Tablet-PCs/Linux-Versionen auch andere HAL-Bezeichner gehört; die Namen also ggf. ans eigene System anpassen.

Um nun im Detail die Funktion des Tablet-Stiftes anzuschauen, lautet der Befehl nicht mehr wir zu xorg.conf-Zeiten

$ xidump stylus

sondern (mit Anführungszeichen wegen der Leerzeichen)

$ xidump "Wacom Serial Tablet PC Pen Tablet/Digitizer"

oder wie auch immer das Device erkannt/benannt wurde.

Jetzt gilt es, den Stift zur Hand zu nehmen, ein wenig auf dem Grafiktablett bzw. dem Tablet-PC-Bildschirm herumzumalen und dabei die Ausgabe von xidump zu beobachten. Das Progrämmchen signalisiert nämlich nicht nur in Echtzeit die Position der Stiftspitze auf der x- und y-Achse sowie die Druckstärke, sondern zeigt unter „Buttons“ auch an, welche Taste (in Analogie zur Maus-Bedienung) dabei signalisiert wird.

  • Die Stiftspitze meldet Button 1, also die linke Maustaste – beim Aufsetzen zeigt xidump „1DOWN“, beim Abheben der Stiftspitze „1UP“.
  • Drückt man jetzt auch noch den Taster am Schaft des Stiftes, dann signalisiert xidump „2DOWN“ und beim Loslassen „2UP“. Der Taster wird also also Button 2 signalisiert – ein Druck auf die mittlere Maustaste.

Mir wäre es allerdings lieber, wenn ich die rechte Maustaste am Stift hätte, um schnell ein Kontext-Menü für ein angetipptes Icon aufzurufen.

Für Konfigurations-Änderungen haben die Wacom-Tools ein eigenes Werkzeug an Bord. Der Befehl

$ xsetwacom set "Wacom Serial Tablet PC Pen Tablet/Digitizer" button2 3

macht auf einen Schlag aus dem Button 2 einen Button 3, also aus dem mittleren einen rechten Maustaster – genau das, was ich will. Was ich allerdings nicht will ist, diesen Befehl nach jedem Neustart, in jeder begonnenen X-Sitzung erneut abzusetzen. Statt die Anweisung jetzt in den Autostart zu packen, kann man sie auch in die xorg.conf packen. Dazu muss die Konfiguration für den Stylus um eine Zeile ergänzt werden, so dass der entsprechende Abschnitt wie folgt aussieht:

Section "InputDevice"
    Driver        "wacom"
    Identifier    "stylus"
    Option        "Device"        "/dev/input/wacom"
    Option        "Type"          "stylus"
    Option        "Button2"      "3"
    Option        "ForceDevice"   "ISDV4"           # Tablet PC ONLY
EndSection

Doch halt: Die xorg.conf brauchen wir ja nicht mehr – statt dessen führt HAL jetzt das Regiment. Eine entsprechende Policy-Datei pen.fdi muss also her, die unter /etc/hal/fdi/policy/ landet. Damit das fruchtet, muss die Options-Zeile für Button2 aus der xorg.conf in HAL-gemäßes XML überführt werden. Die Datei sieht folgendermaßen aus:

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input">
      <match key="info.product" contains="Wacom">
        <merge key="input.x11_options.Button2" type="string">3</merge>
      </match>
    </match>
  </device>
</deviceinfo>

Anhand der „match key“-Angaben wird die Policy dem passenden Gerät zugeordnet, in diesem Fall also einem Eingabe-Gerät („Input“), in dessen Namen (dem Gerätenamen, den wir mit xidump -l ermittelt hatten) der Begriff „Wacom“ enthalten ist. Die „merge key“-Anweisung ist dann das Äquivalent zur „Option“-Zeile aus der xorg.conf. Generell kann man übrigens alle Optionen aus der xorg.conf in HAL-Policies überführen.

Den Eraser testen wir nach demselben Muster. Die Ausgabe von

$ xidump "Wacom Serial Tablet PC Pen Tablet/Digitizer eraser"

verrät, dass er sich beim Aufdrücken als Button 1 meldet – das in den Ubuntu-Foren lange diskutierte Problem, dass der Eraser von HAL nicht unterstützt wird, ist also tatsächlich gelöst.

Dumm nur, dass Button 1 bereits von der Stiftspitze signalisiert wird, was dazu führt, dass der Eraser im Notizzettel-Programm Xournal nicht radiert, sondern ebenfalls schreibt. Das ist natürlich Unsinn. Die Lösung: Button 1 des Erasers wird mit einer weiteren HAL-Policy, die ich als /etc/hal/fdi/policy/eraser/pen.fdi speichere, auf Button 2 umgeleitet. Bitte auch hier wieder beachten: Diese Policy matcht den Begriff „eraser“ in der oben mit xidump -l ermittelten Gerätebezeichnung „Wacom Serial Tablet PC Pen Tablet/Digitizer eraser“.

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input">
      <match key="info.product" contains="eraser">
        <merge key="input.x11_options.Button2" type="string">3</merge>
      </match>
    </match>
  </device>
</deviceinfo>

Die Umwidmung in Button 2 hat übrigens den Nebeneffekt, dass der Eraser außerhalb von Tablet-sensitiven Programmen (wie eben Xournal oder der Grafiker Gimp) auch als mittlere Maustaste missbraucht werden kann.

5 comments on “Tablet-PC-Buttons mit dem neuen Xorg-Server und HAL”

  1. Danke!

    Bei Ubuntu 8.10 wars noch Stückwerk, bei 9.10 ging nichts mehr vernünftig!

    Bis jetzt! Endlich funktioniert mein Tablett wieder richtig!

    Danke! Danke!

Schreibe einen Kommentar