]> git.draconx.ca Git - gentoo-draconx.git/blob - x11-base/xorg-server/files/xdm.initd
xorg-server: Version bump to 1.8.0 + DontLie.
[gentoo-draconx.git] / x11-base / xorg-server / files / xdm.initd
1 #!/sbin/runscript
2 # Copyright 1999-2004 Gentoo Foundation
3 # Distributed under the terms of the GNU General Public License, v2
4 # $Header: /var/cvsroot/gentoo-x86/x11-base/xorg-server/files/xdm.initd,v 1.1 2010/04/13 10:07:39 scarabeus Exp $
5
6 # This is here to serve as a note to myself, and future developers.
7 #
8 # Any Display manager (gdm,kdm,xdm) has the following problem:  if
9 # it is started before any getty, and no vt is specified, it will
10 # usually run on vt2.  When the getty on vt2 then starts, and the
11 # DM is already started, the getty will take control of the keyboard,
12 # leaving us with a "dead" keyboard.
13 #
14 # Resolution: add the following line to /etc/inittab
15 #
16 #  x:a:once:/etc/X11/startDM.sh
17 #
18 # and have /etc/X11/startDM.sh start the DM in daemon mode if
19 # a lock is present (with the info of what DM should be started),
20 # else just fall through.
21 #
22 # How this basically works, is the "a" runlevel is a additional
23 # runlevel that you can use to fork processes with init, but the
24 # runlevel never gets changed to this runlevel.  Along with the "a"
25 # runlevel, the "once" key word means that startDM.sh will only be
26 # run when we specify it to run, thus eliminating respawning
27 # startDM.sh when "xdm" is not added to the default runlevel, as was
28 # done previously.
29 #
30 # This script then just calls "telinit a", and init will run
31 # /etc/X11/startDM.sh after the current runlevel completes (this
32 # script should only be added to the actual runlevel the user is
33 # using).
34 #
35 # Martin Schlemmer
36 # aka Azarah
37 # 04 March 2002
38
39 depend() {
40         need localmount xdm-setup
41
42         # this should start as early as possible
43         # we can't do 'before *' as that breaks it
44         # (#139824) Start after ypbind and autofs for network authentication
45         # (#145219 #180163) Could use lirc mouse as input device
46         # (#70689 comment #92) Start after consolefont to avoid display corruption
47         # (#291269) Start after quota, since some dm need readable home
48         after bootmisc consolefont modules netmount
49         after readahead-list ypbind autofs openvpn gpm lircmd
50         after quota
51         before alsasound
52
53         # Start before X
54         use consolekit xfs
55         @HALD_DEPEND@
56 }
57
58 setup_dm() {
59         local MY_XDM="$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')"
60
61         # Load our root path from profile.env
62         # Needed for kdm
63         PATH="${PATH}:$(. /etc/profile.env; echo "${ROOTPATH}")"
64
65         case "${MY_XDM}" in
66                 kdm|kde)
67                         EXE="$(which kdm)"
68                         PIDFILE=/var/run/kdm.pid
69                         ;;
70                 kdm-*)
71                         EXE="/usr/kde/${MY_XDM#kdm-}/bin/kdm"
72                         PIDFILE=/var/run/kdm.pid
73                         ;;
74                 entrance*)
75                         EXE=/usr/sbin/entranced
76                         PIDFILE=/var/lib/entranced.pid
77                         ;;
78                 gdm|gnome)
79                         EXE=/usr/bin/gdm
80                         [ "${RC_UNAME}" != "Linux" ] && NAME=gdm-binary
81                         PIDFILE=/var/run/gdm.pid
82                         ;;
83                 wdm)
84                         EXE=/usr/bin/wdm
85                         PIDFILE=
86                         ;;
87                 gpe)
88                         EXE=/usr/bin/gpe-dm
89                         PIDFILE=/var/run/gpe-dm.pid
90                         ;;
91                 *)
92                         # first find out if there is such executable
93                         EXE="$(which ${MY_XDM} 2>/dev/null)"
94                         PIDFILE="/var/run/${MY_XDM}.pid"
95
96                         # warn user that he is doing sick things if the exe was not found
97                         if [ "${EXE}" = "" ]; then
98                                 echo "ERROR: Your XDM value is invalid."
99                                 echo "  No ${MY_XDM} executable could be found on your system."
100                         fi
101                         ;;
102         esac
103
104         if ! [ -x "${EXE}" ]; then
105                 EXE=/usr/bin/xdm
106                 PIDFILE=/var/run/xdm.pid
107                 if ! [ -x "/usr/bin/xdm" ]; then
108                         echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm,"
109                         echo "  or install x11-apps/xdm package"
110                         eend 255
111                 fi
112         fi
113 }
114
115 # Check to see if something is defined on our VT
116 vtstatic() {
117         if [ -e /etc/inittab ] ; then
118                 grep -Eq "^[^#]+.*\<tty$1\>" /etc/inittab
119         elif [ -e /etc/ttys ] ; then
120                 grep -q "^ttyv$(($1 - 1))" /etc/ttys
121         else
122                 return 1
123         fi
124 }
125
126 start() {
127         local EXE= NAME= PIDFILE=
128         setup_dm
129
130         if [ -f /etc/.noxdm ] ; then
131                 einfo "Skipping ${EXE}, /etc/.noxdm found"
132                 rm /etc/.noxdm
133                 return 0
134         fi
135
136         ebegin "Setting up ${EXE##*/}"
137
138         # save the prefered DM
139         save_options "service" "${EXE}"
140         save_options "name"    "${NAME}"
141         save_options "pidfile" "${PIDFILE}"
142
143         if [ -n "${CHECKVT-y}" ] ; then
144                 if vtstatic "${CHECKVT:-7}" ; then
145                         if [ -x /sbin/telinit ] && [ "${SOFTLEVEL}" != "BOOT" ] && [ "${RC_SOFTLEVEL}" != "BOOT" ] ; then
146                                 ewarn "Something is already defined on VT ${CHECKVT:-7}, will start X later"
147                                 telinit a >/dev/null 2>/dev/null
148                                 return 0
149                         else
150                                 eerror "Something is already defined on VT ${CHECKVT:-7}, not starting"
151                                 return 1
152                         fi
153                 fi
154         fi
155
156         /etc/X11/startDM.sh
157         eend 0
158 }
159
160 stop() {
161         local retval=0
162         local curvt=
163         if [ -t 0 ] ; then
164                 if type fgconsole >/dev/null 2>/dev/null ; then
165                         curvt="$(fgconsole 2>/dev/null)"
166                 else
167                         curvt="$(tty)"
168                         case "${curvt}" in
169                                 /dev/ttyv[0-9]*) curvt="${curvt#/dev/ttyv*}" ;;
170                                 *) curvt= ;;
171                         esac
172                 fi
173         fi
174         local myexe="$(get_options "service")"
175         local myname="$(get_options "name")"
176         local mypidfile="$(get_options "pidfile")"
177         local myservice=${myexe##*/}
178
179         [ -z "${myexe}" ] && return 0
180
181         ebegin "Stopping ${myservice}"
182
183         if start-stop-daemon --quiet --test --stop --exec "${myexe}" ; then
184                 start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \
185                         ${mypidfile:+--pidfile} ${mypidfile} \
186                         ${myname:+--name} ${myname}
187                 retval=$?
188         fi
189
190         # switch back to original vt
191         if [ -n "${curvt}" ] ; then
192                 if type chvt >/dev/null 2>/dev/null ; then
193                         chvt "${curvt}"
194                 else
195                         vidcontrol -s "$((${curvt} + 1))"
196                 fi
197         fi
198
199         eend ${retval} "Error stopping ${myservice}"
200         return ${retval}
201 }
202
203 # vim: set ts=4 :