Ответы:
Функция будильника 1.Basic
Вход в режим ожидания
для этого решения вам нужно войти в режим ожидания, запустив приведенный ниже скрипт. Это заставляет компьютер переходить в режим ожидания и будит вас в (часы) время, определенное вами (в сценарии). играть твою песню.
Конечно, вы можете просто запустить скрипт вручную, чтобы использовать его, но удобнее сделать его доступным с помощью комбинации клавиш, установленной в System Settings > Keyboard > Shortcuts > Custom Shortcuts
.
Настроить
Вставьте приведенный ниже скрипт в пустой файл, установите время пробуждения (часы) (через 1-24 часа, 1-60 минут), укажите путь к вашей песне пробуждения и сохраните его как 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])
сделать скрипт исполняемым
Установите комбинацию клавиш для запуска скрипта; открыть System Preferences > Keyboard > Shortcuts > Custom Shortcuts
, добавить команду
sudo /path/to/wakeup.py (sudo = assuming you do the next step below)
и выберите комбинацию клавиш
Скрипту нужны права администратора. Чтобы запустить его без ввода пароля, откройте файл sudoers:
sudo visudo
добавьте строку в самый конец файла:
[your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
Обратите внимание, что файл sudoers является важным файлом; ошибки в файле могут привести к серьезным проблемам , поэтому будьте осторожны!
NB
gksu
: sudo apt-get install gksu
. В этом случае команда для запуска сценария будет gksu /path/to/wakeup.py
, и вам будет предложено ввести пароль при каждом запуске.Теперь вы можете войти в режим ожидания с помощью комбинации клавиш, и вы проснетесь от своей песни для пробуждения.
2. Расширенная версия, включающая функцию остановки при нажатии любой клавиши или мыши
Различия между этой и «базовой» версиями заключаются в том, что в этом случае сигнал тревоги прекращается при обнаружении любого нажатия клавиши или движения мыши (более удобно, чем останавливать Rhythmbox на компьютере, когда вы только что проснулись), и что сигнал тревоги автоматически отключается после определенный период времени.
Настройка в значительной степени совпадает с базовой версией, но ее xprintidle
необходимо установить для обнаружения событий нажатия клавиш или мыши:
sudo apt-get install xprintidle
Сценарий:
#!/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()
объяснение
rtcwake
Оба сценария написаны вокруг rtcwake
команды, как описано здесь . Команду можно использовать, чтобы перевести компьютер в режим ожидания и активировать его через определенное время (и при необходимости запустить команду после активации). Эта -m disk
опция используется, поскольку OP упомянул, что его компьютер не поддерживает функцию «приостановить работу в ОЗУ» в BIOS. Смотрите также man rtcwake
.
Функция остановки
Функция останова работает с помощью функции, которая измеряет время простоя каждую секунду во время воспроизведения песни и запоминает последнее время простоя. Если последний период простоя превышает текущий, это означает, что произошло нажатие клавиши или событие мыши, и Rhythmbox уничтожен.
sudo visudo /etc/sudoers
?
Если вы можете подключить ноутбук к Интернету с помощью кабеля, вы можете попробовать использовать другой компьютер или смартфон, чтобы отправить ему «волшебный пакет» и разбудить его.
Ищите «разбудить по локальной сети» (WOL).
У меня были проблемы с запуском скрипта Джейкоба на Python, поэтому я переписал его на bash . Просто скачайте его, сделайте его исполняемым и соответственно отредактируйте переменные.
Пара вещей: время будильника устанавливается через date -d
. Некоторые примеры из man date
:
После пробуждения я использую vlc -L
музыку в цикле. Если ваш путь к папке, он будет пытаться воспроизвести файлы в нем. Это то, чем я занимаюсь.