1. fonction de réveil de base
Entrer en mode suspension
pour cette solution, vous devez entrer en mode suspension en exécutant le script ci-dessous. Il fait passer l'ordinateur en mode suspension et vous réveille à une heure (horloge) définie par vous (dans le script). jouer votre chanson.
Bien sûr, vous pouvez simplement exécuter le script manuellement pour l'utiliser, mais il est plus pratique de le rendre disponible via une combinaison de touches, définie dans System Settings > Keyboard > Shortcuts > Custom Shortcuts
.
Installer
Collez le script ci-dessous dans un fichier vide, définissez l'heure de réveil (horloge) (en 1-24 heures, 1-60 minutes), définissez le chemin d'accès à votre chanson de réveil et enregistrez-la sous 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])
rendre le script exécutable
Définissez une combinaison de touches pour exécuter le script; ouvrez System Preferences > Keyboard > Shortcuts > Custom Shortcuts
, ajoutez la commande
sudo /path/to/wakeup.py (sudo = assuming you do the next step below)
et choisissez une combinaison de touches
Le script a besoin des privilèges d'administrateur. Pour l'exécuter sans avoir à saisir le mot de passe, ouvrez le fichier sudoers:
sudo visudo
ajoutez la ligne tout en bas du fichier:
[your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
Notez que le fichier sudoers est un fichier essentiel; des erreurs dans le fichier peuvent entraîner de graves problèmes , alors faites attention!
NB
- Après le réveil, l'ordinateur est inactif pendant 20 secondes avant le déclenchement de l'alarme.
- Si vous ne voulez pas modifier le fichier sudoers, vous devez installer
gksu
: sudo apt-get install gksu
. Dans ce cas, la commande pour exécuter le script est gksu /path/to/wakeup.py
et vous serez invité à entrer votre mot de passe chaque fois que vous l'exécuterez.
Vous pouvez maintenant entrer en mode suspension avec votre combinaison de touches et vous serez réveillé par votre chanson de réveil.
Version 2.Extended comprenant la fonction d'arrêt quand (n'importe quelle) touche ou souris est frappée
Les différences entre celui - ci et la version « de base » est que celui - ci l'arrête alarme lorsque tout mouvement de frappe ou la souris est détectée (plus pratique que l' arrêt Rhythmbox sur l'ordinateur lorsque vous vient de se réveiller), et que l'alarme automatiquement les sorties après une période de temps définie.
La configuration est à peu près la même que la version de base, mais xprintidle
doit être installée pour détecter les événements de mouvement de touche ou de souris:
sudo apt-get install xprintidle
Le scénario:
#!/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()
Explication
rtcwake
Les deux scripts sont écrits autour de la rtcwake
commande, comme expliqué ici . La commande peut être utilisée pour mettre l'ordinateur en veille et se réveiller après un laps de temps défini (et éventuellement exécuter une commande après le réveil). L' -m disk
option est utilisée, car OP a mentionné que son ordinateur ne prend pas en charge la fonction "suspendre à la RAM" dans le BIOS. Voir aussi man rtcwake
.
La fonction d'arrêt
La fonction d'arrêt fonctionne grâce à une fonction qui mesure le temps d'inactivité chaque seconde pendant la lecture du morceau et se souvient du dernier temps d'inactivité. SI le dernier temps d'inactivité dépasse celui en cours, cela signifie qu'un événement de frappe ou de souris a eu lieu et que Rhythmbox est tué.