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-overlay/x11-base/xorg-server/files/xdm.initd

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 :