#!/bin/bash 

source /lib/rc/sh/functions.sh

variable_value()
{
	local varname=$1
	/usr/libexec/calculate/cl-variable --value $varname
}

ONLINE_USERS="`variable_value desktop.cl_desktop_online_user`"

# получить доменных пользователей которые не online, но их ресурсы подключены
domain_users() {
	for mp in $(grep -Po "^//.*/homes\s+.*Home" /proc/mounts |
			awk '{print $2}');do
		local username=$(basename $(dirname $mp))
		for user in ${ONLINE_USERS//,/ }
		do
			if [[ $user == $username ]]
			then
				username=
			fi
		done
		[[ -n $username ]] && echo $username
	done | sort | uniq
}

DOMAIN_USERS=( $(domain_users) )

# если есть пользователи в сеансе или выполняется выход
if [[ -n $ONLINE_USERS ]] || [[ -n $DOMAIN_USERS ]] || pgrep -f 'xdm/xdm --logout' &>/dev/null
then
	if [[ -n $ONLINE_USERS ]] || [[ -n $DOMAIN_USERS ]]
	then
		ebegin "Logout users"
	fi
	# есть пользователи в сеансе
	if [[ -n $ONLINE_USERS ]]
	then
		# переменная online_data возвращает строки пользователь,дисплей
		for user_disp in $(variable_value desktop.cl_desktop_online_data | sed -r "s/;/ /g")
		do
			user=$(echo $user_disp | cut -d: -f1)
			disp=$(echo $user_disp | cut -d: -f2)
			# завершаем сессию пользователя
			/usr/sbin/cl-core --method desktop_logout $user &>/dev/null
			sleep 1
			# если корректное завершение не удалось
			if who | grep -q -P "$user.*:$disp"
			then
				# удаляем запить о пользователе
				/usr/bin/sessreg -d -l :$disp $user &>/dev/null
				# выполняем принудительный выход из сеанса
				USER="$user" /usr/share/calculate/xdm/xdm --logout &>/dev/null &
			fi
		done
	fi
	if [[ -n "${DOMAIN_USERS[@]}" ]]
	then
		for user in ${DOMAIN_USERS[@]}
		do
			# выполняем принудительный выход из сеанса
			USER="$user" /usr/share/calculate/xdm/xdm --logout &>/dev/null &
		done
	fi
	if [[ -n $ONLINE_USERS ]] || [[ -n $DOMAIN_USERS ]]
	then
		eend 0
	fi

	# ожидаение завершения процесса выхода пользователя из сеанса
	if pgrep -f 'xdm/xdm --logout' &>/dev/null
	then
		ebegin "Please wait for complete logout"
		for i in {1..500}
		do
			if pgrep -f 'xdm/xdm --logout' &>/dev/null
			then
				sleep 1
			else
				break
			fi
		done
		eend 0
	fi
fi
