parent
9165f598d0
commit
442b14b852
@ -0,0 +1,349 @@
|
||||
#! /bin/bash
|
||||
# Copyright (c) 1996-2002 SuSE Linux AG, Nuernberg, Germany.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Author: Florian La Roche, 1996
|
||||
# Werner Fink <werner@suse.de>, 1996,98,99
|
||||
# Martin Scherbaum, 1997
|
||||
# Reinhard Max <max@suse.de>, 1997
|
||||
#
|
||||
# Please send feedback to http://www.suse.de/feedback
|
||||
#
|
||||
# /etc/init.d/xdm
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: xdm
|
||||
# Required-Start: $remote_fs dbus
|
||||
# Required-Stop: $remote_fs
|
||||
# Should-Start: ypbind $syslog gpm firstboot kbd resmgr earlyxdm winbind acpid ntp
|
||||
# Should-Stop: ypbind $syslog gpm firstboot kbd resmgr earlyxdm winbind acpid ntp
|
||||
# Default-Start: 5
|
||||
# Default-Stop:
|
||||
# Description: X Display Manager
|
||||
### END INIT INFO
|
||||
|
||||
. /etc/rc.status
|
||||
. /etc/sysconfig/displaymanager
|
||||
. /etc/sysconfig/language
|
||||
. /etc/sysconfig/windowmanager
|
||||
test -e /etc/SuSEconfig/profile && . /etc/SuSEconfig/profile
|
||||
test -r /etc/profile.d/desktop-data.sh && . /etc/profile.d/desktop-data.sh
|
||||
|
||||
locale_vars=" \
|
||||
LANG \
|
||||
LC_CTYPE \
|
||||
LC_NUMERIC \
|
||||
LC_TIME \
|
||||
LC_COLLATE \
|
||||
LC_MONETARY \
|
||||
LC_MESSAGES \
|
||||
LC_PAPER \
|
||||
LC_NAME \
|
||||
LC_ADDRESS \
|
||||
LC_TELEPHONE \
|
||||
LC_MEASUREMENT \
|
||||
LC_IDENTIFICATION \
|
||||
LC_ALL"
|
||||
|
||||
unset LC_ALL
|
||||
for lc in $locale_vars
|
||||
do
|
||||
eval val="\$RC_$lc"
|
||||
if test -n "$val"; then
|
||||
eval $lc="\$RC_$lc"
|
||||
export $lc
|
||||
fi
|
||||
done
|
||||
unset lc val
|
||||
|
||||
if test -z "$WINDOWMANAGER" ; then
|
||||
SAVEPATH=$PATH
|
||||
PATH=$PATH:/usr/X11R6/bin:/usr/openwin/bin
|
||||
desktop=/usr/share/xsessions/${DEFAULT_WM}.desktop
|
||||
if test -s "$desktop" ; then
|
||||
while read -r line; do
|
||||
case ${line} in
|
||||
Exec=*) WINDOWMANAGER="$(command -v ${line#Exec=})"
|
||||
break
|
||||
esac
|
||||
done < $desktop
|
||||
fi
|
||||
if test -n "$DEFAULT_WM" -a -z "$WINDOWMANAGER" ; then
|
||||
WINDOWMANAGER="$(command -v ${DEFAULT_WM##*/})"
|
||||
fi
|
||||
PATH=$SAVEPATH
|
||||
unset SAVEPATH desktop
|
||||
fi
|
||||
unset DEFAULT_WM
|
||||
export WINDOWMANAGER
|
||||
|
||||
XDM_PIDFILE="/var/run/xdm.pid"
|
||||
KDM_PIDFILE="/var/run/kdm.pid"
|
||||
TDM_PIDFILE="/var/run/tdm.pid"
|
||||
GDM_PIDFILE="/var/run/gdm.pid"
|
||||
SLIM_PIDFILE="/var/run/slim.lock"
|
||||
LXDM_PIDFILE="/var/run/lxdm.pid"
|
||||
ENTRANCE_PIDFILE="/var/run/entrance.pid"
|
||||
PIDFILE=$XDM_PIDFILE
|
||||
KDEROOTHOME=/root/.kdm
|
||||
export KDEROOTHOME
|
||||
XDMDIR=/etc/X11/xdm
|
||||
if [ -x /usr/bin/xdm ]; then
|
||||
XDM_BIN=/usr/bin/xdm
|
||||
else
|
||||
XDM_BIN=/usr/X11R6/bin/xdm
|
||||
fi
|
||||
if [ -x /usr/sbin/gdm ]; then
|
||||
GDM_BIN=/usr/sbin/gdm
|
||||
else
|
||||
GDM_BIN=/opt/gnome/sbin/gdm
|
||||
fi
|
||||
KDM_BIN=/opt/kde3/bin/kdm
|
||||
TDM_BIN=/opt/trinity/bin/kdm
|
||||
KDM4_BIN=/usr/bin/kdm
|
||||
WDM_BIN=/usr/bin/wdm
|
||||
SLIM_BIN=/usr/bin/slim
|
||||
LXDM_BIN=/usr/bin/lxdm
|
||||
ENTRANCE_BIN=/usr/sbin/entranced
|
||||
RELOADSIGNAL="-HUP"
|
||||
|
||||
DM=${DISPLAYMANAGER##*/}
|
||||
|
||||
case "${DM}" in
|
||||
kdm3) DISPLAYMANAGER=$KDM_BIN
|
||||
PIDFILE=$KDM_PIDFILE
|
||||
;;
|
||||
tdm) DISPLAYMANAGER=$TDM_BIN
|
||||
PIDFILE=$TDM_PIDFILE
|
||||
;;
|
||||
kdm|kde|KDM|KDE) DISPLAYMANAGER=$KDM_BIN
|
||||
if [ ! -r "$DISPLAYMANAGER" ]; then
|
||||
DISPLAYMANAGER=$KDM4_BIN
|
||||
fi
|
||||
PIDFILE=$KDM_PIDFILE
|
||||
;;
|
||||
kdm4) DISPLAYMANAGER=$KDM4_BIN
|
||||
PIDFILE=$KDM_PIDFILE
|
||||
;;
|
||||
xdm) DISPLAYMANAGER=$XDM_BIN
|
||||
;;
|
||||
gdm|GDM|Gnome|GNOME) DISPLAYMANAGER=$GDM_BIN
|
||||
PIDFILE=$GDM_PIDFILE
|
||||
RELOADSIGNAL="-USR1"
|
||||
;;
|
||||
wdm|WDM) DISPLAYMANAGER=$WDM_BIN
|
||||
;;
|
||||
slim|SLIM) DISPLAYMANAGER=$SLIM_BIN
|
||||
XDMOPTIONS=-d
|
||||
PIDFILE=$SLIM_PIDFILE
|
||||
;;
|
||||
lxdm|LXDM) DISPLAYMANAGER=$LXDM_BIN
|
||||
XDMOPTIONS=-d
|
||||
PIDFILE=$LXDM_PIDFILE
|
||||
;;
|
||||
entrance)
|
||||
DISPLAYMANAGER=$ENTRANCE_BIN
|
||||
PIDFILE=$ENTRANCE_PIDFILE
|
||||
;;
|
||||
console) exit 0
|
||||
;;
|
||||
*) DISPLAYMANAGER=$XDM_BIN
|
||||
if test -x $KDM_BIN; then
|
||||
DISPLAYMANAGER=$KDM_BIN
|
||||
PIDFILE=$KDM_PIDFILE
|
||||
elif test -x $KDM4_BIN; then
|
||||
DISPLAYMANAGER=$KDM4_BIN
|
||||
PIDFILE=$KDM_PIDFILE
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
test ! -x "$DISPLAYMANAGER" && DISPLAYMANAGER=$XDM_BIN
|
||||
|
||||
rc_reset
|
||||
|
||||
splashcopy()
|
||||
{
|
||||
local from=$1
|
||||
local to=$2
|
||||
if [ "$SPLASH" = yes ]
|
||||
then
|
||||
ver=$(sed "s/.*v\([[:digit:]]\)\.\([[:digit:]]\).*/\\1\\2/" /proc/splash)
|
||||
if [ $ver -gt 31 ]
|
||||
then
|
||||
echo "copy $from $to" > /proc/splash
|
||||
echo "@$to silent" > /proc/splash
|
||||
echo "@$to show -1" > /proc/splash
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
if [ "$DISPLAYMANAGER" = "$KDM4_BIN" ] \
|
||||
|| [ "$DISPLAYMANAGER" = "$GDM_BIN" ]; then
|
||||
splashcopy 0 6
|
||||
fi
|
||||
# Avoid duplicated messages when earlyxdm is in use
|
||||
if [ "$DISPLAYMANAGER" = "$KDM_BIN" -a -s $KDM_PIDFILE ]; then
|
||||
/sbin/checkproc -p $KDM_PIDFILE $KDM_BIN && rc_exit 0
|
||||
elif [ "$DISPLAYMANAGER" = "$TDM_BIN" -a -s $TDM_PIDFILE ]; then
|
||||
/sbin/checkproc -p $TDM_PIDFILE $TDM_BIN && rc_exit 0
|
||||
elif [ "$DISPLAYMANAGER" = "$KDM4_BIN" -a -s $KDM_PIDFILE ]; then
|
||||
/sbin/checkproc -p $KDM_PIDFILE $KDM4_BIN && rc_exit 0
|
||||
elif [ "$DISPLAYMANAGER" = "$GDM_BIN" -a -s $GDM_PIDFILE ]; then
|
||||
/sbin/checkproc -p $GDM_PIDFILE $GDM_BIN && rc_exit 0
|
||||
elif [ "$DISPLAYMANAGER" = "$ENTRANCE_BIN" -a -s $ENTRANCE_PIDFILE ]; then
|
||||
/sbin/checkproc -p $ENTRANCE_PIDFILE $ENTRANCE_BIN && rc_exit 0
|
||||
fi
|
||||
|
||||
if [ "$DISPLAYMANAGER" != "$KDM_BIN" -a \
|
||||
"$DISPLAYMANAGER" != "$TDM_BIN" -a \
|
||||
"$DISPLAYMANAGER" != "$KDM4_BIN" -a \
|
||||
"$DISPLAYMANAGER" != "$ENTRANCE_BIN" -a \
|
||||
"$DISPLAYMANAGER" != "$GDM_BIN" ]; then
|
||||
test -x /etc/X11/xdm/SuSEconfig.xdm && \
|
||||
MD5DIR="/var/adm/SuSEconfig/md5" \
|
||||
/etc/X11/xdm/SuSEconfig.xdm | \
|
||||
sed 's+\(.*\)+/etc/init.d/xdm: \1+g' | \
|
||||
/bin/logger
|
||||
fi
|
||||
|
||||
# use system keyboard as global X keyboard configuration
|
||||
if [ -x /etc/X11/xdm/keytable ]; then
|
||||
/etc/X11/xdm/keytable
|
||||
fi
|
||||
|
||||
echo -n "Starting service $DM"
|
||||
# Don't start xdm if no Xserver is configured and xdm is not
|
||||
# configured for remote access
|
||||
if [ ! -x /usr/bin/X -a ! -x /usr/X11R6/bin/X -a \
|
||||
"$DISPLAYMANAGER_REMOTE_ACCESS" = "no" ]; then
|
||||
rc_status -u
|
||||
rc_exit
|
||||
fi
|
||||
if [ "$DISPLAYMANAGER" = "$GDM_BIN" -a \
|
||||
"$DISPLAYMANAGER_REMOTE_ACCESS" = "yes" -a \
|
||||
"$DISPLAYMANAGER_STARTS_XSERVER" = "no" ]; then
|
||||
XDMOPTIONS="--no-console"
|
||||
fi
|
||||
# Graphical failsafe mode (Bug #246158).
|
||||
#
|
||||
# Needs changes in kernel commandline of "Failsafe" entry in
|
||||
# /boot/grub/menu.lst.
|
||||
#
|
||||
# * use the same "vga" option value as in the non-"Failsafe" entry
|
||||
# * remove "3" option (runlevel)
|
||||
# * add "x11failsafe" option
|
||||
if cat /proc/cmdline | grep -q x11failsafe; then
|
||||
if [ -f /etc/X11/xorg.conf.install ]; then
|
||||
export XORGCONFIG=xorg.conf.install
|
||||
echo
|
||||
echo "Using failsafe X.Org configuration /etc/X11/xorg.conf.install"
|
||||
else
|
||||
echo
|
||||
echo "The failsafe X.Org configuration /etc/X11/xorg.conf.install no longer exists."
|
||||
echo "Either move it back (if still available) or copy /etc/X11/xorg.conf to"
|
||||
echo "/etc/X11/xorg.conf.install to use the native graphics driver instead of the"
|
||||
echo "failsafe graphics driver. Of course the latter option no longer can be called"
|
||||
echo "failsafe."
|
||||
rc_status -u
|
||||
rc_exit
|
||||
fi
|
||||
fi
|
||||
startproc -p $PIDFILE $DISPLAYMANAGER $XDMOPTIONS || rc_failed
|
||||
# After a crash or a kill signal we may have
|
||||
# a wrong owner ship of /dev/xconsole
|
||||
if rc_status ; then
|
||||
if test -x $XDMDIR/TakeDevices ; then
|
||||
$XDMDIR/TakeDevices
|
||||
else
|
||||
chown root:tty /dev/xconsole /dev/tty0
|
||||
chmod 622 /dev/xconsole /dev/tty0
|
||||
fi
|
||||
else
|
||||
case "${DM}" in
|
||||
slim|SLIM)
|
||||
test -s $PIDFILE || pgrep -f $DISPLAYMANAGER > $PIDFILE
|
||||
esac
|
||||
fi
|
||||
rc_status -v
|
||||
;;
|
||||
stop)
|
||||
# make sure to stop the running one (Bug #306035)
|
||||
if test -s "$KDM_PIDFILE"; then
|
||||
PIDFILE=$KDM_PIDFILE
|
||||
elif test -s "$TDM_PIDFILE"; then
|
||||
PIDFILE=$TDM_PIDFILE
|
||||
elif test -s "$GDM_PIDFILE"; then
|
||||
PIDFILE=$GDM_PIDFILE
|
||||
elif test -s "$XDM_PIDFILE"; then
|
||||
PIDFILE=$XDM_PIDFILE
|
||||
elif test -s "$SLIM_PIDFILE"; then
|
||||
PIDFILE=$SLIM_PIDFILE
|
||||
elif test -s "$LXDM_PIDFILE"; then
|
||||
PIDFILE=$LXDM_PIDFILE
|
||||
elif test -s "$ENTRANCE_PIDFILE"; then
|
||||
PIDFILE=$ENTRANCE_PIDFILE
|
||||
fi
|
||||
if test -s $PIDFILE; then
|
||||
read -t 1 PID < $PIDFILE
|
||||
if CHECKDM=$(ps ho command= -p $PID) ; then
|
||||
DISPLAYMANAGER=${CHECKDM%%[[:blank:]]*}
|
||||
DM=${DISPLAYMANAGER##*/}
|
||||
fi
|
||||
unset CHECKDM
|
||||
else
|
||||
rm -f $PIDFILE
|
||||
unset PIDFILE
|
||||
fi
|
||||
echo -n "Shutting down service $DM"
|
||||
|
||||
#
|
||||
# killproc(8) sleep upto five seconds and sends
|
||||
# SIGKILL if xdm does not terminate within
|
||||
#
|
||||
|
||||
killproc ${PIDFILE:+-p ${PIDFILE}} $DISPLAYMANAGER
|
||||
rc_status -v
|
||||
;;
|
||||
restart)
|
||||
$0 stop
|
||||
$0 start
|
||||
rc_status
|
||||
;;
|
||||
reload|force-reload)
|
||||
test -x /etc/X11/xdm/SuSEconfig.xdm && \
|
||||
MD5DIR="/var/adm/SuSEconfig/md5" \
|
||||
/etc/X11/xdm/SuSEconfig.xdm | \
|
||||
sed 's+\(.*\)+/etc/init.d/xdm: \1+g' | \
|
||||
/bin/logger
|
||||
echo -n "Reload service $DM"
|
||||
killproc -p $PIDFILE $RELOADSIGNAL $DISPLAYMANAGER
|
||||
rc_status -v
|
||||
;;
|
||||
status|check)
|
||||
echo -n "Checking for service ${DM}: "
|
||||
checkproc -p $PIDFILE $DISPLAYMANAGER
|
||||
rc_status -v
|
||||
;;
|
||||
probe)
|
||||
if test $XDMDIR/xdm-config -nt $PIDFILE -o \
|
||||
$XDMDIR/Xservers -nt $PIDFILE
|
||||
then
|
||||
echo reload
|
||||
fi
|
||||
;;
|
||||
try-restart|condrestart)
|
||||
$0 status
|
||||
if test $? = 0; then
|
||||
$0 restart
|
||||
else
|
||||
rc_reset
|
||||
fi
|
||||
rc_status
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|status|restart|reload|force-reload|probe|try-restart}"
|
||||
exit 1
|
||||
esac
|
||||
rc_exit
|
Loading…
Reference in new issue