#!/bin/sh # Frank Schlaefendorf # erstellt am 12.02.2005 # letzte Aenderung am 26.02.2005 # # pcmcia karten bei standby ejecten, macht bei karten, die standby nicht beherrschen sinn APMD_PCMCIA_EJECT_ON_STANDBY="yes" # pcmcia karten bei suspend ejecten, viele karten beherrschen suspend nicht APMD_PCMCIA_EJECT_ON_SUSPEND="no" # soll das system in den suspend gehen, auch wenn der pc aus einem netzteil betrieben wird? APMD_SUSPEND_ON_AC="yes" # soll vor suspend vom X auf eine textconsole gewechselt werden, damit das # X stabil gesichert wird (nur waehlen, wenn noetig) APMD_LEAVE_X_BEFORE_SUSPEND=no # ab wieviel % batterieladezustand soll das geraet herunter gefahren werden APMD_BATTERY_LOW_CAPACITY=10 # nach wievielen minuten soll der pc nach der warnung "batterie low" herunter gefahren werden APMD_BATTERY_LOW_SHUTDOWN=0 # soll die hardwareuhr bei suspend gesichert und resume neu gelesen werden ? APMD_SET_CLOCK_ON_SUSPEND_RESUME=yes # soll die hardwareuhr bei standby gesichert und resume neu gelesen werden ? APMD_SET_CLOCK_ON_STANDBY_RESUME=yes # mit welchem timeout soll die festplatte laufen, wenn das Geraet ueber netzteil versorgt wird? # TIMEOUT=$APMD_AC_DISK_TIMEOUT*5sekunden APMD_AC_DISK_TIMEOUT=120 # mit welchem timeout soll die festplatte laufen, wenn das Geraet ueber batterie versorgt wird? # TIMEOUT=$APMD_AC_DISK_TIMEOUT*5sekunden APMD_BATTERY_DISK_TIMEOUT=12 # # Rueckgabewerte des Scriptes # 0 - normal, die events werden akzeptiert # 1 - die events werden abgelehnt # # Verweise auf benoetigte Programme CARDCTL=/sbin/cardctl CHVT=/usr/bin/chvt ONACPOWER=/usr/bin/on_ac_power HDPARM=/usr/sbin/hdparm SHUTDOWN=/sbin/shutdown LOGGER="/usr/bin/logger -i -t apmd_proxy " APM=/usr/bin/apm # definierte prozeduren fuer die systemreaktionen lichtaus(){ #LCD Backlight ausschalten tbacklight -f } lichtan(){ #LCD Backlight einschalten tbacklight -n } pcmcia_eject(){ # entfernen der pcmcia-karten aus dem system, wenn gewuenscht case $1 in bysuspend) if [ "$APMD_PCMCIA_EJECT_ON_SUSPEND" = yes ] ; then $CARDCTL eject fi ;; bystandby) if [ "$APMD_PCMCIA_EJECT_ON_STANDBY" = yes ] ; then $CARDCTL eject fi ;; esac } pcmcia_insert(){ # einfuegen der pcmcia-karte in das system, wenn gewuenscht case $1 in aftersuspend) if [ "$APMD_PCMCIA_EJECT_ON_SUSPEND" = yes ] ; then $CARDCTL insert fi ;; afterstandby) if [ "$APMD_PCMCIA_EJECT_ON_STANDBY" = yes ] ; then $CARDCTL insert fi ;; esac } save_X(){ # wechsel auf konsole 1, um das X zu sichern if [ "$APMD_LEAVE_X_BEFORE_SUSPEND" = yes ] ; then $CHVT 1 sleep 1 fi } restore_X(){ # wechsel auf die X-konsole if [ "$APMD_LEAVE_X_BEFORE_SUSPEND" = yes ] ; then $CHVT 7 sleep 1 fi } save_time(){ # sichern der aktuellen systemzeit in der biosuhr case $1 in bysuspend) if [ "$APMD_SET_CLOCK_ON_SUSPEND_RESUME" = yes ] ; then /etc/rc.d/rc.systemzeit systemsetbios fi ;; bystandby) if [ "$APMD_SET_CLOCK_ON_STANDBY_RESUME" = yes ] ; then /etc/rc.d/rc.systemzeit systemsetbios fi ;; esac } restore_time(){ # setzen der systemzeit durch die biosuhr case $1 in aftersuspend) if [ "$APMD_SET_CLOCK_ON_SUSPEND_RESUME" = yes ] ; then /etc/rc.d/rc.systemzeit biossetsystem fi ;; afterstandby) if [ "$APMD_SET_CLOCK_ON_STANDBY_RESUME" = yes ] ; then /etc/rc.d/rc.systemzeit biossetsystem fi ;; esac } ##########-----------------------HAUPTPROGRAMM----------------------- ACTION="$1,$2" case $ACTION in # ------------------------------- START ---------------------------- start,) $LOGGER $ACTION # Passe die festplatteneinstellung an die Stromversorgung an /etc/rc.d/rc.apmd_proxy change power ;; # --------------------------- SUSPEND ------------------------------- suspend,system) $LOGGER $ACTION pcmcia_eject bysuspend save_time bysuspend sync ;; suspend,user) $LOGGER $ACTION pcmcia_eject bysuspend save_time bysuspend sync ;; suspend,critical) $LOGGER $ACTION save_time bysuspend sync # up kritischer zustand, schnell ein sync shutdown -h now # und sofort abwaerts ;; # --------------------------- STANDBY ------------------------------- standby,system) $LOGGER $ACTION pcmcia_eject bystandby save_time bystandby ;; standby,user) $LOGGER $ACTION pcmcia_eject bystandby save_time bystandby ;; # ------------------------------- RESUME --------------------------- resume,suspend) $LOGGER $ACTION pcmcia_insert aftersuspend restore_time aftersuspend ;; resume,standby) $LOGGER $ACTION restore_time afterstandby pcmcia_insert afterstandby ;; resume,critical) $LOGGER $ACTION # nix, da shutdown ausgefuehrt wurde ;; # ------------------------ CHANGE in STATUS ------------------------ change,power) $LOGGER $ACTION POWER=$( $ONACPOWER ) case $POWER in '') $LOGGER "NETZTEIL an" if [ "$APMD_SUSPEND_ON_AC" == yes ]; then apm -n else apm -i fi # festplatte nach $APMD_AC_DISK_TIMEOUT*5sekunden in standby-modus $HDPARM -q -S$APMD_AC_DISK_TIMEOUT /dev/hda ;; *) $LOGGER "BATTERIE ${POWER}% LADEKAPAZITAET" apm -n # festplatte nach $APMD_BATTERY_DISK_TIMEOUT*5sekunden in standby-modus $HDPARM -q -S$APMD_BATTERY_DISK_TIMEOUT /dev/hda ;; esac if [ "$APMD_BATTERY_LOW_SHUTDOWN" -gt 0 -a -e /var/run/shutdown.pid ] ; then if [ -e $ONACPOWER -a "$ONACPOWER" == "" ] ; then $SHUTDOWN -c if [ -e /var/run/shutdown.pid ]; then echo "Warnung: Shutdown laeuft!" else echo "Das Netzteil ist eingeschaltet, Shutdown gestoppt!" fi | wall fi & fi ;; change,battery) $LOGGER $ACTION # das BIOS hat den batteriezustand als low erkannt, im libretto 50% POWER=$( $ONACPOWER ) if [ "$POWER" != "" ]; then if [ $POWER -lt $APMD_BATTERY_LOW_CAPACITY ]; then if [ "$APMD_BATTERY_LOW_SHUTDOWN" -gt 0 ] ; then $SHUTDOWN -h +$APMD_BATTERY_LOW_SHUTDOWN & else $SHUTDOWN -h now & fi else exit 1 fi else exit 1 fi ;; change,time) $LOGGER $ACTION /etc/rc.d/rc.systemzeit serversetsystem ;; change,capability) $LOGGER $ACTION # neue hardware erkannt (hotplugging) ;; # ------------------------------- STOP ----------------------------- stop,) $LOGGER $ACTION ;; esac exit 0