#!/bin/sh
### BEGIN INIT INFO
# Provides:          wdm
# Required-Start:    $local_fs $remote_fs x11-common
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      xfs $named slapd console-screen kbd acpid dbus network-manager
# Should-Stop:       xfs $named slapd console-screen kbd acpid dbus network-manager
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: start or stop the WINGs display manager
# Description:       start or stop the WINGs display manager
### END INIT INFO

set -e

# To start wdm even if it is not the default display manager, change
# HEED_DEFAULT_DISPLAY_MANAGER to "false."
# Also overridable from command line like:
# HEED_DEFAULT_DISPLAY_MANAGER=false /etc/init.d/wdm start
[ -z "$HEED_DEFAULT_DISPLAY_MANAGER" ] && HEED_DEFAULT_DISPLAY_MANAGER=true

DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/bin/wdm
PIDFILE=/var/run/wdm.pid

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

# If we have upgraded the daemon since we last started it, we can't use the
# --exec argument to start-stop-daemon, because the daemon's inode will have
# changed.  The risk here is that in a situation where the daemon died, its
# pidfile was not cleaned up, we've upgraded it, *and* some other process is now
# running under that pid, start-stop-daemon will send signals to an innocent
# process.  However, this seems like a corner case.  C'est la vie!
# Update: --name should prevent signalling innocent processes.
SSD_START_ARGS="--pidfile $PIDFILE --name $(basename $DAEMON) --startas $DAEMON"
SSD_STOP_ARGS="--pidfile $PIDFILE --name $(basename $DAEMON) --retry TERM/5/TERM/5"
SSD_RELOAD_ARGS="--pidfile $PIDFILE --name $(basename $DAEMON) --signal 1"

# This file is touched in case of upgrade. Remove it on successful stop.
UPGRADEFILE=/var/run/wdm.upgrade

wdm_may_update_wmlist () {
  if grep -qs '^auto-update-wmlist' /etc/X11/wdm/wdm.options; then
    update_wdm_wmlist
  fi
}

case "$1" in
  start)
    if [ "$HEED_DEFAULT_DISPLAY_MANAGER" = "true" ] &&
      [ -e $DEFAULT_DISPLAY_MANAGER_FILE ] &&
      [ "$(cat $DEFAULT_DISPLAY_MANAGER_FILE)" != "$DAEMON" ]; then
      echo "Not starting WINGs display manager (wdm); it is not the default display manager."
    else
      # Bug#386424: wdm: Allow setting greeter font via /etc/GNUstep/Defaults/WMGLOBAL
      mkdir -p /var/run/wdm && ln -f -s /etc/GNUstep /var/run/wdm
      wdm_may_update_wmlist
      log_daemon_msg "Starting WINGs display manager: wdm"
      start-stop-daemon --start --quiet $SSD_START_ARGS \
	|| log_progress_msg "already running"
      log_end_msg 0
    fi
    ;;

  restart)
    /etc/init.d/wdm stop
    [ -f $PIDFILE ] && exit 1
    /etc/init.d/wdm start
    ;;

  reload)
    wdm_may_update_wmlist
    log_daemon_msg "Reloading WINGs display manager configuration..."
    if ! start-stop-daemon --stop --quiet $SSD_RELOAD_ARGS; then
      log_progress_msg "wdm not running."
    fi
    log_end_msg 0
    ;;

  force-reload)
    /etc/init.d/wdm reload
    ;;

  stop)
    log_daemon_msg "Stopping WINGs display manager: wdm"
    if ! [ -f $PIDFILE ]; then
      log_progress_msg "not running ($PIDFILE not found)"
    else
      start-stop-daemon --stop --quiet $SSD_STOP_ARGS
      SSD_RES=$?
      if [ $SSD_RES -eq 1 ]; then
	log_progress_msg "not running"
      fi
      if [ $SSD_RES -eq 2 ]; then
	log_progress_msg "not responding to TERM signals"
      else
	if [ -f $PIDFILE ]; then
	  log_progress_msg "(removing stale $PIDFILE)"
	  rm $PIDFILE
	fi
      fi
      if [ $SSD_RES -ne 2 ]; then
	rm -f $UPGRADEFILE
      fi
    fi
    log_end_msg 0
    ;;

  status)
    status_of_proc -p $PIDFILE $DAEMON wdm && exit 0 || exit $?
    ;;

  *)
    echo "Usage: /etc/init.d/wdm {start|stop|restart|reload|force-reload|status}"
    exit 1
    ;;
esac

exit 0

# vim:set ai et sts=2 sw=2 tw=0:

# Local Variables:
#  mode: shell-script
#  sh-basic-offset: 2
#  sh-indentation: 2
# End:
