Debian - ACPI Wakeup mit sysvinit oder systemd
Aus VDR Wiki
Version vom 3. März 2015, 23:24 Uhr von Jojo100 (Diskussion | Beiträge)
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
#!/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
# 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
#! /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...