This commit is contained in:
220
rcacpid
Normal file
220
rcacpid
Normal file
@@ -0,0 +1,220 @@
|
||||
#! /bin/bash
|
||||
# Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Authors: Christian Zoz <zoz@suse.de>
|
||||
# Timo Hoenig <thoenig@suse.de>
|
||||
#
|
||||
# /etc/init.d/acpid
|
||||
# and its symbolic link
|
||||
# /usr/sbin/rcacpid
|
||||
#
|
||||
# LSB compliant service control script; see http://www.linuxbase.org/spec/
|
||||
#
|
||||
### BEGIN INIT INFO
|
||||
# Provides: acpid
|
||||
# Required-Start:
|
||||
# X-UnitedLinux-Should-Start:
|
||||
# Required-Stop:
|
||||
# X-UnitedLinux-Should-Stop:
|
||||
# Default-Start: 2 3 5
|
||||
# Default-Stop: 0 1 6
|
||||
# Short-Description: Listen and dispatch ACPI events from the kernel
|
||||
# Description: acpid reads events from /proc/acpi/event and dispatches
|
||||
# them (by SuSE default) to other "users" like powersaved, HAL and IAL.
|
||||
# Actions for those events are (by SUSE default) configured in the
|
||||
# powersaved configuration.
|
||||
# Additionally this start script loads all needed modules.
|
||||
|
||||
### END INIT INFO
|
||||
|
||||
# Check for missing binaries (stale symlinks should not happen)
|
||||
ACPID_BIN=/sbin/acpid
|
||||
test -x $ACPID_BIN || exit 5
|
||||
|
||||
# Shell functions sourced from /etc/rc.status:
|
||||
# rc_check check and set local and overall rc status
|
||||
# rc_status check and set local and overall rc status
|
||||
# rc_status -v ditto but be verbose in local rc status
|
||||
# rc_status -v -r ditto and clear the local rc status
|
||||
# rc_status -s display "skipped" and exit with status 3
|
||||
# rc_status -u display "unused" and exit with status 3
|
||||
# rc_failed set local and overall rc status to failed
|
||||
# rc_failed <num> set local and overall rc status to <num>
|
||||
# rc_reset clear local rc status (overall remains)
|
||||
# rc_exit exit appropriate to overall rc status
|
||||
# rc_active checks whether a service is activated by symlinks
|
||||
# rc_splash arg sets the boot splash screen to arg (if active)
|
||||
. /etc/rc.status
|
||||
|
||||
# Reset status of this service
|
||||
rc_reset
|
||||
|
||||
# Return values acc. to LSB for all commands but status:
|
||||
# 0 - success
|
||||
# 1 - generic or unspecified error
|
||||
# 2 - invalid or excess argument(s)
|
||||
# 3 - unimplemented feature (e.g. "reload")
|
||||
# 4 - user had insufficient privileges
|
||||
# 5 - program is not installed
|
||||
# 6 - program is not configured
|
||||
# 7 - program is not running
|
||||
# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
|
||||
#
|
||||
# Note that starting an already running service, stopping
|
||||
# or restarting a not-running service as well as the restart
|
||||
# with force-reload (in case signaling is not supported) are
|
||||
# considered a success.
|
||||
|
||||
ACPI_MODULES=""
|
||||
DEFAULT_ACPI_MODULES="ac battery button fan processor thermal"
|
||||
ACPI_LAPTOP_MODULES_PROBE="asus_acpi ibm_acpi toshiba_acpi sony_acpi pcc_acpi"
|
||||
ACPI_LAPTOP_MODULES_FILE="/var/lib/acpi/laptop_modules"
|
||||
|
||||
ARCH=`uname -i`
|
||||
case $ARCH in
|
||||
ia64) DEFAULT_ACPI_MODULES="button fan processor thermal"
|
||||
ACPI_LAPTOP_MODULES_PROBE=""
|
||||
# avoid even occassional probing of laptop modules!
|
||||
ACPI_LAPTOP_MODULES_USER="NONE"
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -f /etc/sysconfig/powersave/common ] && . /etc/sysconfig/powersave/common
|
||||
[ -f /etc/sysconfig/acpi ] && . /etc/sysconfig/acpi
|
||||
[ -f /etc/sysconfig/hardware/config ] && . /etc/sysconfig/hardware/config
|
||||
[ -f /etc/sysconfig/powersave/cpufreq ] && . /etc/sysconfig/powersave/cpufreq
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
if [ ! -d /proc/acpi ] ; then
|
||||
echo -n "acpid: no ACPI support in kernel"
|
||||
rc_status -s
|
||||
rc_exit
|
||||
fi
|
||||
|
||||
echo -n "acpid: loading ACPI modules ( "
|
||||
if [ "$ACPI_MODULES" != "NONE" ]; then
|
||||
# load ACPI modules
|
||||
for m in ${ACPI_MODULES:-$DEFAULT_ACPI_MODULES}; do
|
||||
grep -wq $m /proc/modules || { modprobe -s $m && echo -n "$m " || rc_status; }
|
||||
done
|
||||
fi
|
||||
echo -n ") "
|
||||
rc_status -v
|
||||
|
||||
if [ -n "$ACPI_LAPTOP_MODULES_USER" ]; then
|
||||
if [ "$ACPI_LAPTOP_MODULES_USER" != "NONE" ]; then
|
||||
echo -n "acpid: loading ACPI laptop modules ( "
|
||||
# Load modules defined by user
|
||||
for m in ${ACPI_LAPTOP_MODULES_USER}; do
|
||||
grep -wq $m /proc/modules || { modprobe -s $m && echo -n "$m " || rc_status; }
|
||||
done
|
||||
echo -n ") "
|
||||
rc_status -v
|
||||
fi
|
||||
else
|
||||
if [ "$LOAD_UNSUPPORTED_MODULES_AUTOMATICALLY" != yes ] ; then
|
||||
echo "acpid: will skip unsupported modules"
|
||||
MODPROBE_OPTS=--skip-unsupported
|
||||
else
|
||||
echo "acpid: will not skip unsupported modules"
|
||||
fi
|
||||
|
||||
if [ /boot/vmlinuz -ot "$ACPI_LAPTOP_MODULES_FILE" ]; then
|
||||
# We do respect LOAD_UNSUPPORTED_MODULES_AUTOMATICALLY for probed modules.
|
||||
|
||||
echo -n "acpid: loading ACPI laptop modules ( "
|
||||
# Load modules defined by system probe
|
||||
while read m; do
|
||||
grep -wq $m /proc/modules || { modprobe $MODPROBE_OPTS -s $m && echo -n "$m " || rc_status; }
|
||||
done < $ACPI_LAPTOP_MODULES_FILE
|
||||
echo -n ") "
|
||||
rc_status -v
|
||||
else
|
||||
# First run, or kernel has been updated. We have to probe which
|
||||
# modules load successfully. For this, we do respect
|
||||
# LOAD_UNSUPPORTED_MODULES_AUTOMATICALLY.
|
||||
|
||||
echo "acpid: probing laptop ACPI modules "
|
||||
touch "$ACPI_LAPTOP_MODULES_FILE"
|
||||
for m in $ACPI_LAPTOP_MODULES_PROBE; do
|
||||
if modprobe $MODPROBE_OPTS -s $m; then
|
||||
# pcc_acpi and sony_acpi can always be loaded.
|
||||
# remove them if the system does not support them.
|
||||
case $m in
|
||||
sony_acpi)
|
||||
if [ ! -r /proc/acpi/sony/brightness ] ; then
|
||||
grep -wq $m /proc/modules && rmmod sony_acpi;
|
||||
continue
|
||||
fi ;;
|
||||
pcc_acpi)
|
||||
if [ ! -r /proc/acpi/panasonic ] ; then
|
||||
grep -wq $m /proc/modules && rmmod pcc_acpi;
|
||||
continue
|
||||
fi ;;
|
||||
asus_acpi)
|
||||
if [ ! -r /proc/acpi/asus ] ; then
|
||||
grep -wq $m /proc/modules && rmmod asus_acpi;
|
||||
continue
|
||||
fi ;;
|
||||
esac
|
||||
echo $m >> $ACPI_LAPTOP_MODULES_FILE
|
||||
fi
|
||||
done
|
||||
echo -n "acpid: added "
|
||||
while read m; do
|
||||
echo -n "$m "
|
||||
done < $ACPI_LAPTOP_MODULES_FILE
|
||||
|
||||
echo -n "to $ACPI_LAPTOP_MODULES_FILE"
|
||||
rc_status -v;
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -n "Starting acpid "
|
||||
startproc $ACPID_BIN
|
||||
rc_status -v
|
||||
;;
|
||||
stop)
|
||||
echo -n "Shutting down acpid "
|
||||
killproc -TERM $ACPID_BIN
|
||||
rc_status -v
|
||||
;;
|
||||
try-restart)
|
||||
$0 status
|
||||
if test $? = 0; then
|
||||
$0 restart
|
||||
else
|
||||
rc_reset # Not running is not a failure.
|
||||
fi
|
||||
rc_status
|
||||
;;
|
||||
restart)
|
||||
$0 stop
|
||||
$0 start
|
||||
rc_status
|
||||
;;
|
||||
force-reload|reload)
|
||||
echo -n "Reload service acpid "
|
||||
killproc -HUP $ACPID_BIN
|
||||
rc_status -v
|
||||
;;
|
||||
status)
|
||||
echo -n "Checking for service acpid "
|
||||
PID=`checkproc -v $ACPID_BIN`
|
||||
if rc_status ; then
|
||||
case `cat /proc/$PID/cmdline` in *events.ignore) rc_failed 3; esac
|
||||
fi
|
||||
rc_status -v
|
||||
;;
|
||||
probe)
|
||||
test $ACPID_CONFIG -nt /var/run/acpid.pid && echo restart
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0" \
|
||||
"{start|stop|status|try-restart|restart|force-reload|reload|probe}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
rc_exit
|
Reference in New Issue
Block a user