Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)

Paste

Pasted as Plain Text by asd ( 15 years ago )
#!/sbin/runscript
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2
# $Header: /var/cvsroot/gentoo-x86/x11-base/xorg-server/files/xdm.initd-3,v 1.1 2010/09/28 12:43:19 scarabeus 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

depend() {
 need localmount xdm-setup

 # this should start as early as possible
 # we can't do 'before *' as that breaks it
 # (#139824) Start after ypbind and autofs for network authentication
 # (#145219 #180163) Could use lirc mouse as input device
 # (#70689 comment #92) Start after consolefont to avoid display corruption
 # (#291269) Start after quota, since some dm need readable home
 after bootmisc consolefont modules netmount
 after readahead-list ypbind autofs openvpn gpm lircmd
 after quota
 before alsasound

 # Start before X
 use consolekit xfs
}

setup_dm() {
 local MY_XDM
 
 MY_XDM=$(echo "${DISPLAYMANAGER}" | tr '[:upper:]' '[:lower:]')

 # Load our root path from profile.env
 # Needed for kdm
 PATH=${PATH}:$(. /etc/profile.env; echo "${ROOTPATH}")

 NAME=
 case "${MY_XDM}" in
  kdm|kde)
   EXE="$(which kdm)"
   PIDFILE=/var/run/kdm.pid
   ;;
  kdm-*)
   EXE="/usr/kde/${MY_XDM#kdm-}/bin/kdm"
   PIDFILE=/var/run/kdm.pid
   ;;
  entrance*)
   EXE=/usr/sbin/entranced
   PIDFILE=/var/lib/entranced.pid
   ;;
  gdm|gnome)
   EXE=/usr/bin/gdm
   [ "${RC_UNAME}" != "Linux" ] && NAME=gdm-binary
   PIDFILE=/var/run/gdm.pid
   ;;
  wdm)
   EXE=/usr/bin/wdm
   PIDFILE=
   ;;
  gpe)
   EXE=/usr/bin/gpe-dm
   PIDFILE=/var/run/gpe-dm.pid
   ;;
  *)
   # first find out if there is such executable
   EXE="$(which ${MY_XDM} 2>/dev/null)"
   PIDFILE="/var/run/${MY_XDM}.pid"

   # warn user that he is doing sick things if the exe was not found
   if [ -z "${EXE}" ]; then
    echo "ERROR: Your XDM value is invalid."
    echo "  No ${MY_XDM} executable could be found on your system."
   fi
   ;;
 esac

 if ! [ -x "${EXE}" ]; then
  EXE=/usr/bin/xdm
  PIDFILE=/var/run/xdm.pid
  if ! [ -x "/usr/bin/xdm" ]; then
   echo "ERROR: Please set your DISPLAYMANAGER variable in /etc/conf.d/xdm,"
   echo " or install x11-apps/xdm package"
   eend 255
  fi
 fi
}

# Check to see if something is defined on our VT
vtstatic() {
 if [ -e /etc/inittab ] ; then
  grep -Eq "^[^#]+.*<tty$1>" /etc/inittab
 elif [ -e /etc/ttys ] ; then
  grep -q "^ttyv$(($1 - 1))" /etc/ttys
 else
  return 1
 fi
}

start() {
 local EXE NAME PIDFILE
 setup_dm

 if [ -f /etc/.noxdm ]; then
  einfo "Skipping ${EXE##*/}, /etc/.noxdm found or "nox" bootparam passed."
  rm /etc/.noxdm
  return 0
 fi

 ebegin "Setting up ${EXE##*/}"

 # save the prefered DM
 save_options "service" "${EXE}"
 save_options "name"    "${NAME}"
 save_options "pidfile" "${PIDFILE}"

 if [ -n "${CHECKVT-y}" ] ; then
  if vtstatic "${CHECKVT:-7}" ; then
   if [ -x /sbin/telinit ] && [ "${SOFTLEVEL}" != "BOOT" ] && [ "${RC_SOFTLEVEL}" != "BOOT" ]; then
    ewarn "Something is already defined on VT ${CHECKVT:-7}, will start X later"
    telinit a >/dev/null 2>&1
    return 0
   else
    eerror "Something is already defined on VT ${CHECKVT:-7}, not starting"
    return 1
   fi
  fi
 fi

 /etc/X11/startDM.sh
 eend 0
}

stop() {
 local curvt retval

 retval=0
 if [ -t 0 ]; then
  if type fgconsole >/dev/null 2>&1; then
   curvt=$(fgconsole 2>/dev/null)
  else
   curvt=$(tty)
   case "${curvt}" in
    /dev/ttyv[0-9]*) curvt=${curvt#/dev/ttyv} ;;
    *) curvt= ;;
   esac
  fi
 fi
 local myexe myname mypidfile myservice
 myexe=$(get_options "service")
 myname=$(get_options "name")
 mypidfile=$(get_options "pidfile")
 myservice=${myexe##*/}

 [ -z "${myexe}" ] && return 0

 ebegin "Stopping ${myservice}"

 if start-stop-daemon --quiet --test --stop --exec "${myexe}"; then
  start-stop-daemon --stop --exec "${myexe}" --retry TERM/5/TERM/5 
   ${mypidfile:+--pidfile} ${mypidfile} 
   ${myname:+--name} ${myname}
  retval=${?}
 fi

 # switch back to original vt
 if [ -n "${curvt}" ]; then
  if type chvt >/dev/null 2>&1; then
   chvt "${curvt}"
  else
   vidcontrol -s "$((curvt + 1))"
  fi
 fi

 eend ${retval} "Error stopping ${myservice}"
 return ${retval}
}

# vim: set ts=4 :

 

Revise this Paste

Your Name: Code Language: