X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=contrib%2Fpm-utils%2F40autorandr;h=a80926091539b6bb9c4cfe768f074e697ddd363f;hb=bae286948aaeced03357adccfb14d1ce84a568d1;hp=0e029af23e9f079b41ebc04293bc2990aea5d63f;hpb=756bf74c1301378f15cbe94b1a3ae2d5cf071a9d;p=deb_pkgs%2Fautorandr.git diff --git a/contrib/pm-utils/40autorandr b/contrib/pm-utils/40autorandr index 0e029af..a809260 100755 --- a/contrib/pm-utils/40autorandr +++ b/contrib/pm-utils/40autorandr @@ -3,113 +3,8 @@ # 40autorandr: Change autorandr profile on thaw/resume exec > /var/log/autorandr.log 2>&1 -AUTORANDR="autorandr -c --default default" - -# Work around #44: Long user names in w -export PROCPS_USERLEN=32 - -find_user() { - # Determine user owning the display session from $1 - D="$1" - - # Prefer loginctl over all others, see bug #39 - if [ -x "`which loginctl`" ]; then - # Based on http://unix.stackexchange.com/questions/203844/how-to-find-out-the-current-active-xserver-display-number/204498 - # by SO user intelfx - user="$( - loginctl list-sessions --no-legend | while read id uid user seat; do - loginctl show-session -p Display -p Active "$id" | while IFS='=' read property value; do - case "$property" in - Active) - if [ "$value" != "yes" ]; then - continue - fi - ;; - Display) - if [ -n "$value" -a "$value" = "$D" ]; then - echo $user - fi - ;; - esac - done - done - )" - if [ -n "$user" ]; then - echo $user - return 0 - fi - fi - - # Prefer w to who, see bug #39 - if [ -x "`which w`" ]; then - user="`w -h | awk -vD="$D" '$2 ~ ":"D"(.[0-9])?$" || $3 ~ ":"D"(.[0-9])?$" {print $1}' | head -n1`" - - if [ -z "$user" ]; then - # This fallback checks if there is exactly one user (except - # root) logged in an interactive session and assumes the - # session belongs to him. See bug #39. - user="`w -hu | awk '/^\w+/ && $1 !~ "root" { users[$1]=$1; } ENDFILE { if(asort(users) == 1) for(u in users) print users[u]; }'`" - fi - else - user="`who --all | awk -vD="$D" '$3 ~ ":"D"(.[0-9])?$" {print $1}' | head -1`" - - if [ -z "$user" ]; then - # Same fallback as above; see bug #39. - user="`who -u | awk '/^\w+/ && $1 !~ "root" { users[$1]=$1; } ENDFILE { if(asort(users) == 1) for(u in users) print users[u]; }'`" - fi - fi - - if [ -n "$user" ]; then - echo $user - return 0 - fi - - # If none of the above worked, check if there is only one user owning - # processes in $DISPLAY except root - # - # This code should be optimized somehow, but keep in mind that not all - # systems symlink sh -> bash! - OUTPUT="$( - for p in /proc/*; do - [ -d $p ] || continue - d="$(awk -v RS='\0' -F= '$1=="DISPLAY" {print $2}' $p/environ 2>/dev/null)" - if [ "$d" = "$D" ]; then - stat -c %U $p - fi - done | sort | uniq | grep -v root | nl | head -n1 - )" - count=$(echo $OUTPUT | awk '{print $1}') - user=$(echo $OUTPUT | awk '{print $2}') - - if [ "$count" -eq 1 ]; then - echo $user - return 0 - fi - - return 1 -} - -detect_display() -{ - for X in /tmp/.X11-unix/X*; do - D="${X##/tmp/.X11-unix/X}" - - user="$(find_user ":$D")" - - if [ x"$user" != x"" ]; then - logger "autorandr: Changing display configuration for display :$D, user '$user'" - export DISPLAY=":$D" - /bin/su -c "${AUTORANDR}" "$user" - fi - done -} - -if grep -q systemd /proc/1/comm && [ "$2" = "udev" ]; then - exec /bin/systemctl start autorandr-resume.service -fi - case "$1" in thaw|resume) - detect_display + autorandr --batch -c --default default ;; esac