ACPI-Wakeup in Ubuntu 12.0.4

  • Ich brauch mal ein bißchen Hilfe mit dem Einrichten von ACPI-Wakeup.
    Mein Mainboard (Intel DP35DP) kann das nämlich und bietet auch das
    Einstellen einer Aufwachzeit im Bios an. Zwar gibt's dazu generell viel
    im Netz. Das meiste ist aber entweder veraltet oder für andere
    Distributionen wie Suse oder Gentoo.
    Ich hab mich vor allem an die Anleitungen vomMyth-TV-Wiki und vomVDR-Wiki gehalten. Leider scheitere ich schon ganz am Anfang der Anleitungen, beim manuellen Testen.
    Grundsätzlich
    scheint mein Ubuntu (12.0.4.1 mit neuesten Kernel von heute morgen)
    Wakeup zu unterstützen - der Rechner wacht nur leider nicht auf.
    Mein manuelles Test-Skript:

    Shell-Script
    1. #!/bin/bash
    2. echo 0 > /sys/class/rtc/rtc0/wakealarm
    3. echo `date '+%s' -d '+ 5 minutes'` > /sys/class/rtc/rtc0/wakealarm
    4. cat /sys/class/rtc/rtc0/wakealarm
    5. cat /proc/driver/rtc


    liefert diese Ausgabe:





    anschließend fahre ich den Rechner ganz normal runter und warte 5 Minuten. Er schaltet sich aber nicht wieder ein.
    Was ich bereits probiert habe:
    -HPET im Bios und per Kernel-Commando in Grub abgeschaltet.
    - die Zeile

    Code
    1. exec hwclock --rtc=/dev/rtc0 --systohc $tz --noadjfile $badyear


    in der Datei /etc/init/hwclock-save.conf deaktiviert
    Bei
    diesem letzten Punkt bin ich mir unsicher, ob das auch wirklich gemacht
    wird. Diese Maßnahme, um das zurückschreiben der Systemzeit zu
    unterbinden und so ein Löschen der Wakeup-Zeit zu verhindern, stammt aus
    dem MythTV-Wiki und ist für Ubuntu 9. Es gibt aber neben einer
    gleichlautenden Datei im Ordner /etc/init.d (statt /etc/init) auch noch
    zwei ähnlich lautende Dateien in beiden Ordnern ohne die Endung
    -save.conf.
    Ich wäre also wirklich dankbar für weitere Debugging-Tipps.

  • Benenne doch erst mal einfach "/sbin/hwclock" um, dann kannst du sicher sein und musst nicht 20 Scripte durchsuchen ;)


    Dann im Testscript dafür sorgen das "echo `date '+%s' -d '+ 5 minutes'` > /sys/class/rtc/rtc0/wakealarm" 2x aufgerufen wird.



    Dann einmal im BIOS mit Alarm angeschaltet und einmal am abgeschaltet probieren.


    cu

  • Datei ist jetzt umbenannt, Wakeup-Script hab ich jetzt geändert. Leider immernoch kein Wakeup. Was meinst Du mit Alarm im Bios? Wähle ich die Option "Wake up from S5" im Bios, erscheinen da plötzlich Unterpunkte, wo ich Stunden, Minuten und Sekunden für die Aufwachzeit eingeben soll. Hab jetzt alles auf null gesetzt und probier es gerade nochmal. Ich will ja aber eigentlich gar nicht, dass der jede nacht um 0:00 Uhr aufwacht. Sollte ich diesen HPET wieder einschalten?

  • :( Hab jetzt alle Variationen durchprobiert: HPET in Bios und Grub an und aus und Alarm im Bios auf 0.00 Uhr. Die genannte Zeile im Skript hatte ich vor den Versuchen verdoppelt und die Datei /sbin/hwclock umbenannt.


    Leider wacht da immernoch nichts auf...

  • Tja, was sagt man dazu: In Ubuntu gibt's einen extra Befehl für ACPI-Wakeup. Rtcwake schaltet den Computer zuverlässig zur geplanten Uhrzeit ein und kümmert sich weder um Zeitformat, HPET, HWClock oder Art des Shutdown-Modus. Auch S5 ist für das kleine Kommandozeilenprogramm kein Problem. Das Tool funktioniert einfach und fährt auf Wunsch sogar den Rechner vorher runter.


    Beispiel für einen Aufruf:


    Code
    1. sudo rtcwake -m poweroff -s 120


    Der Befehl fährt den Rechner herunter und schaltet ihn nach zwei Minuten wieder ein. Für TV-Aufnahmen kann auf das Runterfahren auch verzichtet werden, sodass nur eine Aufwachzeit gesetzt wird.


    Das sähe dann so aus:


    Code
    1. sudo rtcwake -m no -s 120


    Ein manuelles Runterfahren im Anschluss hindert den Computer nicht, sich zwei Minuten später wieder einzuschalten.


    Tolle Sache. Der manuelle Weg über das Testskript funktioniert derweil immernoch nicht. Der Tipp kam aus dem Ubuntuforum:

    Quote

    "Warum direkt in Systemdateien schreiben? Mit rtcwake geht das IMHO einfacher."

  • Interesannt, aber warum der alte ACPI Weg nicht geht wundert mich wirklich.


    Wird dann wohl Zeit für ein neues rtcwake Shutdownscript.


    cu

  • Ich versuch den Befehl jetzt von XBMC aus zu starten, aber es klappt irgendwie nicht. Im XBMC gehe ich in das Menü System >> Einstellungen >> LiveTV >> Energiesparen und verändere anschließend den Menüpunkt "Setze den Weckbefehl (cmd [timestamp])".


    Zuerst hab ich rtcwake dort direkt eingetragen. Weil das nicht geklappt hat steht da jetzt der Pfad zu folgendem Skript von mir, dass bei Aufruf dann ein paar Debug-Dateien anlegt:


    Shell-Script
    1. #!/bin/bash
    2. echo $1 > /home/mediapc/Code/zeiteinstellung.txt
    3. /usr/sbin/rtcwake -m no -t $1
    4. cat /sys/class/rtc/rtc0/wakealarm > /home/mediapc/Code/zeiteinstellung-check.txt
    5. cat /proc/driver/rtc > /home/mediapc/Code/zeiteinstellung-check2.txt


    Wenn ich im XBMC nun eine Aufnahme plane und den Rechner anschließend per XBMC runterfahre, führt XBMC vor dem Runterfahren mein Skript aus.


    In der Datei zeiteinstellung.txt steht anschließend der Wert, den XBMC an das Skript gesendet hat. Die beiden andern Dateien zeigen mit hinterher, ob auch wirklich eine Alarmzeit im Bios gesetzt wurde.


    Resultat: Der Rechner wacht leider nicht auf. Dafür weiß ich aber immerhin, dass XBMC mein Skript tatsächlich aufgerufen hat und als Übergabewert offenbar diese Linux-Zeit benutzt. Das steht jetzt nach meinem Testlauf in der zeiteinstellung.txt:


    Quote

    1359831360


    Die beiden andern Skripte zeigen mir, dass die Bios-Zeit offenbar nicht verändert wurde. Zeiteinstellung-check.txt ist leer. Die andere Datei hält eine Weckzeit von morgen. Vermutlich ein Zeichen dafür, dass die Alarmzeit vom Skript gar nicht gesetzt wurde, weil ich so eine falsch gesetzte Zeit ohne Änderung des Alarms auch schon vorher mal beobachtet habe.


    Inhalt von Zeiteinstellung-check2.txt:



    Frage: woran kann es liegen, dass es mit XBMC nicht klappt? /usr/sbin/rtcwake kann von allen Benutzern ausgeführt werden.

  • Ich hab das Wakeup jetzt auch ohne rtcwake an's Laufen gekriegt. Die
    Bios-Uhr war nämlich doch nicht auf UTC gestellt. Das hab ich geändert
    und nun funktioniert rtcwake nicht mehr, die traditionelle Methode
    hingegen schon. Mein Problem sind jetzt die mangelnden Berechtigungen.
    Genau wie zuvor kann ich das Wakeup nicht für XBMC automatisieren.


    Grund ist mangelnder Schreibzugriff auf /sys/class/rtc/rtc0/wakealarm


    Ändere ich Berechtigungen oder Besitzer der Datei (etwa mit dem Befehl sudo
    chmod g+w /sys/class/rtc/rtc0/wakealarm), funktioniert das automatische
    Aufwachen mit XBMC. Leider hält die Freude nur kurze Zeit. Nach einem Neustart gehen
    die geänderten Berechtigungen wieder verloren. Die Datei gehört dann wieder nur noch Root und ist auch nur von diesem beschreibbar.


    Weiß jemand, wie man das abstellt?

  • die geänderten Berechtigungen wieder verloren. Die Datei gehört dann wieder nur noch Root und ist auch nur von diesem beschreibbar.


    Kunststück, das sind ja auch gar keine Dateien. Das ist ein File-System im Kernel. Das wird bei jedem Boot neu erzeugt.

    Weiß jemand, wie man das abstellt?


    Mach doch einen Upstart-Job der die Berechtigung setzt.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Weiß jemand, wie man das abstellt?


    Oder gib dem User, der XBMC ausführt das Recht rtcwake in der benötigten Konstellation mit sudo ohne Passworteingabe zu benutzen, damit das auch in einem Skript genutzt werden kann.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Sowas hatte ich fast befürchtet. RTCWake funktioniert ja seit der UTC-Umstellung nicht mehr. Daher hab ich das aus meinem Skript rausgeschmissen. Wie macht man denn diesen Upstart-Job?


    Mit der Sudoers hab ich ohnehin gerade ein Problem. Der Rechner scheint meinen neuen Eintrag einfach zu ignorieren.


    Hier ist meine sudoers (bevor jemand fragt: Ja, natürlich mit visudo bearbeitet. Das beschwert sich auch nicht über etwaige Syntaxfehler):



    Die folgende Zeile hab ich selbst an's Ende eingefügt und soll bewirken, dass die Gruppe mediapc kein Passwort für eine ganze Reihe Programme benötigt, solange der Zugriff vom eigenen Rechner aus erfolgt:

    Code
    1. %mediapc 127.0.0.1 = NOPASSWD:
    2. /usr/sbin/rtcwake,/usr/bin/xfce4-terminal,/usr/sbin/synaptic,/usr/bin/software-center,/bin/bash,/usr/bin/kwrite,/usr/bin/gedit


    Weil das nicht klappte, hab ich auch schon die Zeile


    Code
    1. %mediapc 127.0.0.1 = NOPASSWD:ALL



    zum Test ausprobiert. Beide Varianten blieben ohne Erfolg. Synaptic und Root-Terminal benötigen einfach immer ein Passwort.


    Edit:


    Mein wakeup-skript, das von XBMC aufgerufen wird und funktioniert, sieht so aus:



    Die Doppeleinträge und das Delay sind zur Sicherheit, damit es auf jeden Fall klappt. Ich weiß nicht ob man sie braucht.

  • %mediapc 127.0.0.1 = NOPASSWD: /usr/sbin/rtcwake,/usr/bin/xfce4-terminal,/usr/sbin/synaptic,/usr/bin/software-center,/bin/bash,/usr/bin/kwrite,/usr/bin/gedit


    Versuch es doch mal so - ohne die Definition von Host-Aliases mach 127.0.0.1 so keinen Sinn:

    Code
    1. %mediapc ALL=NOPASSWD: /usr/sbin/rtcwake,/usr/bin/xfce4-terminal,/usr/sbin/synaptic,/usr/bin/software-center,/bin/bash,/usr/bin/kwrite,/usr/bin/gedit

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Synaptic will aber immernoch ein Passwort.


    IMHO ist das blöd so ein Scheunentor aufzureißen, für GUI-Programme sollte man aus gutem Grund immer gksu nutzen, nicht sudo

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Also die Verknüpfung ruft /usr/bin/synaptic-pkexec auf. Da ist nix mit sudo oder gksu. Trotzdem fragt es nach einem Passwort für Root. Davon mal abgesehen glaube ich nicht, dass jemand per Paketverwaltung meinen Rechner hackt. Edit: Ich seh' gerade, dass das Root-Terminal auch per gksu aufgerufen wird und nicht mit Sudo. Klappt offenbar mit dem neuen sudoers-Eintrag.


    Ich hab mal grad nach diesen Upstart-Jobs gegoogelt. Denn das hatte ja eigentlich am meisten mit meiner Frage zu tun. Das ist ja voll kompliziert. Zwei Skripttypen, kein Bash-Scripting und dann muss man ein konform geschriebenes Skript ja auch bestimmt noch richtig im System anmelden. Hat da jemand ne Schnellösung?


    Code
    1. chmod g+w /sys/class/rtc/rtc0/wakealarm


    soll bei jedem Bootvorgang als Root und ohne Passortabfrage ausgeführt werden.

  • Ich hab mal grad nach diesen Upstart-Jobs gegoogelt. Denn das hatte ja eigentlich am meisten mit meiner Frage zu tun. Das ist ja voll kompliziert. Zwei Skripttypen, kein Bash-Scripting und dann muss man ein konform geschriebenes Skript ja auch bestimmt noch richtig im System anmelden. Hat da jemand ne Schnellösung?


    So ein Quatsch. Da du ja alles besser weißt, sollte ich dir gar nicht antworten.


    Code
    1. start on startup
    2. task
    3. script
    4. chmod g+w /sys/class/rtc/rtc0/wakealarm
    5. end script


    Dafür darfst du dir ergoogeln wohin es kommt.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Das meinte ich. Mit einem Skript ist es doch nicht getan.


    Natürlich ist es damit getan. Fang nicht an mit mir zu diskutieren.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Tja, ich hab noch das hier gefunden, bin damit aber nicht wirklich schlauer. Das neue Skript hat jetzt noch den Header


    Shell-Script
    1. #!/bin/sh -e


    von mir in die erste Zeile bekommen und ist als Executable in den Ordner /etc/init.d gewandert. Diese Ubuntu-Seite schreibt ja


    Quote

    Alle Dateien im Ordner /etc/init werden automatisch gestartet.

    In dem Ordner liegen bei mir aber ausschließlich .conf-Dateien. /etc/init.d scheint hingegen mit Skripten voll zu sein. Also hab ich Dein Skript mal dahin verschoben und probier gleich mal aus ob was geklappt hat.