#!/bin/sh # # auto-rotate the screen and pointers # copyright 2018 Don Bowman (db@donbowman.ca) # Licensed under Apache License, Version 2.0 DISPLAY=:0 export DISPLAY install_background() { export BACKDROP=~/.config/auto-rotate/${1}.jpg if [ -f "$BACKDROP" ] then cat << EOF | sh dbus-send --session --dest=org.kde.plasmashell --type=method_call /PlasmaShell org.kde.PlasmaShell.evaluateScript 'string: var Desktops = desktops(); for (i=0;i<Desktops.length;i++) { d = Desktops[i]; d.wallpaperPlugin = "org.kde.image"; d.currentConfigGroup = Array("Wallpaper", "org.kde.image", "General"); d.writeConfig("Image", "file://$BACKDROP"); }' EOF fi } rotate_cursor() { pointers=$(xinput list | mawk -W interactive '/Virtual core pointer/ { printing=1 } /Virtual core keyboard/ { printing=0} { if (printing && (match($0, /ELAN/) || match($0, /Pen/) || match($0, /Finger/) || match($0, /Touch/) )) { gsub(".*id=",""); print $1 } }') echo "rotate -- pointers: <<$pointers>> matrix: <<$*>>" for p in $pointers do xinput set-prop "$p" "Coordinate Transformation Matrix" "$@" done } remove_keyboard(){ keyboard=$(xinput list | mawk -W interactive '/Virtual core pointer/ { printing=0 } /Virtual core keyboard/ { printing=1} { if (printing && (match($0, /AT Translated Set 2 keyboard/))) { gsub(".*id=",""); print $1 } }') xinput ${1} $keyboard echo Keyboard ${1}"d" } MAIN_SCREEN=$(xrandr --current | grep connected | mawk -W interactive '/primary/ {print $1}') echo "$MAIN_SCREEN" monitor-sensor | mawk -W interactive '/Accelerometer orientation changed:/ { print $NF; fflush();}' | while read -r line do echo "$line" # If we have external monitor connected, do not rotate nscreens=$(xrandr | grep -c " connected") if [ "$nscreens" != 1 ] then line=normal fi # Set the actions to be taken for each possible orientation case "$line" in normal) # re-enable backlight dbus-send --print-reply=literal --type=method_call --system --dest=org.freedesktop.UPower /org/freedesktop/UPower/KbdBacklight org.freedesktop.UPower.KbdBacklight.SetBrightness int32:1 remove_keyboard enable xrandr --output "$MAIN_SCREEN" --rotate normal rotate_cursor 1 0 0 0 1 0 0 0 1 install_background normal ;; bottom-up) # disable backlight dbus-send --print-reply=literal --type=method_call --system --dest=org.freedesktop.UPower /org/freedesktop/UPower/KbdBacklight org.freedesktop.UPower.KbdBacklight.SetBrightness int32:0 remove_keyboard disable xrandr --output "$MAIN_SCREEN" --rotate inverted rotate_cursor -1 0 1 0 -1 1 0 0 1 install_background bottom-up ;; right-up) # disable backlight dbus-send --print-reply=literal --type=method_call --system --dest=org.freedesktop.UPower /org/freedesktop/UPower/KbdBacklight org.freedesktop.UPower.KbdBacklight.SetBrightness int32:0 remove_keyboard disable xrandr --output "$MAIN_SCREEN" --rotate right rotate_cursor 0 1 0 -1 0 1 0 0 1 install_background right-up ;; left-up) # disable backlight dbus-send --print-reply=literal --type=method_call --system --dest=org.freedesktop.UPower /org/freedesktop/UPower/KbdBacklight org.freedesktop.UPower.KbdBacklight.SetBrightness int32:0 remove_keyboard disable xrandr --output "$MAIN_SCREEN" --rotate left rotate_cursor 0 -1 1 1 0 0 0 0 1 install_background left-up ;; esac done exit 0