Debian - ACPI Wakeup mit sysvinit oder systemd

Aus VDR Wiki
Wechseln zu: Navigation, Suche

Voraussetzungen

Bei Debian basierten VDR-Installationen kann das Shutdownscript von VDR nicht direkt auf die RTC zugreifen. Dies lässt sich durch ein zusätzliches Shutdownscript in den Start- Stopmechanismen von Debian sysvinit (bis wheezy) oder systemd (ab jessie) bewerkstelligen. Für die nachfolgenden scripte wird ein ACPI-fähiges Mainboard und rtcwake (in util-linux enthalten) benötigt. Durch die Verwendung von rtcwake zum Setzen der Aufwachzeit in die RTC muss man (bis auf spezielle Fälle) nicht direkt auf das Device zugreifen und braucht sich nicht um die verwendete Systemzeit (UTC, Lokale Zeit) kümmern.

Installation

apt-get install util-linux


  • shutdownhook in /usr/share/vdr/shutdown-hooks/S95.acpi-shutdown.sh erstellen

Schreibt die Aufwachzeit in die Datei /var/cache/vdr/acpiwakeup.time

Datei
S95.acpi-shutdown.sh
#!/bin/sh 
# $1 : Next timer seconds from 1970 from 1970/01/01, UTC
# $2 : Next timer seconds from now
# $3 : Next timer title
# $4 : Shutdown forced

# read from acpi-rtcwakeup conf file
. /etc/vdr/vdr-acpi-acpirtcshutdown.conf
WAKEUP_FILE="/var/cache/vdr/acpiwakeup.time"
if [ ! -f "$WAKEUP_FILE" ]
then
  touch $WAKEUP_FILE
fi

# Defaults:
[ -z "$ACPI_ENABLED" ]       && export ACPI_ENABLED="yes"
[ -z "$ACPI_REGULAR_TIME" ]  && export ACPI_REGULAR_TIME="00:00"
[ -z "$ACPI_START_AHEAD" ]   && export ACPI_START_AHEAD="300"

    datefixplus=$(date +%s -d 'tomorrow '"$ACPI_REGULAR_TIME"' +1 day')
    if [ $1 -eq 0 ] || [ $datefixplus -lt $1 ]; then
      # wakeup time if next timer ahead > 24h to regular wakeup time
      date +%s -d 'tomorrow '"$ACPI_REGULAR_TIME"'' > $WAKEUP_FILE
      else
      # wakeup time for next timer
      echo $(($1 - $ACPI_START_AHEAD)) > $WAKEUP_FILE
    fi
exit


  • conf Datei anlegen in /etc/vdr/vdr-acpi-acpirtcshutdown.conf
Datei
vdr-acpi-rtcwakeup.sh
# ACPI shutdown enabled
ACPI_ENABLED=yes

# How many seconds wakeup the machine before timer starts
ACPI_START_AHEAD=300

# Start machine at regular time next day if next timer is more than 24 hours ahead
ACPI_REGULAR_TIME=03:15 #HH:MM


  • Für Distributionen mit sysvinit (bis Debian wheezy) muss ein entsprechendes Initscript in /etc/init.d/ erstellt werden
Datei
vdr-acpi-rtcwakeup.sh
#! /bin/sh

### BEGIN INIT INFO
# Provides:          vdr-addon-acpiwakeup
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0
# X-Stop-After:      hwclock
# Short-Description: Sets/resets the wakeuptime on shutdown/startup
### END INIT INFO

NAME="vdr-acpi-rtcwakeup"
WAKEUP_FILE="/var/cache/vdr/acpiwakeup.time"

reset_wakeup_time()
{
    echo "$NAME: Resetting wakeup time"
    rm -f $WAKEUP_FILE >/dev/null 2>&1
}

set_wakeup_time()
{
    if [ -e $WAKEUP_FILE ]; then
        TIME_TO_SET=`cat $WAKEUP_FILE`
        echo "$NAME: Setting wakeup time to $TIME_TO_SET"

        #echo $TIME_TO_SET >$ACPI_ALARM
	#neuer Befehl
	rtcwake -m no -a -t $TIME_TO_SET
        # Set it once more - some boards require this!
        #echo $TIME_TO_SET >$ACPI_ALARM
    fi
}

show_help()
{
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|force-reload}" >&2
    exit 1
}

load_configuration()
{
    # read arguments for acpi-wakeup from conf-file
    . /etc/vdr/vdr-acpi-acpirtcshutdown.conf

    # Defaults:
    [ -z "$ACPI_ENABLED" ]        && export ACPI_ENABLED="yes"
}

#
# main()
#

load_configuration

if [ ! $ACPI_ENABLED = "yes" ]; then
    echo "ACPI Wakeup disabled - doing nothing"
    exit 0
fi

case "$1" in
    start)
        ;;
    stop|restart|force-reload)
        set_wakeup_time
        ;;
    status)
        ;;
    *)
        show_help
        ;;
esac


Ausführbar machen:

chmod 755 /etc/init.d/vdr-acpi-rtcwakeup.sh

Aktivieren mit:

update-rc.d vdr-acpi-rtcwakeup.sh defaults

Fortsetzung folgt...