net-ftp/proftpd: workaround missing auxillary argument to make openrc happy
[slyfox-gentoo.git] / x11-base / xorg-server / files / xdm.initd-3
blob4e4c8b207901fb04c41b95e6efa1e66b28ebb6fa
1 #!/sbin/runscript
2 # Copyright 1999-2012 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-3,v 1.5 2012/06/12 11:27:07 chithanh Exp $
6 # This is here to serve as a note to myself, and future developers.
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.
14 # Resolution: add the following line to /etc/inittab
16 #  x:a:once:/etc/X11/startDM.sh
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.
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.
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).
35 # Martin Schlemmer
36 # aka Azarah
37 # 04 March 2002
39 depend() {
40         need localmount xdm-setup
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
53         # Start before X
54         use consolekit xfs
57 setup_dm() {
58         local MY_XDM
59         
60         MY_XDM=$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')
62         # Load our root path from profile.env
63         # Needed for kdm
64         PATH=${PATH}:$(. /etc/profile.env; echo "${ROOTPATH}")
66         NAME=
67         case "${MY_XDM}" in
68                 kdm|kde)
69                         EXE="$(which kdm)"
70                         PIDFILE=/var/run/kdm.pid
71                         ;;
72                 kdm-*)
73                         EXE="/usr/kde/${MY_XDM#kdm-}/bin/kdm"
74                         PIDFILE=/var/run/kdm.pid
75                         ;;
76                 entrance*)
77                         EXE=/usr/sbin/entranced
78                         PIDFILE=/var/lib/entranced.pid
79                         ;;
80                 gdm|gnome)
81                         EXE=/usr/bin/gdm
82                         [ "${RC_UNAME}" != "Linux" ] && NAME=gdm-binary
83                         PIDFILE=/var/run/gdm.pid
84                         ;;
85                 wdm)
86                         EXE=/usr/bin/wdm
87                         PIDFILE=
88                         ;;
89                 gpe)
90                         EXE=/usr/bin/gpe-dm
91                         PIDFILE=/var/run/gpe-dm.pid
92                         ;;
93                 lxdm)
94                         EXE=/usr/sbin/lxdm-binary
95                         PIDFILE=/var/run/lxdm.pid
96                         START_STOP_ARGS="--background"
97                         ;;
98                 lightdm)
99                         EXE=/usr/sbin/lightdm
100                         PIDFILE=/var/run/lightdm.pid
101                         START_STOP_ARGS="--background"
102                         ;;
103                 *)
104                         # first find out if there is such executable
105                         EXE="$(which ${MY_XDM} 2>/dev/null)"
106                         PIDFILE="/var/run/${MY_XDM}.pid"
108                         # warn user that he is doing sick things if the exe was not found
109                         if [ -z "${EXE}" ]; then
110                                 echo "ERROR: Your XDM value is invalid."
111                                 echo "  No ${MY_XDM} executable could be found on your system."
112                         fi
113                         ;;
114         esac
116         if ! [ -x "${EXE}" ]; then
117                 EXE=/usr/bin/xdm
118                 PIDFILE=/var/run/xdm.pid
119                 if ! [ -x "/usr/bin/xdm" ]; then
120                         echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm,"
121                         echo "  or install x11-apps/xdm package"
122                         eend 255
123                 fi
124         fi
127 # Check to see if something is defined on our VT
128 vtstatic() {
129         if [ -e /etc/inittab ] ; then
130                 grep -Eq "^[^#]+.*\<tty$1\>" /etc/inittab
131         elif [ -e /etc/ttys ] ; then
132                 grep -q "^ttyv$(($1 - 1))" /etc/ttys
133         else
134                 return 1
135         fi
138 start() {
139         local EXE NAME PIDFILE
140         setup_dm
142         if [ -f /etc/.noxdm ]; then
143                 einfo "Skipping ${EXE##*/}, /etc/.noxdm found or \"nox\" bootparam passed."
144                 rm /etc/.noxdm
145                 return 0
146         fi
148         ebegin "Setting up ${EXE##*/}"
150         # save the prefered DM
151         save_options "service" "${EXE}"
152         save_options "name"    "${NAME}"
153         save_options "pidfile" "${PIDFILE}"
154         save_options "start_stop_args" "${START_STOP_ARGS}"
156         if [ -n "${CHECKVT-y}" ] ; then
157                 if vtstatic "${CHECKVT:-7}" ; then
158                         if [ -x /sbin/telinit ] && [ "${SOFTLEVEL}" != "BOOT" ] && [ "${RC_SOFTLEVEL}" != "BOOT" ]; then
159                                 ewarn "Something is already defined on VT ${CHECKVT:-7}, will start X later"
160                                 telinit a >/dev/null 2>&1
161                                 return 0
162                         else
163                                 eerror "Something is already defined on VT ${CHECKVT:-7}, not starting"
164                                 return 1
165                         fi
166                 fi
167         fi
169         /etc/X11/startDM.sh
170         eend 0
173 stop() {
174         local curvt retval
176         retval=0
177         if [ -t 0 ]; then
178                 if type fgconsole >/dev/null 2>&1; then
179                         curvt=$(fgconsole 2>/dev/null)
180                 else
181                         curvt=$(tty)
182                         case "${curvt}" in
183                                 /dev/ttyv[0-9]*) curvt=${curvt#/dev/ttyv} ;;
184                                 *) curvt= ;;
185                         esac
186                 fi
187         fi
188         local myexe myname mypidfile myservice
189         myexe=$(get_options "service")
190         myname=$(get_options "name")
191         mypidfile=$(get_options "pidfile")
192         myservice=${myexe##*/}
194         [ -z "${myexe}" ] && return 0
196         ebegin "Stopping ${myservice}"
198         if start-stop-daemon --quiet --test --stop --exec "${myexe}"; then
199                 start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 \
200                         ${mypidfile:+--pidfile} ${mypidfile} \
201                         ${myname:+--name} ${myname}
202                 retval=${?}
203         fi
205         # switch back to original vt
206         if [ -n "${curvt}" ]; then
207                 if type chvt >/dev/null 2>&1; then
208                         chvt "${curvt}"
209                 else
210                         vidcontrol -s "$((curvt + 1))"
211                 fi
212         fi
214         eend ${retval} "Error stopping ${myservice}"
215         return ${retval}
218 # vim: set ts=4 :