blob: 55a296237c5343c8768f9c3d125e807e886c7016 (
plain) (
blame)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
#!/bin/bash
set -e
INTERNAL=$(xrandr --query | gawk '/^LVDS[0-9] connected /{ print $1; exit }')
EXTERNAL=$(xrandr --query | gawk '!/^LVDS[0-9]/ && / connected /{print $1; exit }')
show_usage() {
cat <<END
Screen switch helper script.
Usage: $0 <command>
commands:
toggle
external
internal
mirror
END
}
screen_external() {
xrandr --output "$INTERNAL" --off
xrandr --output "$EXTERNAL" --auto
}
screen_internal() {
xrandr --output "$INTERNAL" --auto
xrandr --output "$EXTERNAL" --off
}
screen_mirror() {
xrandr --output "$INTERNAL" --auto
xrandr --output "$EXTERNAL" --auto --same-as "$INTERNAL"
}
screen_toggle() {
case "$STATE" in
internal)
screen_external
;;
external)
screen_internal
;;
mirror)
screen_external
;;
*)
screen_internal
;;
esac
}
screen_get_state() {
SCREEN="$1"
xrandr --query | grep "^$SCREEN"
#xrandr --query | grep "^$SCREEN" | grep connected | sed 's/.*connected\s*\([^ ]\+\).*/\1/' | grep -o '[0-9]*x[0-9]*' || echo
}
is_connected() {
echo "$1" | grep ' connected' >/dev/null && echo 1 || echo
}
is_active() {
echo "$1" | grep connected | sed 's/.*connected\s*\([^ ]\+\).*/\1/' | grep -o '[0-9]*x[0-9]*' || echo
}
INTERNAL_STATE=$(screen_get_state "$INTERNAL")
EXTERNAL_STATE=$(screen_get_state "$EXTERNAL")
EXTERNAL_CONNECTED=$(is_connected "$EXTERNAL_STATE")
if [ -z "$EXTERNAL_CONNECTED" ] ; then
screen_internal
exit 0
fi
INTERNAL_STATE=$(is_active "$INTERNAL_STATE")
EXTERNAL_STATE=$(is_active "$EXTERNAL_STATE")
if [ -z "$INTERNAL_STATE" ] ; then
STATE="external"
elif [ -z "$EXTERNAL_STATE" ] ; then
STATE="internal"
else
STATE="mirror"
fi
DO="$1"
if [ -z "$DO" ] ; then
DO="toggle"
fi
case "$DO" in
toggle)
screen_toggle
;;
internal)
screen_internal
;;
external)
screen_external
;;
mirror)
screen_mirror
;;
*)
show_usage >&2
;;
esac
|