Despertador do modo suspenso

8

Eu quero que meu laptop acorde do modo suspenso pela manhã e me mande um alarme para acordar usando meu arquivo mp3. Como faço isso?

Eu tentei o apmsleep, mas ele não funciona porque o meu PC não tem o recurso "suspender para a RAM" no BIOS. O que eu posso fazer? Obrigado!

    
por Chelios 19.11.2012 / 01:52

3 respostas

12

1.Função de despertador básico

Entrando no modo suspenso

para esta solução, você precisa entrar no modo de suspensão executando o script abaixo. Isso faz com que o computador entre em modo suspenso e o acorde em um horário (de relógio), definido por você (no script). tocando sua música.

É claro que você pode simplesmente executar o script manualmente para usá-lo, mas é mais conveniente disponibilizá-lo através de uma combinação de teclas, definida em System Settings > Keyboard > Shortcuts > Custom Shortcuts .

Configurar

  • Cole o script abaixo em um arquivo vazio, defina o horário de despertar (em 1-24 horas, 1-60 minutos), defina o caminho para sua música de despertar e salve-o 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])
    
  • torne o script executável

  • Defina uma combinação de teclas para executar o script; abra System Preferences > Keyboard > Shortcuts > Custom Shortcuts , adicione o comando

    sudo /path/to/wakeup.py (sudo = assuming you do the next step below)
    

    e escolha uma combinação de teclas

  • O script precisa dos privilégios do administrador. Para executá-lo sem ter que digitar a senha, abra o arquivo sudoers:

    sudo visudo
    

    adicione a linha ao final do arquivo:

    [your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
    

    Note que o arquivo sudoers é um arquivo essencial; erros no arquivo podem levar a sérios problemas , então seja cuidadoso!

N.B.

  • Após o despertar, o computador fica inativo por 20 segundos antes do início do alarme.
  • Se você não quiser editar o arquivo sudoers, precisará instalar gksu : sudo apt-get install gksu . Nesse caso, o comando para executar o script é gksu /path/to/wakeup.py , e você será solicitado sua senha toda vez que você a executar.

Agora você pode entrar no modo de suspensão com sua combinação de teclas e você será despertado pela sua música de despertar.

2.Extended version incluindo a função stop quando a tecla (qualquer) ou o mouse é pressionado

As diferenças entre este e a versão "básica" são que neste o alarme pára quando qualquer pressionamento de tecla ou movimento do mouse é detectado (mais conveniente do que parar o Rhythmbox no computador quando você acabou de acordar para cima), e que o alarme sai automaticamente após um período de tempo definido.

A configuração é praticamente a mesma que a versão básica, mas xprintidle precisa ser instalado para detectar eventos de movimento de pressionamento de tecla ou de mouse:

sudo apt-get install xprintidle

O script:

#!/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()

Explicação

rtcwake

Ambos os scripts são escritos em torno do comando rtcwake , conforme explicado aqui . O comando pode ser usado para colocar o computador em suspensão e acordar após um período de tempo definido (e, opcionalmente, executar um comando após o despertar). A opção -m disk é usada, pois OP mencionou que seu computador não suporta o recurso "suspender para RAM" no BIOS. Veja também man rtcwake .

A função de parada

A função de parada funciona por uma função que mede o tempo ocioso a cada segundo enquanto a música está tocando, e lembra o último tempo ocioso. SE o último tempo ocioso excede o atual, significa que ocorreu um evento de pressionamento de tecla ou de mouse e o Rhythmbox foi eliminado.

    
por Jacob Vlijm 15.08.2014 / 17:33
2

Se você puder conectar seu laptop à Internet por um cabo, tente usar outro computador ou smartphone para enviar um "pacote mágico" para ele e ativá-lo.

Procure por "wake on lan" (WOL).

    
por Presbitero 19.11.2012 / 02:44
1

Eu tive problemas ao executar o script python de Jacob, então reescrevi no bash . Basta baixá-lo, torná-lo executável e editar as variáveis de acordo.

Algumas coisas: a hora do alarme é definida por date -d . Alguns exemplos de man date :

  • "Sun, 29 de fevereiro de 2004 16:21:42 -0800"
  • "2004-02-29 16:21:42"
  • "próxima quinta-feira"

Depois de acordar, uso vlc -L para tocar algumas músicas em um loop. Se o seu caminho é uma pasta, ele tentará reproduzir arquivos nele. É o que eu faço.

    
por Саша Давиденко 13.07.2017 / 22:00