summaryrefslogtreecommitdiff
blob: fa6552ea14ff0da90197559010eac7e381de3c00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#!/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