1.Función de reloj despertador básico
Entrar en modo de suspensión
para esta solución, debe ingresar al modo de suspensión ejecutando el siguiente script. Hace que la computadora entre en modo de suspensión y lo despierta a una hora (del reloj), definida por usted (en el script). tocando tu canción
Por supuesto, simplemente puede ejecutar el script manualmente para usarlo, pero es más conveniente que esté disponible a través de una combinación de teclas, configurada System Settings > Keyboard > Shortcuts > Custom Shortcuts
.
Preparar
Pegue la secuencia de comandos a continuación en un archivo vacío, configure el tiempo de activación (reloj) (en 1-24 horas, 1-60 minutos), establezca la ruta de su canción de inicio y guárdela como 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])
hacer que el script sea ejecutable
Establezca una combinación de teclas para ejecutar el script; abrir System Preferences > Keyboard > Shortcuts > Custom Shortcuts
, agregar el comando
sudo /path/to/wakeup.py (sudo = assuming you do the next step below)
y elige una combinación de teclas
El script necesita privilegios de administrador. Para ejecutarlo sin tener que ingresar la contraseña, abra el archivo sudoers:
sudo visudo
agregue la línea al final del archivo:
[your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
Tenga en cuenta que el archivo sudoers es un archivo esencial; Los errores en el archivo pueden ocasionar problemas graves , ¡así que tenga cuidado!
nótese bien
- Después de despertarse, la computadora está inactiva durante 20 segundos antes de que se active la alarma.
- Si no desea editar el archivo sudoers, es necesario instalar
gksu
: sudo apt-get install gksu
. En ese caso, el comando para ejecutar el script es gksu /path/to/wakeup.py
, y se le pedirá su contraseña cada vez que lo ejecute.
Ahora puede ingresar al modo de suspensión con su combinación de teclas y su canción de despertador lo despertará.
2. Versión extendida que incluye la función de detención cuando se pulsa (cualquier) tecla o mouse
Las diferencias entre esta y la versión "básica" es que en esta la alarma se detiene cuando se detecta cualquier pulsación de tecla o movimiento del mouse (más conveniente que detener Rhythmbox en la computadora cuando acaba de despertarse), y que la alarma se cierra automáticamente después de un período de tiempo definido
La configuración es prácticamente la misma que la versión básica, pero xprintidle
debe instalarse para detectar eventos de movimiento de pulsación de tecla o mouse:
sudo apt-get install xprintidle
La secuencia de comandos:
#!/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()
Explicación
rtcwake
Ambos scripts están escritos alrededor del rtcwake
comando, como se explica aquí . El comando se puede usar para suspender y activar la computadora después de un período de tiempo definido (y, opcionalmente, ejecutar un comando después de la activación). Se -m disk
utiliza la opción, ya que OP mencionó que su computadora no admite la función "suspender a RAM" en el BIOS. Ver también man rtcwake
.
La función de parada
La función de parada funciona mediante una función que mide el tiempo de inactividad cada segundo mientras se reproduce la canción y recuerda el último tiempo de inactividad. SI el último tiempo de inactividad excede el actual, significa que se ha producido una pulsación de tecla o un evento del mouse, y Rhythmbox es eliminado.