Automatisch schlafen und zu bestimmten Zeiten aufwachen

59

Wie kann ich meinen Ubuntu 10.10-Desktop in den Ruhezustand versetzen oder in den Ruhezustand versetzen und ihn am nächsten Tag "aufwachen" lassen?

Ich habe Software gesehen, die dies unter Windows kann, daher kann es unter Ubuntu nicht schwierig sein!

drnessie
quelle

Antworten:

74

rtcwake

Der Befehl, an dem Sie interessiert sind, lautet rtcwake:

Dieses Programm wird verwendet, um in einen System-Ruhezustand zu wechseln, bis eine bestimmte Weckzeit erreicht ist.

testen

Um die richtige Syntax zu finden, die für Sie funktioniert, versuchen Sie Folgendes:

sudo rtcwake -u -s 60 -m mem

Dies sollte den Computer für 60 Sekunden vor der Wiederherstellung anhalten. Der entscheidende Parameter ist: mem Sie haben mehrere Möglichkeiten: Spielen Sie, um den Wert zu finden, der für Sie am besten geeignet ist:

          standby
                 ACPI state S1. This state offers  minimal,  though  real,
                 power savings, while providing a very low-latency transi‐
                 tion back to a working system. This is the default mode.

          mem    ACPI state S3 (Suspend-to-RAM). This state offers signif‐
                 icant  power  savings  as everything in the system is put
                 into a low-power  state,  except  for  memory,  which  is
                 placed in self-refresh mode to retain its contents.

          disk   ACPI  state  S4  (Suspend-to-disk). This state offers the
                 greatest power savings, and  can  be  used  even  in  the
                 absence  of  low-level platform support for power manage‐
                 ment. This state operates  similarly  to  Suspend-to-RAM,
                 but  includes  a final step of writing memory contents to
                 disk.

          off    ACPI  state  S5  (Poweroff).  This  is  done  by  calling
                 '/sbin/shutdown'.   Not officially supported by ACPI, but
                 usually working.

          no     Don't suspend. The rtcwake command sets RTC  wakeup  time
                 only.

          on     Don't  suspend,  but  read  RTC  device  until alarm time
                 appears. This mode is useful for debugging.

bis zu einem bekannten Zeitpunkt aussetzen

Ein Skript (am Ende dieses Beitrags) kann verwendet werden, um Ihren Computer anzuhalten und zu einem bestimmten Zeitpunkt zu reaktivieren:

Syntax ist suspend_until [hh:mm]zum Beispiel

sudo ./suspend_until 07:30

Speichern Sie das Skript als Namen suspend_untilund geben Sie ihm Ausführungsrechte, z

chmod +x suspend_until

Cron

Sie können einen Root-Cron-Job erstellen, der dieses Skript aufruft, um es abends zu einer bestimmten Zeit auszuführen und dann morgens wieder zu aktivieren:

sudo crontab -e

Geben Sie nun etwas ein, um das Suspend-Skript um 23:30 Uhr auszuführen:

30 23 * * * /home/myhomefolder/suspend_until 07:30

suspend_until script

#!/bin/bash

# Auto suspend and wake-up script
#
# Puts the computer on standby and automatically wakes it up at specified time
#
# Written by Romke van der Meulen <[email protected]>
# Minor mods fossfreedom for AskUbuntu
#
# Takes a 24hour time HH:MM as its argument
# Example:
# suspend_until 9:30
# suspend_until 18:45

# ------------------------------------------------------
# Argument check
if [ $# -lt 1 ]; then
    echo "Usage: suspend_until HH:MM"
    exit
fi

# Check whether specified time today or tomorrow
DESIRED=$((`date +%s -d "$1"`))
NOW=$((`date +%s`))
if [ $DESIRED -lt $NOW ]; then
    DESIRED=$((`date +%s -d "$1"` + 24*60*60))
fi

# Kill rtcwake if already running
sudo killall rtcwake

# Set RTC wakeup time
# N.B. change "mem" for the suspend option
# find this by "man rtcwake"
sudo rtcwake -l -m mem -t $DESIRED &

# feedback
echo "Suspending..."

# give rtcwake some time to make its stuff
sleep 2

# then suspend
# N.B. dont usually require this bit
#sudo pm-suspend

# Any commands you want to launch after wakeup can be placed here
# Remember: sudo may have expired by now

# Wake up with monitor enabled N.B. change "on" for "off" if 
# you want the monitor to be disabled on wake
xset dpms force on

# and a fresh console
clear
echo "Good morning!"

NB

Ändern Sie memin diesem Teil des Skripts die für Sie geeignete Suspend-Methode:

# Set RTC wakeup time
sudo rtcwake -l -m mem -t $DESIRED &

Abhängig davon, ob Ihre Hardware-Uhr UTC ( ) oder Ortszeit ( ) verwendet, müssen Sie möglicherweise auch das -uFlag anstelle des -lFlags einsetzen . Beachten Sie, dass sich Ihre Hardware-Uhr von der Systemuhr unterscheidet, die Sie in Ihrem Betriebssystem sehen.-u-l

Gutschrift zu redgeonline

fossfreedom
quelle
1
worum ich gebeten habe ... und so viel mehr! Vielen Dank für das Lesen zwischen den Zeilen!
Drnessie
3
danke - nur geringfügig aktualisiert, um hervorzuheben, welches Teil des Skripts Sie für die für Sie geeignete Suspend-Methode ändern müssen.
fossfreedom
5
Das killall ist unnötig, rtcwake läuft nicht als Daemon, es schreibt einfach einen Wert nach / sys / class / rtc / rtc0 / wakealarm; Wenn Sie es erneut ausführen, wird ein anderer Wert in diese Datei geschrieben. Entfernen Sie auch das & am Ende von rtcwake, es wird beendet, wenn es fertig ist. Dann können Sie den Befehl sleep entfernen. Und wenn Sie andere root-Befehle im Skript ausführen möchten, warum nicht das ganze Ding sudo statt einzelner Befehle dort ausführen?
Unhammer
# Mein alter Laptop wachte mit dem obigen Skript nicht auf. Das habe ich also gemacht # root crontab 30 20 * * * /home/gare/Documents/scripts/suspend_10_hours.sh >> /home/gare/Documents/scripts/suspend.log ~ $ more / home / gare / Documents / scripts / suspend_10_hours.sh #! / bin / bash # alter Laptop weckt nicht; so sagt rtcwake für 10 Stunden auszusetzen # 10 Stunden * 60 Minuten * 60 Sekunden = 36000 sudo rtcwake -u es 36000 -m mem
garer
1
Zusätzlich zu dem, was @unhammer gesagt hat, ist killall nicht nur unnötig, sondern auch schädlich, da es SIGTERM an alle Prozesse auf Ihrem System sendet, die mit "killall" übereinstimmen. Bitte nehmen Sie die von unhammer vorgeschlagenen Korrekturen auf, anstatt dass die Leute falsche Praktiken kopieren.
josch
5

Mit rtcwake habe ich ein einfaches Bash-Skript erstellt. Es verwendet PHP, um natürliche Sprache in Systemzeit zu übersetzen. Zum Beispiel:

  • sudo ./cu "tomorrow 9am"

  • sudo ./cu "next monday 3pm"

  • sudo ./cu "1 hour ago"

    rtcwake: time doesn't go backward

Sie können es hier herunterladen.

#!/bin/bash
export sdate=$1

date=`/usr/bin/php << 'EOF'
<?php
date_default_timezone_set("Etc/GMT-2");
$date = strtotime(GETENV("sdate"));
echo "\r".$date;
EOF`

rtcwake -m mem -t $date
albertolopez
quelle
4
Beachten Sie, dass date -d bereits mehrere solcher Zeichenfolgen versteht: cyberciti.biz/tips/…
unhammer
0

rtcwakehatte keinen Einfluss auf meine Maschine. Auf meinem Asus-Motherboard musste ich die Weckzeit im BIOS einstellen. Ich fand die Einstellung unter Erweitert> APM-Menü und musste UTC verwenden, obwohl meine BIOS-Zeit auf US Eastern Time eingestellt ist.

Antonios Hadjigeorgalis
quelle