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.
203 lines
5.3 KiB
203 lines
5.3 KiB
#!/sbin/runscript
|
|
# Copyright 1999-2004 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License, v2
|
|
# $Header: /var/cvsroot/gentoo-x86/x11-base/xorg-server/files/xdm.initd,v 1.1 2010/04/13 10:07:39 scarabeus Exp $
|
|
|
|
# This is here to serve as a note to myself, and future developers.
|
|
#
|
|
# Any Display manager (gdm,kdm,xdm) has the following problem: if
|
|
# it is started before any getty, and no vt is specified, it will
|
|
# usually run on vt2. When the getty on vt2 then starts, and the
|
|
# DM is already started, the getty will take control of the keyboard,
|
|
# leaving us with a "dead" keyboard.
|
|
#
|
|
# Resolution: add the following line to /etc/inittab
|
|
#
|
|
# x:a:once:/etc/X11/startDM.sh
|
|
#
|
|
# and have /etc/X11/startDM.sh start the DM in daemon mode if
|
|
# a lock is present (with the info of what DM should be started),
|
|
# else just fall through.
|
|
#
|
|
# How this basically works, is the "a" runlevel is a additional
|
|
# runlevel that you can use to fork processes with init, but the
|
|
# runlevel never gets changed to this runlevel. Along with the "a"
|
|
# runlevel, the "once" key word means that startDM.sh will only be
|
|
# run when we specify it to run, thus eliminating respawning
|
|
# startDM.sh when "xdm" is not added to the default runlevel, as was
|
|
# done previously.
|
|
#
|
|
# This script then just calls "telinit a", and init will run
|
|
# /etc/X11/startDM.sh after the current runlevel completes (this
|
|
# script should only be added to the actual runlevel the user is
|
|
# using).
|
|
#
|
|
# Martin Schlemmer
|
|
# aka Azarah
|
|
# 04 March 2002
|
|
|
|
depend() {
|
|
need localmount xdm-setup
|
|
|
|
# this should start as early as possible
|
|
# we can't do 'before *' as that breaks it
|
|
# (#139824) Start after ypbind and autofs for network authentication
|
|
# (#145219 #180163) Could use lirc mouse as input device
|
|
# (#70689 comment #92) Start after consolefont to avoid display corruption
|
|
# (#291269) Start after quota, since some dm need readable home
|
|
after bootmisc consolefont modules netmount
|
|
after readahead-list ypbind autofs openvpn gpm lircmd
|
|
after quota
|
|
before alsasound
|
|
|
|
# Start before X
|
|
use consolekit xfs
|
|
@HALD_DEPEND@
|
|
}
|
|
|
|
setup_dm() {
|
|
local MY_XDM="$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')"
|
|
|
|
# Load our root path from profile.env
|
|
# Needed for kdm
|
|
PATH="${PATH}:$(. /etc/profile.env; echo "${ROOTPATH}")"
|
|
|
|
case "${MY_XDM}" in
|
|
kdm|kde)
|
|
EXE="$(which kdm)"
|
|
PIDFILE=/var/run/kdm.pid
|
|
;;
|
|
kdm-*)
|
|
EXE="/usr/kde/${MY_XDM#kdm-}/bin/kdm"
|
|
PIDFILE=/var/run/kdm.pid
|
|
;;
|
|
entrance*)
|
|
EXE=/usr/sbin/entranced
|
|
PIDFILE=/var/lib/entranced.pid
|
|
;;
|
|
gdm|gnome)
|
|
EXE=/usr/bin/gdm
|
|
[ "${RC_UNAME}" != "Linux" ] && NAME=gdm-binary
|
|
PIDFILE=/var/run/gdm.pid
|
|
;;
|
|
wdm)
|
|
EXE=/usr/bin/wdm
|
|
PIDFILE=
|
|
;;
|
|
gpe)
|
|
EXE=/usr/bin/gpe-dm
|
|
PIDFILE=/var/run/gpe-dm.pid
|
|
;;
|
|
*)
|
|
# first find out if there is such executable
|
|
EXE="$(which ${MY_XDM} 2>/dev/null)"
|
|
PIDFILE="/var/run/${MY_XDM}.pid"
|
|
|
|
# warn user that he is doing sick things if the exe was not found
|
|
if [ "${EXE}" = "" ]; then
|
|
echo "ERROR: Your XDM value is invalid."
|
|
echo " No ${MY_XDM} executable could be found on your system."
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
if ! [ -x "${EXE}" ]; then
|
|
EXE=/usr/bin/xdm
|
|
PIDFILE=/var/run/xdm.pid
|
|
if ! [ -x "/usr/bin/xdm" ]; then
|
|
echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm,"
|
|
echo " or install x11-apps/xdm package"
|
|
eend 255
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Check to see if something is defined on our VT
|
|
vtstatic() {
|
|
if [ -e /etc/inittab ] ; then
|
|
grep -Eq "^[^#]+.*\<tty$1\>" /etc/inittab
|
|
elif [ -e /etc/ttys ] ; then
|
|
grep -q "^ttyv$(($1 - 1))" /etc/ttys
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
start() {
|
|
local EXE= NAME= PIDFILE=
|
|
setup_dm
|
|
|
|
if [ -f /etc/.noxdm ] ; then
|
|
einfo "Skipping ${EXE}, /etc/.noxdm found"
|
|
rm /etc/.noxdm
|
|
return 0
|
|
fi
|
|
|
|
ebegin "Setting up ${EXE##*/}"
|
|
|
|
# save the prefered DM
|
|
save_options "service" "${EXE}"
|
|
save_options "name" "${NAME}"
|
|
save_options "pidfile" "${PIDFILE}"
|
|
|
|
if [ -n "${CHECKVT-y}" ] ; then
|
|
if vtstatic "${CHECKVT:-7}" ; then
|
|
if [ -x /sbin/telinit ] && [ "${SOFTLEVEL}" != "BOOT" ] && [ "${RC_SOFTLEVEL}" != "BOOT" ] ; then
|
|
ewarn "Something is already defined on VT ${CHECKVT:-7}, will start X later"
|
|
telinit a >/dev/null 2>/dev/null
|
|
return 0
|
|
else
|
|
eerror "Something is already defined on VT ${CHECKVT:-7}, not starting"
|
|
return 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
/etc/X11/startDM.sh
|
|
eend 0
|
|
}
|
|
|
|
stop() {
|
|
local retval=0
|
|
local curvt=
|
|
if [ -t 0 ] ; then
|
|
if type fgconsole >/dev/null 2>/dev/null ; then
|
|
curvt="$(fgconsole 2>/dev/null)"
|
|
else
|
|
curvt="$(tty)"
|
|
case "${curvt}" in
|
|
/dev/ttyv[0-9]*) curvt="${curvt#/dev/ttyv*}" ;;
|
|
*) curvt= ;;
|
|
esac
|
|
fi
|
|
fi
|
|
local myexe="$(get_options "service")"
|
|
local myname="$(get_options "name")"
|
|
local mypidfile="$(get_options "pidfile")"
|
|
local myservice=${myexe##*/}
|
|
|
|
[ -z "${myexe}" ] && return 0
|
|
|
|
ebegin "Stopping ${myservice}"
|
|
|
|
if start-stop-daemon --quiet --test --stop --exec "${myexe}" ; then
|
|
start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \
|
|
${mypidfile:+--pidfile} ${mypidfile} \
|
|
${myname:+--name} ${myname}
|
|
retval=$?
|
|
fi
|
|
|
|
# switch back to original vt
|
|
if [ -n "${curvt}" ] ; then
|
|
if type chvt >/dev/null 2>/dev/null ; then
|
|
chvt "${curvt}"
|
|
else
|
|
vidcontrol -s "$((${curvt} + 1))"
|
|
fi
|
|
fi
|
|
|
|
eend ${retval} "Error stopping ${myservice}"
|
|
return ${retval}
|
|
}
|
|
|
|
# vim: set ts=4 : |