Despertador desde modo suspendido

9

Quiero que mi computadora portátil se despierte del modo suspendido por la mañana y me alarme para que me despierte usando mi archivo mp3. ¿Cómo lo hago?

Intenté con apmsleep, pero no funciona porque mi PC no tiene la función "suspender a RAM" en el BIOS. ¿Que puedo hacer? ¡Gracias!

Chelios
fuente

Respuestas:

13

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 xprintidledebe 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 rtcwakecomando, 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 diskutiliza 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.

Jacob Vlijm
fuente
Sugeriría a los novatos que no toquen el archivo sudoers.
RegarBoy
@developer prácticamente lo necesitan, pero se debe dar una advertencia. Se editará si llego a casa (actualmente en el móvil).
Jacob Vlijm
@developer y listo ...
Jacob Vlijm
1
¿No debería ser sudo visudo /etc/sudoers?
UniversallyUniqueID
@BharadwajRaju no, pruébalo :) vi es solo el editor.
Jacob Vlijm
2

Si puede conectar su computadora portátil a Internet por cable, puede intentar usar otra computadora o teléfono inteligente para enviarle un "paquete mágico" y despertarlo.

Busque "wake on lan" (WOL).

Presbitero
fuente
No, es solo wifi.
Chelios
1

Tuve problemas para ejecutar el script python de Jacob, así que lo reescribí en bash . Simplemente descárguelo, hágalo ejecutable y edite las variables en consecuencia.

Un par de cosas: la hora de la alarma se establece a través de date -d. Algunos ejemplos de man date:

  • "Dom, 29 de febrero de 2004 16:21:42 -0800"
  • "2004-02-29 16:21:42"
  • "el siguiente jueves"

Después de despertar, solía vlc -Lreproducir música en un bucle. Si su ruta es una carpeta, intentará reproducir archivos en ella. Eso es lo que hago.

Саша Давиденко
fuente