|
|
|
@ -0,0 +1,50 @@
|
|
|
|
|
# Calculate chmod=0755
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
source /lib/rc/sh/functions.sh
|
|
|
|
|
|
|
|
|
|
variable_value()
|
|
|
|
|
{
|
|
|
|
|
local varname=$1
|
|
|
|
|
/usr/sbin/cl-core-variables-show --only-value $varname
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ONLINE_USERS="`variable_value desktop.cl_desktop_online_user`"
|
|
|
|
|
|
|
|
|
|
# если есть пользователи в сеансе или выполняется выход
|
|
|
|
|
if [[ -n $ONLINE_USERS ]] || pgrep -f 'xdm/xdm --logout' &>/dev/null
|
|
|
|
|
then
|
|
|
|
|
# есть пользователи в сеансе
|
|
|
|
|
if [[ -n $ONLINE_USERS ]]
|
|
|
|
|
then
|
|
|
|
|
ebegin "Logout users"
|
|
|
|
|
# переменная 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
|
|
|
|
|
# удаляем запить о пользователе
|
|
|
|
|
/usr/bin/sessreg -d -l :$disp $user &>/dev/null
|
|
|
|
|
# выполняем принудительный выход из сеанса
|
|
|
|
|
USER="$user" /usr/share/calculate/xdm/xdm --logout &>/dev/null &
|
|
|
|
|
done
|
|
|
|
|
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
|