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