Sonno e sveglia automaticamente in momenti specifici

57

Come posso ibernare o dormire sul desktop di Ubuntu 10.10 e farlo "svegliare" il giorno dopo?

Ho visto software in grado di farlo su Windows, quindi non può essere difficile su Ubuntu!

    
posta drnessie 16.09.2011 - 18:28

3 risposte

68

rtcwake

Il comando a cui sei interessato è rtcwake :

  

Questo programma viene utilizzato per immettere uno stato di sospensione del sistema fino al tempo di attivazione specificato.

testing

Per trovare la sintassi corretta che funziona per te prova quanto segue:

sudo rtcwake -u -s 60 -m mem

Questo dovrebbe sospendere il computer per 60 secondi prima del ripristino. Il parametro significativo è mem Hai diverse opzioni che puoi scegliere: gioca per trovare il valore che funziona meglio per te:

          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.

sospendi fino a un orario noto

È possibile utilizzare uno script (in fondo a questo post) per sospendere il computer e attivare la sveglia in un momento specifico:

la sintassi è suspend_until [hh:mm] per esempio

sudo ./suspend_until 07:30

Salva lo script come nome suspend_until e assegnagli diritti di esecuzione, cioè

chmod +x suspend_until

Cron

Puoi creare un lavoro cron di root che chiama questo script da eseguire ad un'ora specifica della sera e poi svegliarsi la mattina:

sudo crontab -e

Ora inserisci qualcosa come per eseguire lo script di sospensione alle 23:30:

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

script suspend_until

#!/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 ""'))
NOW=$(('date +%s'))
if [ $DESIRED -lt $NOW ]; then
    DESIRED=$(('date +%s -d ""' + 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.

Modifica mem in questa parte dello script per qualsiasi metodo di sospensione funzioni per te:

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

Potrebbe anche essere necessario sostituire il flag -u al posto del flag -l a seconda che l'orologio hardware utilizzi il tempo UTC ( -u ) o locale ( -l ). Tieni presente che l'orologio hardware è diverso dall'orologio di sistema che vedi nel tuo sistema operativo.

credito a redgeonline

    
risposta data fossfreedom 16.09.2011 - 20:08
5

Usando rtcwake ho creato un semplice script bash. Usa php per tradurre il linguaggio naturale in tempo di sistema. Ad esempio:

  • sudo ./cu "tomorrow 9am"

  • sudo ./cu "next monday 3pm"

  • sudo ./cu "1 hour ago"

    rtcwake: time doesn't go backward

Puoi scaricarlo qui.

#!/bin/bash
export sdate=

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
    
risposta data albertolopez 17.07.2012 - 16:41
0

rtcwake non ha avuto alcun effetto sulla mia macchina. Sulla mia scheda madre Asus, ho dovuto impostare il tempo di veglia nel bios. Ho trovato l'impostazione in Avanzate & gt; Il menu APM e io dovevamo usare l'UTC anche se il tempo del mio bios era impostato sull'ora orientale degli Stati Uniti.

    
risposta data Antonios Hadjigeorgalis 23.10.2016 - 19:45

Leggi altre domande sui tag