ich habe wohl schon zu lange auf den Code geschaut, ich finde den Fehler einfach nicht. Wahrscheinlich ist er so offensichtlich, dass er direkt in Auge springt
Das folgende Programm liest die Daten eines Bewegungssensors von einem Tablet aus und vergleicht den ausgelesenen Wert mit einer Variable. Stimmen beide Werte überein passiert nichts, sind sie jedoch unterschiedlich sollen einige Befehle ausgeführt werden.
Wo liegt jetzt der Fehler?
Das Skript startet mit der Annahme, dass beide Werte übereinstimmen und tut erstmal nix. Bewege ich das Tablet dann gibt die Funktion state() korrekt den Wert 1 zurück. Weil die Funktion laststate() den Wert 0 zurückgibt, erwarte ich nun, dass im Skript die Bedingung if [[ laststate -ne state ]] erfüllt ist, ergo der Code zwischen then ... else ausgeführt wird.
Es passiert aber nichts, das Skript sieht weiterhin die else-Bedingung erfüllt (überprüft mit eingestreuten echos an den markanten Punkten im Skript).
Sieht jemand den Fehler?
Code: Alles auswählen
#! /bin/bash
#
SENSOR="/sys/bus/iio/devices/iio:device0/in_accel_y_raw"
#
STATE=/dev/shm/.sensorstate
POINTER='FTSC1000:00 2808:50AB'
TRANSFORM='Coordinate Transformation Matrix'
#For the sake of simplicity let's assume
# 0 = Panorama mode (Desktop)
# 1 = Tablet mode (Bookreader)
function state() {
read -r VALUE <$SENSOR
if [ $VALUE -gt 350 ]; then
echo 0
else
echo 1
fi
}
function laststate() {
if [ ! -e $LASTSTATE ]; then
echo 0 > $LASTSTATE
else
cat <$LASTSTATE
fi
}
while true; do
if [[ laststate -ne state ]]
then
#Display wurde gedreht
if [[ state -eq 0 ]]
then
#Desktopmode
xrandr --output eDP-1 --rotate inverted
sleep 1 #xrandr needs some time to adjust
xinput set-prop "$POINTER" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
echo 0 > $LASTSTATE
else
#Tabletmode
xrandr --output eDP-1 --rotate right
sleep 1 #xrandr needs some time to adjust
xinput set-prop "$POINTER" "$TRANSFORM" 0 -1 1 1 0 0 0 0 1
echo 1 > $LASTSTATE
fi
else
#Keine Veränderung, gehe schlafen
sleep 3
fi
done