X41t – Rotate Screen + Wacom Stylus on Swivel Events

wacom-tools installieren

Da zwar der touch von Haus aus funktioniert, aber nicht wirklich konfigurierbar ist, habe ich die wacom-treiber installiert.
Geht auch ganz einfach aus den Paketquellen:

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

Da allerdings seit 9.04 die input-devices umbenannt wurden, finden sämtliche gerade installierten Tools das Touc-Display nicht. Jedoch gibt es auch hierfür eine Lösung, wir schreiben uns einfach ein Skript, welches die devices kurzerhand beim Start umbenennt (gefunden bei aliencam).

sudo nano /etc/init.d/wacom-names

#! /bin/sh
## find any wacom devices
for udi in `hal-find-by-property --key input.x11_driver --string wacom`
do
type=`hal-get-property --udi $udi --key input.x11_options.Type`
## rewrite the names that the Xserver will use
hal-set-property --udi $udi --key info.product --string $type
done

Dieses muss ausfürbar gemacht werden, und in die runlevels aufgenommen werden. Wichtig, es muss nach HAL aber vor X gestartet werden.

sudo chmod +x /etc/init.d/wacom-names
sudo update-rc.d wacom-names defaults 27

Der dabei resultierende Fehler ist zu vernachlässigen. (Er entsteht, da wir nicht alle Runlevels berücksichtigen, sondern nur die beim starten durchlaufenden)

Nun einmal den Rechner neustarten und nach dem starten mit

xsetwacom list

prüfen ob etwas gefunden wird.

Wenn dies funktioniert kann zb mit wacomcpl der stylus beliebig konfiguriert werden.

Alternativ im Schnelldurchlauf

wget http://download.cnlpete.de/scripting/wacom-names
sudo cp wacom-names /etc/init.d/wacom-names
rm wacom-names
sudo chmod +x /etc/init.d/wacom-names
sudo update-rc.d wacom-names defaults 27

rotate-script und swivel-events

Achtung, die 5 Skripte die ich im folgenden erläutere können auch direkt herunter geladen werden, siehe unten

rotatetablet Skript

Als erstes erstellen wir das rotate-Skript, welches eine beliebige Rotierung des Bildschirms mittels xrandr erlaubt, gefunden hier und angepasst, da ich kein Compiz nutze.

sudo nano /usr/local/bin/rotatetablet

#!/bin/bash
	
#STATUS_FILE=~/.rotate-status
STATUS_FILE=/tmp/.rotate-status
	
######################## Keycodes PgUp/PgDown
function keymap() {
   USER=`who |grep tty7 |awk -F" " '{print $1}'`
   if [ "$USER" ]
   then
      case "$1" in
      1)
         echo 'Modifying xmodmap ...'
         DISPLAY=":0.0" sudo -H -u $USER xmodmap -e 'keycode 105 = Prior'
         DISPLAY=":0.0" sudo -H -u $USER xmodmap -e 'keycode 99 = Next'
         ;;
      *)
         echo 'xmodmap normal ...'
         DISPLAY=":0.0" sudo -H -u $USER xmodmap -e 'keycode 105 = Next'
         DISPLAY=":0.0" sudo -H -u $USER xmodmap -e 'keycode 99 = Prior'
         ;;
      esac
   fi
}
###############################
function rotate() {
	
    case "$1" in
        3|right) 
		N=3; 
		T=cw; 
		keymap 0 
		;;
        1|left) 
		N=1; 
		T=ccw; 
		keymap 1 
		;;
        2|inverted) 
		N=2; 
		T=half; 
		keymap 0 
		;;
        0|normal) 
		N=0; 
		T=none; 
		keymap 0 
		;;
        *)
           echo -e "Usage:\n  $(basename $0) [left|right|inverted|normal]\n\nIf no option is given, rotates the screen 90 degrees to the right.\n";
           exit 1
           ;;
    esac
	
    #xrandr -o $N & \
	
    #More secure
    if [ "`/usr/bin/xrandr -o $N -v | grep -i 'randr' | wc -l`" -ne "1" ]
    then
        echo '!! Something went wrong...'
        export DISPLAY=":0.0"
        export XAUTHORITY=/var/lib/gdm/\:0.Xauth
        #/usr/bin/xset -display $DISPLAY dpms
        echo 'Trying to unrotate again...'
        /usr/bin/xrandr -o $N &
    fi
	
    xsetwacom set stylus Rotate $T & \
    echo $N > $STATUS_FILE
}
	
if [ "$#" == "0" ]; then
    rotate $(((3+0$(cat $STATUS_FILE 2>/dev/null))%4))
else
    rotate $1
fi

dann machen wir das Skript noch ausführbar:

sudo chmod +x /usr/local/bin/rotatetablet

Nun kann zum testen schonmal versucht werden den Bildschirm zu drehen, durch einen einfachen Aufruf von rotatetablet

rotatetablet #rotate to the left
rotatetablet normal #normalize again

Wenn das klappt können wir mit den swivel-events fortfahren.

swivel-up und swivel-down

Vom Prinzip brauchen wir 4 Dateien, 2 Skripte die den entsprechenden rotatetablet-Aufruf tätigen (in /etc/acpid/) und 2 Event-Skripte in /etc/acpid/events, in denen die swivel-Events deklariert sind.

In den ersten beiden Dateien müssen die event-keys eventuell angepasst werden, herausfinden könnt ihr die event-keys durch ein einfaches

acpi_listen

Nun werden sämtliche Events aufgeführt, die ihr so tätigt, also einfach einmal umklappen und wieder aufrichten und ihr erhaltet eine ähnliche Ausgabe wie die folgende:

ibm/hotkey HKEY 00000080 00005009
ibm/hotkey HKEY 00000080 0000500a

Nun die Dateien erstellen:

sudo nano /etc/acpi/events/x41t-swivel-down

# /etc/acpi/events/x41t-swivel-down
# called when tablet head swivels down
event=ibm/hotkey HKEY 00000080 00005009
action=/etc/acpi/x41tsdown.sh

sudo nano /etc/acpi/events/x41t-swivel-up

# /etc/acpi/events/x41t-swivel-up
# called when tablet head swivels up
event=ibm/hotkey HKEY 00000080 0000500a
action=/etc/acpi/x41tsup.sh

sudo nano /etc/acpi/x41tsdown.sh

#!/bin/sh
#/etc/acpi/x41tsdown.sh
	
echo 'Rotating Tablet...'
/usr/local/bin/rotatetablet right

sudo nano /etc/acpi/x41tsup.sh

#!/bin/sh
#/etc/acpi/x41tsup.sh
	
echo 'Unrotating Tablet...'
/usr/local/bin/rotatetablet normal

und die beiden Shell-Skripte noch ausführbar machen

sudo chmod +x /etc/acpi/x41tsdown.sh
sudo chmod +x /etc/acpi/x41tsup.sh

Dann ACPID einmal neustarten, damit die neuen Events auch aufgefangen werden

sudo service acpid restart

.

im Schnelldurchlauf

wget http://download.cnlpete.de/scripting/rotate/x41t-swivel-down
wget http://download.cnlpete.de/scripting/rotate/x41t-swivel-up
wget http://download.cnlpete.de/scripting/rotate/x41tsdown.sh
wget http://download.cnlpete.de/scripting/rotate/x41tsup.sh
wget http://download.cnlpete.de/scripting/rotate/rotatetablet

sudo cp x41t-swivel-down /etc/acpi/events/x41t-swivel-down
sudo cp x41t-swivel-up /etc/acpi/events/x41t-swivel-up
sudo cp x41tsdown.sh /etc/acpi/x41tsdown.sh
sudo cp x41tsup.sh /etc/acpi/x41tsup.sh
sudo cp rotatetablet /usr/local/bin/rotatetablet

rm x41t-swivel-down
rm x41t-swivel-up
rm x41tsdown.sh
rm x41tsup.sh
rm rotatetablet

sudo chmod +x /etc/acpi/x41tsdown.sh
sudo chmod +x /etc/acpi/x41tsup.sh
sudo chmod +x /usr/local/bin/rotatetablet

sudo service acpid restart

Ein Gedanke zu „X41t – Rotate Screen + Wacom Stylus on Swivel Events“

  1. Ich habe ebenfalls ubuntu 9.10 auf meinem x41t installiert und deine Anleitung benutzt, um Screenrotation und Stylus hinzubiegen. Hatte auf dem Weg bei 9.04 wunderbar funktioniert.
    Bei 9.10 bin ich auf das Problem gestoßen, dass wacom trotz Umbennung der devices nach Anleitung mein Touchdisplay nicht erkennt bzw. es kurzzeitig funktioniert hat bis zu einem erneuten Neustart. Würde mich über Hilfe freuen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.