Risposte:
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
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.
sudo visudo /etc/sudoers?
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).
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:
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.