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.py
e 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 xprintidle
deve 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 rtcwake
comando, 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 disk
opzione è 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 -L
una musica in loop. Se il tuo percorso è una cartella, proverà a riprodurre i file in essa contenuti. Questo è ciò che faccio.