Função do despertador 1.Basic
Entrando no modo de suspensão
para esta solução, você precisa entrar no modo de suspensão executando o script abaixo. Isso faz com que o computador entre no modo de suspensão e o acorda no horário (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 por meio de uma combinação de teclas configurada System Settings > Keyboard > Shortcuts > Custom Shortcuts
.
Configuração
Cole o script abaixo em um arquivo vazio, defina o tempo de despertar (relógio) (em 1 a 24 horas, 1 a 60 minutos), defina o caminho para a 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; aberto 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 de privilégios de administrador. Para executá-lo sem precisar digitar a senha, abra o arquivo sudoers:
sudo visudo
adicione a linha na parte inferior do arquivo:
[your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
Observe que o arquivo sudoers é um arquivo essencial; Os erros no arquivo podem levar a problemas sérios , portanto, tenha cuidado!
NB
- Depois de acordar, o computador fica inativo por 20 segundos antes do alarme iniciar.
- Se você não deseja editar o arquivo sudoers, você precisa instalar
gksu
: sudo apt-get install gksu
. Nesse caso, o comando para executar o script é gksu /path/to/wakeup.py
e você será solicitado a fornecer sua senha sempre que executá-lo.
Agora você pode entrar no modo de suspensão com a combinação de teclas e será acordado pela sua música de despertar.
Versão 2.Extended incluindo a função de parada quando (qualquer) tecla ou mouse é pressionado
As diferenças entre esta e a versão "básica" são que, nesta, o alarme para quando qualquer movimento de tecla ou mouse é detectado (mais conveniente do que parar o Rhythmbox no computador quando você acabou de acordar) e que o alarme sai automaticamente após um período de tempo definido.
A configuração é praticamente a mesma da versão básica, mas xprintidle
precisa ser instalada, para detectar eventos de movimentos de teclas 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 rtcwake
comando, conforme explicado aqui . O comando pode ser usado para colocar o computador em suspensão e ativar após um período de tempo definido (e, opcionalmente, executar um comando após a ativação). A -m disk
opção é usada, pois o 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 exceder o atual, isso significa que um evento de pressionamento de tecla ou mouse ocorreu e o Rhythmbox é interrompido.
sudo visudo /etc/sudoers
?Se você puder conectar seu laptop à Internet por um cabo, tente usar outro computador ou smartphone para enviar um "pacote mágico" e ativá-lo.
Procure por "wake on lan" (WOL).
fonte
Como tive problemas ao executar o script python de Jacob, reescrevi-o no bash . Basta fazer o download, torná-lo executável e editar as variáveis de acordo.
Algumas coisas: a hora do alarme é definida via
date -d
. Alguns exemplos deman date
:Depois de acordar, eu costumava
vlc -L
tocar música em loop. Se o seu caminho for uma pasta, ele tentará reproduzir arquivos nela. Isto é o que eu faço.fonte