You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-utils-3-client/bin/logout

88 lines
2.5 KiB

#!/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