#!/bin/sh
### BEGIN INIT INFO
# Provides:          acpid
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# X-Start-Before:    kdm gdm3 xdm lightdm
# X-Stop-After:      kdm gdm3 xdm lightdm
# Default-Start:     2 3 4 5
# Default-Stop:      
# Short-Description: Start the Advanced Configuration and Power Interface daemon
# Description:       Provide a socket for X11, hald and others to multiplex
#                    kernel ACPI events.
### END INIT INFO

set -e

ACPID="/usr/sbin/acpid"
DEFAULTS="/etc/default/acpid"

# Check for daemon presence
[ -x "$ACPID" ] || exit 0

OPTIONS=""
MODULES=""
# Include acpid defaults if available
[ -r "$DEFAULTS" ] && . "$DEFAULTS"

# Get lsb functions
. /lib/lsb/init-functions

# As the name says. If the kernel supports modules, it'll try to load
# the ones listed in "MODULES".
load_modules() {
    [ -f /proc/modules ] || return 0
    if [ "$MODULES" = "all" ]; then
        MODULES="$(sed -rn 's#^(/lib/modules/[^/]+/)?kernel/(drivers|ubuntu)/acpi/([^/]+/)*(.*)\.ko:.*#\4#p' "/lib/modules/$(uname -r)/modules.dep")"
    fi

    if [ -z "$MODULES" ]; then
        return
    fi

    log_begin_msg "Loading ACPI kernel modules..."
    # work around a bug in initramfs which leaks this env var Launchpad #291619
    # and a bug in modprobe --all --quiet which doesn't load all modules and
    # exits with non-zero exit status Debian #504088
    unset MODPROBE_OPTIONS
    modprobe --all --use-blacklist $MODULES 2>/dev/null
    log_end_msg $?
}

case "$1" in
  start)
    load_modules || true
    log_begin_msg "Starting ACPI services..."
    start-stop-daemon --start --quiet --oknodo --exec "$ACPID" -- $OPTIONS
    log_end_msg $?
    ;;
  stop)
    log_begin_msg "Stopping ACPI services..."
    start-stop-daemon --stop --quiet --oknodo --retry 2 --exec "$ACPID"
    log_end_msg $?
    ;;
  restart)
    $0 stop
    sleep 1
    $0 start
    ;;
  reload|force-reload) 
    log_begin_msg "Reloading ACPI services..."
    start-stop-daemon --stop --signal 1 --exec "$ACPID"
    log_end_msg $?
    ;;
  status)
    status_of_proc "$ACPID" acpid
    ;;
  *)
    log_success_msg "Usage: /etc/init.d/acpid {start|stop|restart|reload|force-reload|status}"
    exit 1
esac

