#! /bin/sh
### BEGIN INIT INFO
# Provides:          gdm3
# Should-Start:      console-screen dbus network-manager
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: GNOME Display Manager
# Description:       Debian init script for the GNOME Display Manager
### END INIT INFO
#
# Author:       Ryan Murray <rmurray@debian.org>
#
set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/gdm3

test -x $DAEMON || exit 0

if [ -r /etc/default/locale ]; then
  . /etc/default/locale
  export LANG LANGUAGE
fi

. /lib/lsb/init-functions

# To start gdm even if it is not the default display manager, change
# HEED_DEFAULT_DISPLAY_MANAGER to "false."
HEED_DEFAULT_DISPLAY_MANAGER=true
DEFAULT_DISPLAY_MANAGER_FILE=/etc/X11/default-display-manager

gen_config() {
  if [ -d /var/lib/gdm3/.gconf.mandatory ]; then
    update-gconf-defaults \
	--source=/usr/share/gdm/greeter-config \
	--destination=/var/lib/gdm3/.gconf.mandatory \
	--no-signal \
	--only-if-changed
  fi
  if [ -f /var/lib/gdm3/.gconf.mandatory/%gconf-tree.xml ]; then
    chown Debian-gdm:Debian-gdm /var/lib/gdm3/.gconf.mandatory/%gconf-tree.xml
  fi
}

case "$1" in
  start)
        CONFIGURED_DAEMON=$(basename "$(cat $DEFAULT_DISPLAY_MANAGER_FILE 2> /dev/null)")
        if grep -wqs text /proc/cmdline; then
            log_warning_msg "Not starting GNOME Display Manager; found 'text' in kernel commandline."
        elif [ -e "$DEFAULT_DISPLAY_MANAGER_FILE" ] && \
           [ "$HEED_DEFAULT_DISPLAY_MANAGER" = "true" ] && \
           [ "$CONFIGURED_DAEMON" != gdm3 ] ; then
                log_action_msg "Not starting GNOME Display Manager; it is not the default display manager"
        else
                log_daemon_msg "Starting GNOME Display Manager" "gdm3"
                gen_config
                start-stop-daemon --start --quiet --pidfile /var/run/gdm3.pid \
			--background --exec $DAEMON || log_end_msg 1
                log_end_msg 0
        fi
  ;;
  stop)
        log_daemon_msg "Stopping GNOME Display Manager" "gdm3"
        set +e
        start-stop-daemon --stop --quiet --pidfile /var/run/gdm3.pid \
                --name gdm3 --retry 5
        set -e
        log_end_msg $?
  ;;
  reload)
        log_daemon_msg "Scheduling reload of GNOME Display Manager configuration" "gdm3"
        set +e
        gen_config
        start-stop-daemon --stop --signal USR1 --quiet --pidfile \
                /var/run/gdm3.pid --name gdm3
        start-stop-daemon --stop --signal HUP --quiet --name gconfd-2 \
                --user Debian-gdm --oknodo
        set -e
        log_end_msg $?
  ;;
  status)
        status_of_proc -p "$PIDFILE" "$DAEMON" gdm3 && exit 0 || exit $?
  ;;
  restart|force-reload)
        $0 stop
        $0 start
  ;;
  *)
        echo "Usage: /etc/init.d/gdm3 {start|stop|restart|reload|force-reload|status}"
        exit 1
  ;;
esac

exit 0
