e-TOBI.net
                   
HomeKontakt
VDR / c't VDR: nvram-wakeup-Addon für c't VDR
nvram-wakeup

Viele Mainboards geben die Möglichkeit, im BIOS eine Aufwachzeit einzustellen, zu der sich der Rechner automatisch einschaltet. vdr-addon-nvram-wakeup nutzt diese Möglichkeit und schreibt beim Heruntefahren von VDR die Startzeit der nächsten Timeraufnahme ins BIOS. Mehr Details zu Sergei Hallers nvram-wakeup sind auf dessen Projektseite zu finde. Eine sehr schöne Anleitung zur Installation findet sich auch in Hubertus Sandmanns VDR-Dokumentation.

Warnung

Bevor es losgeht, eine kleine Warnung: nvram-wakeup schreibt direkt in Speicherbereiche, in denen auch anderer BIOS-Einstellungen liegen. Wenn nvram-wakeup das Mainboard nicht korrekt erkennt und an die falschen Stellen schreibt, können dabei BIOS-Einstellungen durcheinandergebracht werden, was das System lahm legt. Im Zweifelsfall hilft aber ein kompletter CMOS-Clear (Jumper auf dem Mainboard...siehe Handbuch) und anschliessendes Laden der Standardeinstellungen, um alles wieder ins Lot zu bringen. Wenn nvram-wakeup einmal die richtigen Einstellungen hat, gibt's auch keine Probleme. (Es sei denn man macht ein BIOS-Update... damit können sich alle Einstellungen verändern!)

Funktionsweise im VDR

Schaltet der Anwender VDR über die Fernbedienung aus, oder VDR schaltet sich nach der eingestellten Inaktivitätszeit selber aus, so wird das Skript shutdownvdr gestartet. Dieses Skript ist dafür verantwortlich, nacheinander eine Reihe von Shutdown-Hooks auszuführen. Shutdown-Hooks sind kleine Skripte, die von anderen Programmen installiert werden können, um beim Ausschalten von VDR bestimmte Aufgaben zu erfüllen.

So installiert auch das Paket vdr-addon-nvram-wakeup einen solchen Shutdown-Hook. Damit kann beim Ausschalten geprüft werden, ob eine Aufnahme programmiert ist. Ist dies der Fall, so schreibt nvram-wakeup eine entsprechende Aufwachzeit in den NVRAM des BIOS.

Installation

Vorraussetzung für die Verwendung von vdr-addon-nvram-wakeup ist ein VDR ab Version 1.2.6-7. Erst ab dieser Version ist der benötigte Shutdown-Hook-Mechanismus integriert. Eine korrekte /etc/apt/sources.list vorrausgesetzt, kannst du das Addon mit folgendem Befehl installieren:

apt-get install vdr-addon-nvram-wakeup

Dabei wird gleichzeitig auch das nvram-wakup-Paket installiert, welches für das eigentliche Schreiben in den NVRAM verantwortlich ist.

Nun gilt es zunächst zu prüfen, ob das Mainboard von nvram-wakeup erkannt wird. Dazu musst du folgenden Befehl aufrufen:

nvram-wakeup --debug

Erscheint neben einigen Daten zum Mainboard die Meldung "Your mainboard is currently not supported.", so musst du die im nächsten Abschnitt beschriebene Prozedur durchführen. Andernfalls kann der nächste Abschnitt übersprungen werden.

Parameter eines unbekannten Mainboards ermitteln

Um die Aufwachzeit in den NVRAM schreiben zu können, ist es wichtig zu wissen, an welchen Adressen im NVRAM sich die Aufwachzeit befindet. Für eine Reihe von bekannten Mainboards sind diese Adressen schon in nvram-wakeup enthalten. Für ein unbekanntes Mainboard, können sie in einer Konfigurationsdatei an nvram-wakeup übergeben werden. Um die richtigen NVRAM-Adressen herauszufinden, musst du die Aufwachzeit im BIOS mehrmals verändern und dann den kompletten NVRAM auslesen. Ein kleines Tool namens guess vergleicht dann die verschiedenen NVRAM-Inhalte um zu sehen, an welchen Adressen sich Werte verändert haben. Mit hoher Wahrscheinlichkeit, werden das genau die Adressen sein, die für die Aufwachzeit zuständig sind. Um die Sache etwas zu vereinfachen, gibt es ein kleines Hilfsskript, das du wie folgt aufrufen kannst:

cd ~
guess-helper.sh

Dieses Skript führt dich Schritt für Schritt durch die gesamte Erkennungsprozedur. In jedem Schritt wird erklärt, welche Werte im BIOS eingestellt werden müssen, bevor ein Reboot ausgelöst wird. Nachdem du die Werte im BIOS geändert hast und der Rechner wieder hochgefahren ist, musst du das guess-helper-Skript erneut starten. Nach mehreren dieser Schritte, wird im Erfolgsfall am Ende die Datei nvram-wakeup.conf erzeugt.

Bevor es weitergeht, solltest du mit einem Editor erstmal einen Blick in diese Datei riskieren. Falls doppelte Einträge vorhanden sind, kannst du einen der Einträge auskommentieren. Evtl. ist es nötig, dies später wieder rückgängig zu machen und den anderen Eintrag auszukommentieren.

Um die neu erstellte Konfigurationsdatei zu testen, gib bitte folgendes ein um einen "Trockentest" zu machen, der noch nichts in den NVRAM schreibt:

nvram-wakeup -C nvram-wakeup.conf -s $((`date +%s` + 20 * 60)) --nowrite

Falls keine ungewöhnlichen Fehlermeldungen auftreten, kannst du daraufhin einen richtigen Test machen. Mit den folgenden Zeilen wird eine Aufwachzeit gesetzt, die 10 Minuten in der Zukunft liegt und der Rechner wird heruntergfahren.

nvram-wakeup -C nvram-wakeup.conf -s $((`date +%s` + 10 * 60))
shutdown -h now

Jetzt heisst es warten, ob der Rechner sich nach 10 Minuten wieder einschaltet! Tut er dies nicht, ist das erstmal noch kein Grund zur Sorge. Manche Mainboards erfordern es, dass nach dem Ändern der Aufwachzeit, der Rechner mindestens einmal neu gebooted wird. Um dies zu testen, gib einfach folgendes ein und schalte den Rechner manuell aus, wenn das Lilo-Bootmenü erscheint.

nvram-wakeup -C nvram-wakeup.conf -s $((`date +%s` + 10 * 60))
shutdown -r now

Falls der Rechner nun automatisch nach 10 Minuten anspringt, musst du in der nvram-wakeup.conf noch folgenden Eintrag hinzufügen:

need_reboot = ALWAYS

Andernfalls solltest du versuchen, ob du durch manuelles Einstellen der Aufwachzeit im BIOS, den Rechner überhaupt zum Aufwachen bewegen kannst. Ausserdem ist das nvram-Forum im VDR-Portal ein erster Anlaufpunkt, wenn es so ganz und garnicht funktionieren will. Wenn du eine funktionierende nvram-wakeup.conf erstellt hast, so musst du diese noch nach /etc/ kopieren.

Konfiguration von vdr-addon-nvram-wakeup

Die Konfigurationsdatei vdr-addon-mvram-wakeup.conf für das Addon befindet sich im Verzeichnis /etc/vdr/. Mit dem Parameter ENABLED=yes bzw. ENABLED=no kannst du festgelegt, ob nvram-wakeup beim Ausschalten von VDR verwendet werden soll oder nicht. Du solltest nvram-wakeup nur dann aktivieren, wenn du dir sicher bist, das es funktioniert. Falls du im vorangegangenen Schritt eine nvram-wakeup.conf erstellen musstest, so musst du diese auch noch in die vdr-addon-nvram-wakeup.conf als Parameter für nvram-wakeup eintragen. Dazu muss lediglich folgender Parameter hinzugefügt werden:

COMMANDLINE="-C /etc/nvram-wakeup.conf"

Auch andere Kommandozeilenparameter können so an nvram-wakeup übergeben werden. (siehe man nvram-wakeup) Zu guter Letzt kannst du mit dem Eintrag MAX_POWOROFF_TIME in der Konfigurationsdatei des Addons noch bestimmen, wie lange der Rechner maximal ausgeschaltet sein soll. Dies ist z.B. dann sinnvoll, wenn du Autotimer verwendest und möchtest, dass der Rechner nicht zu lange ausgeschaltet ist, um die Timer aktualisieren zu können. Der Wert den man mit MAX_POWOROFF_TIME angibt, ist die Anzahl Minuten, nach denen der Rechner auf jeden Fall wieder einschalten soll. Auch wenn kein Timer programmiert ist, wird sich der Rechner nach MAX_POWOROFF_TIME Minuten wieder einschalten. 0 deaktiviert diese Funktion.

Die Reboot-Strategie

Falls du selber eine nvram-wakeup.conf nach obiger Anleitung erstellt hast, so weisst du schon, dass Dein Rechner evtl. erst neu booten muss, um die Aufwachzeit zu aktivieren. Um den Bootvorgang abzukürzen, gibt es einen speziellen Kernel, den du mit dem Paket kernel-poweroff installieren kannst. Ist dieses Paket installiert, wird es automatich von vdr-addon-nvram-wakeup genutzt, um bei einem Reboot diesen Kernel zu booten. Der Poweroff-Kernel macht nichts anderes, als den Rechner sofort auszuschalten. Über die Kernelparameter acpi="off" oder apm="off" lässt sich steuern, ob der Kernel mittels APM oder ACPI den Rechner ausschalten soll.

Sollte das Ausschalten mit dem Kernel zwar funktionieren, aber der Rechner wacht nicht wieder auf, so gibt es noch eine andere Möglichkeit den Rechner nach einem, Reboot auszuschalten. Dazu musst du zunächst die Datei /etc/lilo.conf in einem Editor öffnen. Nun suchst du die Einträge heraus, die dem Kernel entsprechen, den du normalerweise bootest. Diese Einträge kopierst du und fügst sie am Ende wieder ein. Nun musst du dem neuen Eintrag noch den Namen "PowerOff" geben und als Kernelparameter append="0" setzen. Nach einem Aufruf von lilo werden die Änderungen übernommen. Z.B. könnte das dann so aussehen:

.
.
.
image = /boot/vmlinuz
label = PowerOff
root = /dev/hda2
initrd = /boot/initrd.img
append = "0"
read-only

Wichtig ist, dass du die anderen Einträger in der lilo.conf intakt lässt und nur die neuen Einträge am Ende anfügst!

Ein erster Test mit VDR

Jetzt wo alles eingerichtet ist, kannst du einfach mal einen Timer programmieren und VDR ausschalten. Sollte sich VDR nicht ausschalten, so lohnt sich ein Blick nach /var/log/messages.