Sveglia da modalità sospesa


9

Voglio che il mio laptop si svegli dalla modalità sospesa al mattino e mi allarmi per svegliarmi usando il mio file mp3. Come lo faccio?

Ho provato apmsleep, ma non funziona perché il mio PC non ha la funzione "suspend to RAM" nel BIOS. Cosa posso fare? Grazie!

Risposte:


13

1. Funzione sveglia di base

Accesso alla modalità di sospensione

per questa soluzione, è necessario accedere alla modalità di sospensione eseguendo lo script seguente. Rende il computer in modalità di sospensione e ti sveglia in un (orario) orario, definito da te (nello script). suonare la tua canzone.

Ovviamente puoi semplicemente eseguire manualmente lo script per usarlo, ma è più conveniente renderlo disponibile tramite una combinazione di tasti, impostata System Settings > Keyboard > Shortcuts > Custom Shortcuts.

Impostare

  • Incolla lo script di seguito in un file vuoto, imposta il tempo di sveglia (orologio) (in 1-24 ore, 1-60 minuti), imposta il percorso del tuo brano di sveglia e salvalo come wakeup.py.

    #!/usr/bin/env python3
    
    import datetime
    import subprocess
    
    ###############################################
    # set wakeuptime and location of the mp3:
    hour = 7
    minutes = 15
    command = "rhythmbox /path/to/wakeupsong.mp3"
    ###############################################
    
    currtime = str(datetime.datetime.now().time()).split(":")[:2]
    minutes_set = hour*60 + minutes
    minutes_curr = int(currtime[0])*60 + int(currtime[1])
    if minutes_curr < minutes_set:
        minutes_togo = minutes_set - minutes_curr
    else:
        minutes_togo = minutes_set + 1440-minutes_curr
    interval = minutes_togo*60
    
    run = "rtcwake -m disk -s "+str(interval)+" && "+"sleep 20 &&"+command
    subprocess.call(['/bin/bash', '-c', run])
  • rendere eseguibile lo script

  • Imposta una combinazione di tasti per eseguire lo script; apri System Preferences > Keyboard > Shortcuts > Custom Shortcuts, aggiungi il comando

    sudo /path/to/wakeup.py (sudo = assuming you do the next step below)
    

    e scegli una combinazione di tasti

  • Lo script necessita dei privilegi di amministratore. Per eseguirlo senza inserire la password, apri il file sudoers:

    sudo visudo
    

    aggiungi la riga in fondo al file:

    [your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
    

    Si noti che il file sudoers è un file essenziale; gli errori nel file possono causare seri problemi , quindi fai attenzione!

NB

  • Dopo il risveglio, il computer rimane inattivo per 20 secondi prima che inizi l'allarme.
  • Se non si desidera modificare il file sudoers, è necessario installare gksu: sudo apt-get install gksu. In tal caso, il comando per eseguire lo script è gksu /path/to/wakeup.pye ti verrà richiesta la password ogni volta che lo esegui.

Ora puoi entrare in modalità di sospensione con la combinazione di tasti e verrai svegliato dal tuo brano di sveglia.

2.Versione estesa inclusa la funzione di arresto quando si preme un tasto (qualsiasi) o un mouse

La differenza tra questa e la versione "base" è che in questa la sveglia si interrompe quando viene rilevata la pressione di un tasto o il movimento del mouse (più conveniente che fermare Rhythmbox sul computer quando ti sei appena svegliato), e che la sveglia esce automaticamente dopo un periodo di tempo definito.

L'impostazione è praticamente la stessa della versione di base, ma xprintidledeve essere installata per rilevare gli eventi di battitura o di movimento del mouse:

sudo apt-get install xprintidle

Il copione:

#!/usr/bin/env python3

import subprocess
import time
import datetime
from threading import Thread

#-------------------------- edit settings below -------------------------------
max_wakeupduration = 1              # max time the song will play (minutes)
wakeup_hour = 7                     # wake up hour (0-24)
wakeup_minute = 15                  # wake up minute
wakeup_song = "/path/to/song.mp3"   # path to wake up song
#------------------------------------------------------------------------------

def stop_wakeup():
    time1 = int(time.time()); time2 = time1
    last_idle = 0
    playtime = max_wakeupduration*60
    while time2 - time1 < playtime:
        get_idle = subprocess.Popen(["xprintidle"], stdout=subprocess.PIPE)
        curr_idle = int(get_idle.communicate()[0].decode("utf-8"))
        if curr_idle < last_idle:
            break
        else:
            last_idle = curr_idle
            time.sleep(1)
            time2 = int(time.time())
    subprocess.Popen(["pkill", "rhythmbox"])

def calculate_time():
    currtime = str(datetime.datetime.now().time()).split(":")[:2]
    minutes_set = wakeup_hour*60 + wakeup_minute
    minutes_curr = int(currtime[0])*60 + int(currtime[1])
    if minutes_curr < minutes_set:
        minutes_togo = minutes_set - minutes_curr
    else:
        minutes_togo = minutes_set + 1440-minutes_curr
    return minutes_togo*60

def go_asleep():
    sleeptime = calculate_time()   
    run = "rtcwake -m disk -s "+str(sleeptime)+" && "+"sleep 20"
    subprocess.call(['/bin/bash', '-c', run])
    combined_actions()

def play_song():
    command = "rhythmbox "+wakeup_song
    subprocess.Popen(['/bin/bash', '-c', command])

def combined_actions():
    Thread(target = play_song).start()
    Thread(target = stop_wakeup).start()

go_asleep()

Spiegazione

rtcwake

Entrambi gli script sono scritti attorno al rtcwakecomando, come spiegato qui . Il comando può essere utilizzato per sospendere e riattivare il computer dopo un determinato periodo di tempo (ed eventualmente eseguire un comando dopo il riattivazione). L' -m diskopzione è usata, poiché OP ha menzionato che il suo computer non supporta la funzione "sospendi nella RAM" nel BIOS. Vedi anche man rtcwake.

La funzione di arresto

La funzione di arresto funziona con una funzione che misura il tempo di inattività ogni secondo mentre il brano è in riproduzione e ricorda l'ultimo tempo di inattività. Se l'ultimo tempo di inattività supera quello corrente, significa che è avvenuta una sequenza di tasti o un evento del mouse e Rhythmbox viene ucciso.


Suggerirei ai principianti di non toccare il file sudoers.
RegarBoy,

@developer hanno praticamente bisogno, ma dovrebbe essere dato un avvertimento. Modificherò se torno a casa (attualmente sul cellulare).
Jacob Vlijm,

@developer and done ....
Jacob Vlijm,

1
Non dovrebbe essere sudo visudo /etc/sudoers?
UniversallyUniqueID

@BharadwajRaju no, provalo :) vi è solo l'editor.
Jacob Vlijm,

2

Se puoi avere il tuo laptop collegato a Internet tramite un cavo, puoi provare a utilizzare un altro computer o smartphone per inviare un "pacchetto magico" e svegliarlo.

Cerca "wake on lan" (WOL).


No, è solo wifi.
Chelios,

1

Ho avuto problemi con l'esecuzione della sceneggiatura di Jacob in pitone, quindi l'ho riscritta in bash . Basta scaricarlo, renderlo eseguibile e modificare le variabili di conseguenza.

Un paio di cose: l'ora della sveglia viene impostata tramite date -d. Alcuni esempi da man date:

  • "Dom, 29 feb 2004 16:21:42 -0800"
  • "2004-02-29 16:21:42"
  • "giovedì prossimo"

Dopo il risveglio uso vlc -Luna musica in loop. Se il tuo percorso è una cartella, proverà a riprodurre i file in essa contenuti. Questo è ciò che faccio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.