Nachdem ich gestern den anderen Miix 320 repariert habe, ist mir aufgefallen, dass das Script fürs automatische Drehen des Bildschirms gar nicht im Blog ist. Gnome kann das unter Linux inzwischen zwar selbst, auf dem kleinen Lenovo nehm’ ich aber doch lieber XFCE – da muss man das selber nachrüsten.

Beim Miix ist die Orientierung des Displays unter Xorg per Default im Hochformat mit den Knöpfen oben. Fürs korrekte Querformat müsste man den Bildschirm nach rechts drehen: xrandr -o right

Das soll natürlich auch beim Loginbildschirm schon alles richtig sein. Ich verwende auf meinem Miix 320 als Displaymanager lightdm. In der lightdm-Konfiguration legt man ein Startscript fest: In /etc/lightdm/lightdm.conf.d/ legen wir mit erhöhten Rechten eine Datei namens 80-display-setup.conf an:

[SeatDefault]
greeter-setup-script=/etc/lightdm/greeter_setup.sh

Dieses bash-script muss ebenfalls mit erhöhten Rechten angelegt und folgendermaßen befüllt werden:

#!/bin/bash
# Loginscreen auf querformat
xrandr -o right
xinput set-prop “FTSC1000:00 2808:1015” “Coordinate Transformation Matrix” 0 1 0 -1 0 1 0 0 1

Ausführbar gemacht chmod u+x /etc/lightdm/greeter_setup.sh erscheint der Login korrekt gedreht. Die xinput-Zeile sorgt dafür, dass der Touchscreen mit gedreht wird.

Jetzt stimmt zwar die Bildschirmausrichtung erstmal, von selber drehen tut sich aber nichts, das funktioniert nur unter Gnome von alleine. Ich verwende allerdings XFCE: beheben wir das mal! Ich bin nicht der erste mit dem Problem und einen guten Ansatz findet man bei Julien auf github, der das schonmal für sein Yoga gebastelt hat, und auch beim LinuxAppFinder.

Meine Variante besteht aus drei Scripten: einem zum Aktivieren der Dreherei, eines das die Dreherei selbst ausführt und einem zum Abschalten des Bildschirm drehens. Sinn ist, wie bei jedem Tablet ScreenRotate per Knöpfchen schalten zu können.

Das Script fürs eigentliche Bildschirmdrehen benötig das iio-sensor-proxy Package. Unter Ubuntu ist das mit sudo apt install iio-sensor-proxy schnell nachinstalliert.

Hier der Code vom Script autorotate.sh

#!/bin/bash
# Sensor pipe to get output from monitor-sensor
sensorpipe=/tmp/pivotsensor
# if pipe doesn’t exist, create it
if [[ ! -p $sensorpipe ]]; then
/usr/bin/mkfifo $sensorpipe
fi
/usr/bin/logger “autorotate started”
/usr/bin/monitor-sensor >> $sensorpipe 2>&1 &
monisenspid=$!
# Parse output or monitor sensor to get the new orientation whenever a line appaers in sensorpipe
# Possible are: normal, bottom-up, right-up, left-up, quit. Light data will be ignored
while true; do
if read line<$sensorpipe; then #echo $line # Read the last line that was added to the pipe and get the orientation ORIENTATION=$(/usr/bin/echo $line | /usr/bin/grep 'orientation' | /usr/bin/grep -oE '[^ ]+$') case "$ORIENTATION" in # Set the actions to be taken for each possible orientation normal) /usr/bin/xrandr -o normal /usr/bin/xinput set-prop "FTSC1000:00 2808:1015" "Coordinate Transformation Matrix" 1 0 0 0 1 0 0 0 1 ;; bottom-up) /usr/bin/xrandr -o inverted /usr/bin/xinput set-prop "FTSC1000:00 2808:1015" "Coordinate Transformation Matrix" -1 0 1 0 -1 1 0 0 1 ;; right-up) /usr/bin/xrandr -o right /usr/bin/xinput set-prop "FTSC1000:00 2808:1015" "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1 ;; left-up) /usr/bin/xrandr -o left /usr/bin/xinput set-prop "FTSC1000:00 2808:1015" "Coordinate Transformation Matrix" 0 -1 1 1 0 0 0 0 1 ;; quit) # if you send "orientation quit" to the pipe, the script exits break ;; esac fi done /usr/bin/rm -f $sensorpipe /usr/bin/kill $monisenspid /usr/bin/logger "autorotate ended" exit 0

Das Script kümmert sich auch um das Drehen des Touchscreens, sodass das Tablet auch bedienbar bleibt. Jedes Mal, wenn der Sensor eine Drehung registriert, schreibt monitor-sensor die neue Orientierung des Displays in die pipe. Das read line liest die Zeile und das case führt die entsprechende Aktion aus. Ein orientation quit beendet das Script und die Bildschirm-Dreherei.

Ein Script für das Einschalten der Dreherei brauchen wir noch, das ist übersichtlich:

#!/bin/bash
~/.bin/autorotate.sh &

Wie ihr seht, gibt es in meinem home-Verzeichnis einen versteckten bin-ordner, der meine kleinen Helferlein beherbergt.
Kaum länger fällt das stop-script aus:

#!/bin/bash
# Sensor pipe to get output from monitor-sensor
sensorpipe=/tmp/pivotsensor
# if the pipe doesn’t exist the autorotate script does not run
if [[ ! -p $sensorpipe ]]; then
echo “$sensorpipe: no such pipe”
exit 0
fi
/usr/bin/logger “stopping autorotate”
/usr/bin/echo “orientation quit” > $sensorpipe
exit 0

Herunterladen könnt ihr die drei auch einfach:

Alle drei Scripte müssen ausführbar sein! Das startautorotate.sh lasse ich beim login von XFCE starten – das lässt sich über “Sitzung und Startverhalten” einstellen. Ansonsten kann man sich in eine beliebige Leiste die entsprechenden Symbole mit den hinterlegten Scripten nageln und das AutoRotate manuell ein- und ausschalten.

(swg)