File synergylock of Package xss-lock

#!/bin/bash

shopt -q extglob
sshprompt='-qo NumberOfPasswordPrompts=0'

remote () 
{
    local lpid=$(ps x -o comm,pid= | sed -rn '/synergys/{ s/.*[[:blank:]]([[:digit:]]*)/\1/p; }')
    local tcp recv send src dest info
    test -n "$lpid" || return
    while read recv send src dest info
    do
	echo [${dest%:*}]=${dest#*:}
    done < <(ss -Htnp state established 2>/dev/null|grep ",pid=$lpid,")
}

if test -d ${XDG_RUNTIME_DIR=/run/user/${UID}}
then
    plock=$(readlink ${XDG_RUNTIME_DIR}/lockscreen)
    if test -n "$plock"
    then
	xss=$(readlink /proc/${plock}/exe)
    fi
    case "$xss" in
    (*/xss-lock) ;;
    (*) echo No xss-lock process found 1>&2
	exit 1
	;;
    esac
fi

eval declare -A ports=($(remote))
declare -A displays xauths
for ip in "${!ports[@]}"
do
    pid=$(ssh $sshprompt -fax $USER@$ip -- exec lsof -ti tcp:${ports[$ip]} 2> /dev/null)
    env=($(ssh -fax $USER@$ip -- exec exec ps -p 21727 eh | tr ' ' '\n' | grep -E '^(DISPLAY|XAUTHORITY)'))
    for e in ${env[@]}
    do
	case "$e" in
	DISPLAY=*)	displays[$ip]=${e#*=}	;;
	XAUTHORITY=*)	xauths[$ip]=${e#*=}	;;
	esac
    done
done

xsslock=$(pidof lockscreen)
while read status
do
    case "$status" in
    (clone*=*)
	active=${status#*= }
	for ip in "${!ports[@]}"
	do
	    ssh $sshprompt -fax $USER@$ip -- pidof xsecurelock '||' env ${xauths[$ip]:+"XAUTHORITY=${xauths[$ip]}"} ${displays[$ip]:+DISPLAY=${displays[$ip]}} exec xset s activate
	done
	inotifywait -q -q -e close /proc/${active}/exe
	;;
    (*SIGCHLD*)
	for ip in "${!ports[@]}"
	do
 	    ssh $sshprompt -fax $USER@$ip -- env ${xauths[$ip]:+"XAUTHORITY=${xauths[$ip]}"} ${displays[$ip]:+DISPLAY=${displays[$ip]}} xset s reset '&&' exec killall -q -u $USER -TERM xsecurelock
	done
	;;
    esac
done < <(exec -a "watch lockscreen" strace -qq -e clone -p $xsslock 2>&1)
openSUSE Build Service is sponsored by