1. fungsi jam alarm dasar
Memasuki mode tunda
untuk solusi ini, Anda harus masuk ke mode menangguhkan dengan menjalankan skrip di bawah ini. Itu membuat komputer masuk ke mode menangguhkan dan membangunkan Anda pada waktu (jam-), yang ditentukan oleh Anda (dalam skrip). memainkan lagu Anda.
Tentu saja Anda bisa menjalankan skrip secara manual untuk menggunakannya, tetapi lebih mudah untuk membuatnya tersedia melalui kombinasi tombol, diatur System Settings > Keyboard > Shortcuts > Custom Shortcuts
.
Mendirikan
Rekatkan skrip di bawah ini dalam file kosong, setel waktu bangun (jam) (dalam 1-24 jam, 1-60 menit), setel path ke lagu bangun Anda, dan simpan sebagai 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])
membuat skrip dapat dieksekusi
Tetapkan kombinasi tombol untuk menjalankan skrip; buka System Preferences > Keyboard > Shortcuts > Custom Shortcuts
, tambahkan perintah
sudo /path/to/wakeup.py (sudo = assuming you do the next step below)
dan pilih kombinasi tombol
Skrip membutuhkan hak administrator. Untuk menjalankannya tanpa harus memasukkan kata sandi, buka file sudoers:
sudo visudo
tambahkan baris ke bagian paling bawah file:
[your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
Perhatikan bahwa file sudoers adalah file penting; kesalahan dalam file mungkin menyebabkan masalah serius , jadi hati-hati!
NB
- Setelah bangun, komputer diam selama 20 detik sebelum alarm dimulai.
- Jika Anda tidak ingin mengedit file sudoers, Anda perlu menginstal
gksu
: sudo apt-get install gksu
. Jika demikian, perintah untuk menjalankan skrip adalah gksu /path/to/wakeup.py
, dan Anda akan dimintai kata sandi setiap kali Anda menjalankannya.
Sekarang Anda dapat memasuki mode tunda dengan kombinasi tombol Anda dan Anda akan terbangun oleh lagu bangun Anda.
2. Versi yang diperluas termasuk fungsi berhenti ketika tombol (apa saja) atau mouse ditekan
Perbedaan antara versi ini dan "dasar" adalah bahwa dalam versi ini alarm berhenti ketika ada keystroke atau gerakan mouse terdeteksi (lebih nyaman daripada menghentikan Rhythmbox pada komputer ketika Anda baru saja bangun), dan alarm secara otomatis keluar setelah periode waktu yang ditentukan.
Pengaturannya hampir sama dengan versi dasar, tetapi xprintidle
perlu diinstal, untuk mendeteksi peristiwa gerakan tombol atau mouse:
sudo apt-get install xprintidle
Naskah:
#!/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()
Penjelasan
rtcwake
Kedua skrip ditulis di sekitar rtcwake
perintah, seperti yang dijelaskan di sini . Perintah dapat digunakan untuk meletakkan komputer ke dalam mode suspend dan bangun setelah waktu yang ditentukan (dan secara opsional menjalankan perintah setelah bangun) The -m disk
opsi digunakan, karena OP disebutkan komputernya tidak mendukung "menangguhkan untuk RAM" fitur di BIOS. Lihat juga man rtcwake
.
Fungsi berhenti
Fungsi berhenti bekerja dengan fungsi yang mengukur waktu idle setiap detik saat lagu diputar, dan mengingat waktu idle terakhir. JIKA waktu idle terakhir melebihi yang saat ini, itu berarti keystroke atau peristiwa mouse telah terjadi, dan Rhythmbox terbunuh.