-
Notifications
You must be signed in to change notification settings - Fork 0
/
rotate_desktop.sh
63 lines (55 loc) · 2.54 KB
/
rotate_desktop.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env sh
# rotate_desktop.sh
#
# Rotates modern Linux desktop screen and input devices to match. Handy for
# convertible notebooks. Call this script from panel launchers, keyboard
# shortcuts, or touch gesture bindings (xSwipe, touchegg, etc.).
#
# Using transformation matrix bits taken from:
# https://wiki.ubuntu.com/X/InputCoordinateTransformation
#
# Forked from https://gist.github.com/mildmojo/48e9025070a2ba40795c
# Configured to use with a Lenovo Yoga 260 (names taken from `xinput` output).
# If the rotation position ($1) is ommited, the script toggles through the different states: inverted, left, right, normal
TOUCHPAD='PIXA3854:00 093A:0274 Touchpad'
MOUSE='PIXA3854:00 093A:0274 Mouse'
TRANSFORM='Coordinate Transformation Matrix'
NORMAL="Coordinate Transformation Matrix (142): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000"
INVERTED="Coordinate Transformation Matrix (142): -1.000000, 0.000000, 1.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, 1.000000"
LEFT="Coordinate Transformation Matrix (142): 0.000000, -1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000"
RIGHT="Coordinate Transformation Matrix (142): 0.000000, 1.000000, 0.000000, -1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000"
function do_rotate
{
xrandr --output $1 --rotate $2
TRANSFORM='Coordinate Transformation Matrix'
case "$2" in
normal)
[ ! -z "$TOUCHPAD" ] && xinput set-prop "$TOUCHPAD" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
[ ! -z "$MOUSE" ] && xinput set-prop "$MOUSE" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
;;
inverted)
[ ! -z "$TOUCHPAD" ] && xinput set-prop "$TOUCHPAD" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
[ ! -z "$MOUSE" ] && xinput set-prop "$MOUSE" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
;;
left)
[ ! -z "$TOUCHPAD" ] && xinput set-prop "$TOUCHPAD" "$TRANSFORM" 0 -1 1 1 0 0 0 0 1
[ ! -z "$MOUSE" ] && xinput set-prop "$MOUSE" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
;;
right)
[ ! -z "$TOUCHPAD" ] && xinput set-prop "$TOUCHPAD" "$TRANSFORM" 0 1 0 -1 0 1 0 0 1
[ ! -z "$MOUSE" ] && xinput set-prop "$MOUSE" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
;;
esac
}
XDISPLAY=`xrandr --current | grep primary | sed -e 's/ .*//g'`
state=`xrandr --query --verbose | grep " connected" | cut -d ' ' -f 6`
if [ $state = 'normal' ]; then
state=right
elif [ $state = 'right' ]; then
state=inverted
elif [ $state = 'inverted' ]; then
state=left
else
state=normal
fi
do_rotate $XDISPLAY $state