Debian - ACPI Wakeup mit sysvinit oder systemd

Aus VDR Wiki
Version vom 3. März 2015, 23:24 Uhr von Jojo100 (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
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.

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...