Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Automatically rotate the screen.
#!/bin/sh
# Automatically rotate the screen when the device's orientation changes.
# Use 'xrandr' to get the correct display for the first argument (for example, "eDP-1"),
# and 'xinput' to get the correct input element for your touch screen, if applicable
# (for example, "Wacom HID 486A Finger").
#
# The script depends on the monitor-sensor program from the iio-sensor-proxy package.
if [ -z "$1" ]; then
echo "Usage: $0 <display> [touchinput]"
exit 1
fi
monitor-sensor \
| grep --line-buffered "Accelerometer orientation changed" \
| grep --line-buffered -o ": .*" \
| while read -r line; do
line="${line#??}"
if [ "$line" = "normal" ]; then
rotate=normal
matrix="0 0 0 0 0 0 0 0 0"
elif [ "$line" = "left-up" ]; then
rotate=left
matrix="0 -1 1 1 0 0 0 0 1"
elif [ "$line" = "right-up" ]; then
rotate=right
matrix="0 1 0 -1 0 1 0 0 1"
elif [ "$line" = "bottom-up" ]; then
rotate=inverted
matrix="-1 0 1 0 -1 1 0 0 1"
else
echo "Unknown rotation: $line"
continue
fi
xrandr --output "$1" --rotate "$rotate"
if ! [ -z "$2" ]; then
xinput set-prop "$2" --type=float "Coordinate Transformation Matrix" $matrix
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment