Исправлен скрипт автовхода в X сессию

master3.4
Mike Khiretskiy 10 years ago
parent 105d06313c
commit 1cece55f61

@ -43,6 +43,30 @@ killXserver()
[[ -d /proc/$KILLXPID ]] && kill -KILL $KILLXPID &>/dev/null
}
# function for waiting X server
waitX() {
displaynum=${1#:}
usingvt="using VT number"
errorX="no screens found"
successX="evdev"
logfile=/var/log/Xorg.${displaynum}.log
for i in 0.1 0.2 0.5 1
do
sleep $i
if [[ -f $logfile ]]
then
for x in 0.5 1 2 4
do
grep -q "$errorX" $logfile && return 1
grep -q "$successX" $logfile && return 0
sleep $x
done
return 1
fi
done
return 1
}
trap killXserver SIGTERM SIGINT SIGQUIT
# rerun x session for XUSER while not shutdown and bash not receivce TERM
@ -68,45 +92,48 @@ do
# perform user profile setting up
X ${DISPLAYNUM} -auth $XAUTHORITY vt${TTYNUM} -noreset &
XPID=$!
env USER=${XUSER} /usr/share/calculate/xdm/xdm --login || break
# write pam enviroment for pam_ck_connector
cat >/home/${XUSER}/.pam_environment <<EOF
if waitX ${DISPLAYNUM}
then
env USER=${XUSER} /usr/share/calculate/xdm/xdm --login || break
# write pam enviroment for pam_ck_connector
cat >/home/${XUSER}/.pam_environment <<EOF
CKCON_DISPLAY_DEVICE=
CKCON_X11_DISPLAY_DEVICE=/dev/tty${TTYNUM}
CKCON_X11_DISPLAY=${DISPLAYNUM}
EOF
# registry user in utmp and wtmp
sessreg -a -l ${DISPLAYNUM} ${XUSER}
# run x session for user XUSER in background
su - ${XUSER} -c 'source /etc/profile
# replace xinit for startx
xinit()
{
# if file is script run it throught bash
if file $1 | grep -1 "POSIX shell script"
then
/bin/bash $*
else
$*
fi
}
# run script start xsession
source /usr/bin/startx' &
# wait for right work trap SIGTERM
XSESSIONPID=$!
while [[ -d /proc/$XSESSIONPID ]] &&
[[ "$(rc-status -r)" != "shutdown" ]]
do
sleep 1
done
# remove user from utmp and wtmp
sessreg -d -l ${DISPLAYNUM} ${XUSER}
# perform logout scripts for user
if [[ -n $WAITRELOGIN ]]
# registry user in utmp and wtmp
sessreg -a -l ${DISPLAYNUM} ${XUSER}
# run x session for user XUSER in background
su - ${XUSER} -c 'source /etc/profile
# replace xinit for startx
xinit()
{
# if file is script run it throught bash
if file $1 | grep -1 "POSIX shell script"
then
sleep $WAITRELOGIN
/bin/bash $*
else
$*
fi
}
# run script start xsession
source /usr/bin/startx' &
# wait for right work trap SIGTERM
XSESSIONPID=$!
while [[ -d /proc/$XSESSIONPID ]] &&
[[ "$(rc-status -r)" != "shutdown" ]]
do
sleep 1
done
# remove user from utmp and wtmp
sessreg -d -l ${DISPLAYNUM} ${XUSER}
# perform logout scripts for user
if [[ -n $WAITRELOGIN ]]
then
sleep $WAITRELOGIN
fi
env USER=${XUSER} /usr/share/calculate/xdm/xdm --logout
fi
env USER=${XUSER} /usr/share/calculate/xdm/xdm --logout
[[ -n $XPID ]] && kill $XPID
wait $XPID
done

Loading…
Cancel
Save