X41t – Rotate screen (on Swivel Events) on 10.10

Vor einiger Zeit habe ich schon einen Artikel diesbezüglich geschrieben: Link
Größtenteils ist auch alles gleichgeblieben, jedoch gibt es ein paar Vereinfachungen und Verbesserungen, so dass ich mal einen neuen Artikel aufsetze.

So war bei mir zum Beispiel das Paket xserver-xorg-input-wacom schon installiert und das Paket wacom-tools braucht man gar nicht mehr.

Auch das Umbenennen ist nicht mehr nötig, bei mir funktioniert das auflisten per xsetwacom list auch schon so:

$ xsetwacom list
Serial Wacom Tablet eraser ERASER
Serial Wacom Tablet stylus STYLUS

Wir sehen, dass unser gewünschtes Gerät nciht mehr nur ’stylus‘ heißt, sondern ‚Serial Wacom Tablet stylus‘, müssen dies also in der gleich folgenden rotatetablet.sh eventuell anpassen.

Rotatetablet.sh

Um den Bildschirm nun zu drehen, gibt es ein schönes Skript von Liken Apuntes, welches ich jedoch noch minimal angepasst habe:

#!/bin/bash

#STATUS_FILE=~/.rotate-status
STATUS_FILE=/tmp/.rotate-status
STYLUS=`xsetwacom --list | grep stylus`
STYLUS=${STYLUS%\ STYLUS*}
#STYLUS='Serial Wacom Tablet stylus'
################## Compiz Prevention
function compiz_on {
   USER=`ps -ef |grep metacity |grep -v grep|awk -F" " '{print $1}'`
   #if [ "$(pidof metacity)" ]
   if [ "$USER" ]
   then
      echo 'Activating Compiz...'
      #Uncomment this if you use compiz
      #DISPLAY=":0.0" sudo -H -u $USER /usr/bin/compiz --replace &
      #DISPLAY=":0.0" sudo -H -u $USER /usr/bin/emerald --replace &
   fi
}
	
function compiz_off {
   USER=`ps -ef | grep compiz.real | grep -v grep | awk -F" " '{print $1}'`
   #if [ "$(pidof compiz.real)" ]
   if [ "$USER" ]
   then
      echo 'Compiz Active. Deactivating...'
      DISPLAY=":0.0" sudo -H -u $USER /usr/bin/metacity --replace &
   fi
}
##################################################
	
######################## 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 ; compiz_off ; keymap 0 ;;
        1|left) N=1; T=ccw ; compiz_off ; keymap 1 ;;
        2|inverted) N=2; T=half ; compiz_off; keymap 0 ;;
        0|normal) N=0; T=none ; compiz_on ; 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

Entweder ihr kopiert euch das, oder bezieht es aus meinem Gist: Link

Einfach speichern unter /usr/local/bin/rotatetablet.sh und mit sudo chmod +x /usr/local/bin/rotatetablet.sh ausführbar machen.

Nun sollte ein Aufruf von rotatetablet.sh beziehungsweise rotatetablet.sh normal schon den gewünschten dreh-effekt erzielen.

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

Tastatur

Bei mir laufen mittlerweile auch die Hardware-Tasten am Screen (rotate usw….) out-of-the-box, heißt ich kann ihnen direkt per System > Einstellungen > Tastenkombinationen den Tasten einen Befehl zuweisen (zb. /usr/local/bin/rotatetablet.sh)

Quellen:
Liken Apuntes
Words Are Lies
Ross Larsen

Ein Gedanke zu „X41t – Rotate screen (on Swivel Events) on 10.10“

Schreibe einen Kommentar

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