]> git.donarmstrong.com Git - deb_pkgs/autorandr.git/blob - contrib/pm-utils/40autorandr
4d59012515821c54d630eeda5987f4b5a9653361
[deb_pkgs/autorandr.git] / contrib / pm-utils / 40autorandr
1 #!/bin/sh
2 #
3 # 40autorandr: Change autorandr profile on thaw/resume
4 exec > /var/log/autorandr.log 2>&1
5
6 AUTORANDR="autorandr -c --default default"
7
8 # Work around #44: Long user names in w
9 export PROCPS_USERLEN=32
10
11 detect_display()
12 {
13         for X in /tmp/.X11-unix/X*; do
14                 D="${X##/tmp/.X11-unix/X}"
15                 # Prefer w to who, see bug #39
16                 if [ -x "`which w`" ]; then
17                         user="`w -h | awk -vD="$D" '$2 ~ ":"D"(.[0-9])?$" || $3 ~ ":"D"(.[0-9])?$" {print $1}' | head -n1`"
18
19                         if [ -z "$user" ];      then
20                                 # This fallback checks if there is exactly one user (except
21                                 # root) logged in an interactive session and assumes the
22                                 # session belongs to him. See bug #39.
23                                 user="`w -hu | awk '/^\w+/ && $1 !~ "root" { users[$1]=$1; } ENDFILE { if(asort(users) == 1) for(u in users) print users[u]; }'`"
24                         fi
25                 else
26                         user="`who --all | awk -vD="$D" '$3 ~ ":"D"(.[0-9])?$" {print $1}' | head -1`"
27
28                         if [ -z "$user" ];      then
29                                 # Same fallback as above; see bug #39.
30                                 user="`who -u | awk '/^\w+/ && $1 !~ "root" { users[$1]=$1; } ENDFILE { if(asort(users) == 1) for(u in users) print users[u]; }'`"
31                         fi
32                 fi
33
34                 if [ x"$user" != x"" ]; then
35                         logger "autorandr: Changing display configuration for display :$D, user '$user'"
36                         export DISPLAY=":$D"
37                         /bin/su -c "${AUTORANDR}" "$user"
38                 fi
39         done
40 }
41
42 if grep -q systemd /proc/1/comm && [ "$2" = "udev" ]; then
43     exec /bin/systemctl start autorandr-resume.service
44 fi
45
46 case "$1" in
47         thaw|resume)
48                 detect_display
49                 ;;
50 esac