All pastes #120540 Raw Edit

Lap64

public text v1 · immutable
·published 2006-08-07 11:50 UTC
rendered paste body
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2
# $Header: /var/cvsroot/gentoo-x86/x11-apps/xinit/files/xdm.start,v 1.5 2006/05/11 23:58:42 spyderous 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


# Start X Font Server before X
depend() {
	need localmount

	# this should start as early as possible
	# we can't do 'before *' as that breaks it
	after bootmisc readahead-list
	before alsasound net.lo

	# Start before X
	use acpid hald xfs
}

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=
			# Fix #65586, where MY_XDM is empty so EXE=somedir
			[ -x "/usr/bin/${MY_XDM}" -a -f "/usr/bin/${MY_XDM}" ] \
				&& EXE="/usr/bin/${MY_XDM}"
			[ -z "${EXE}" ] && EXE="/usr/bin/xdm"
			;;
	esac

	test ! -x "${EXE}" && EXE=/usr/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}"

		# Start as soon as possible if XSTATICVT is set
		if [ "${XSTATICVT}" = "yes" ] ; then
			/etc/X11/startDM.sh
		else
			#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
		fi
		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