| Paste number 21155: | xdm |
| Pasted by: | azureal |
| When: | 3 years, 3 weeks ago |
| Share: | Tweet this! | http://paste.lisp.org/+GBN |
| Channel: | None |
| Paste contents: |
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2
# $Header: /home/cvsroot/gentoo-x86/x11-base/xfree/files/4.3.99.8/xdm.start,v 1.1 2003/07/11 22:54:09 spyderous Exp $
# This is here to serve as a note to myself, and future developers.
#
# Any Display manager (gdm,kdm,xdm) have 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 runleve, as was
# done previously.
#
# This script then just calls "tellinit 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
# Start X Font Server before X
depend() {
use xfs hotplug
}
setup_dm() {
source /etc/profile.env
export PATH="/bin:/sbin:/usr/bin:/usr/sbin:${ROOTPATH}"
local MY_XDM="$(echo ${DISPLAYMANAGER} | awk '{ print tolower($1) }')"
case "${MY_XDM}" in
kdm|kde|kde2|kde3)
EXE="$(which kdm)"
;;
entrance*)
EXE="$(which entranced)"
;;
gdm|gnome)
EXE=/usr/bin/gdm
;;
wdm)
EXE=/usr/bin/wdm
;;
*)
EXE=
for x in /usr/bin /usr/X11R6/bin
do
# Fix #65586, where MY_XDM is empty so EXE=somedir
[ -x "${x}/${MY_XDM}" -a -f "${x}/${MY_XDM}" ] \
&& EXE="${x}/${MY_XDM}"
done
[ -z "${EXE}" ] && EXE="/usr/X11R6/bin/xdm"
;;
esac
test ! -x "${EXE}" && EXE=/usr/X11R6/bin/xdm
SERVICE="${EXE##*/}"
}
cmdline_opt() {
if [[ "$#" -ne 1 ]]; then
return 1
fi
for opt in $(</proc/cmdline); do
case ${opt} in
${1}) eval ${1}="true" ;;
esac
done
}
nox() {
# Don't start X if we were passed 'nox' at boot (#83680)
cmdline_opt nox
if [[ "$?" -ne 0 ]]; then
return 1
fi
if [[ -n "${nox}" ]]; then
return 0
else
return 1
fi
}
start() {
setup_dm
if nox; then
einfo "Skipping ${EXE}, received 'nox'"
else
ebegin "Setting up ${SERVICE}"
#save the prefered DM
save_options "service" "${EXE}"
#tell init to run /etc/X11/startDM.sh after current
#runlevel is finished (should *not* be in the "boot"
# runlevel).
/sbin/telinit a &>/dev/null
eend 0
fi
}
stop() {
local retval=0
local curvt="$(fgconsole)"
local myexe="$(get_options "service")"
local myservice="${myexe##*/}"
ebegin "Stopping ${myservice}"
rm -f ${svcdir}/options/xdm/service
if [ "$(ps -A | grep -e "${myservice}")" ]
then
start-stop-daemon --stop --quiet \
--exec ${myexe} &>/dev/null
retval=$?
fi
#switch back to original vt
chvt "${curvt}" &>/dev/null
eend ${retval} "Error stopping ${myservice}."
return ${retval}
}
# vim:ts=4
This paste has no annotations.