Câu trả lời:
1. Chức năng đồng hồ báo thức cơ bản
Đang vào chế độ treo
Đối với giải pháp này, bạn cần vào chế độ tạm dừng bằng cách chạy tập lệnh bên dưới. Nó làm cho máy tính chuyển sang chế độ treo và đánh thức bạn tại một thời điểm (đồng hồ-), được xác định bởi bạn (trong tập lệnh). chơi bài hát của bạn
Tất nhiên bạn chỉ có thể chạy tập lệnh theo cách thủ công để sử dụng nó, nhưng sẽ thuận tiện hơn khi cung cấp tập lệnh thông qua tổ hợp phím, được đặt trong System Settings > Keyboard > Shortcuts > Custom Shortcuts
.
Thiết lập
Dán đoạn script bên dưới vào một tệp trống, đặt thời gian đánh thức (đồng hồ) (trong 1-24 giờ, 1-60 phút), đặt đường dẫn đến bài hát đánh thức của bạn và lưu nó dưới dạng 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])
làm cho kịch bản thực thi
Đặt tổ hợp phím để chạy tập lệnh; mở System Preferences > Keyboard > Shortcuts > Custom Shortcuts
, thêm lệnh
sudo /path/to/wakeup.py (sudo = assuming you do the next step below)
và chọn một tổ hợp phím
Kịch bản cần đặc quyền của quản trị viên. Để chạy nó mà không cần phải nhập mật khẩu, hãy mở tệp sudoers:
sudo visudo
thêm dòng vào dưới cùng của tập tin:
[your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
Lưu ý rằng tệp sudoers là một tệp thiết yếu; lỗi trong tập tin có thể dẫn đến các vấn đề nghiêm trọng , vì vậy hãy cẩn thận!
Lưu ý
gksu
: sudo apt-get install gksu
. Trong trường hợp đó, lệnh để chạy tập lệnh là gksu /path/to/wakeup.py
và bạn sẽ được nhắc nhập mật khẩu mỗi lần bạn chạy nó.Bây giờ bạn có thể vào chế độ tạm dừng với tổ hợp phím của mình và bạn sẽ bị đánh thức bởi bài hát đánh thức của mình.
2. Phiên bản mở rộng bao gồm chức năng dừng khi nhấn phím (bất kỳ) hoặc chuột
Sự khác biệt giữa phiên bản này và phiên bản "cơ bản" là ở chế độ này, báo thức sẽ dừng khi phát hiện thấy bất kỳ chuyển động phím hoặc chuột nào (thuận tiện hơn là dừng Rhybeatbox trên máy tính khi bạn vừa thức dậy) và báo thức sẽ tự động thoát sau một khoảng thời gian xác định.
Thiết lập khá giống với phiên bản cơ bản, nhưng xprintidle
cần phải được cài đặt, để phát hiện các sự kiện di chuyển phím hoặc chuột:
sudo apt-get install xprintidle
Kịch bản:
#!/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()
Giải trình
rtcwake
Cả hai kịch bản được viết xung quanh rtcwake
lệnh, như được giải thích ở đây . Lệnh có thể được sử dụng để đặt máy tính tạm dừng và thức dậy sau một khoảng thời gian xác định (và tùy ý chạy lệnh sau khi thức dậy). Các -m disk
tùy chọn được sử dụng, vì OP đề cập máy tính của mình không hỗ trợ "đình chỉ để RAM" tính năng trong BIOS. Xem thêm man rtcwake
.
Chức năng dừng
Hàm dừng hoạt động theo chức năng đo thời gian nhàn rỗi mỗi giây khi bài hát đang phát và ghi nhớ thời gian rảnh cuối cùng. NẾU thời gian nhàn rỗi cuối cùng vượt quá thời gian hiện tại, điều đó có nghĩa là một sự kiện nhấn phím hoặc chuột đã diễn ra và Rhybeatbox bị giết.
sudo visudo /etc/sudoers
?
Nếu bạn có thể kết nối máy tính xách tay của bạn với internet bằng cáp, bạn có thể thử sử dụng một máy tính hoặc điện thoại thông minh khác để gửi "gói ma thuật" tới nó và đánh thức nó.
Tìm kiếm "đánh thức trên lan" (WOL).
Tôi gặp khó khăn khi chạy kịch bản python của Jacob, vì vậy tôi đã viết lại nó trong bash . Chỉ cần tải về nó, làm cho nó thực thi và chỉnh sửa các biến cho phù hợp.
Một vài điều: thời gian báo thức được thiết lập thông qua date -d
. Một số ví dụ từ man date
:
Sau khi thức dậy, tôi sử dụng vlc -L
để chơi một số nhạc trong một vòng lặp. Nếu đường dẫn của bạn là một thư mục, nó sẽ cố gắng phát các tệp trong đó. Đó là những gì tôi làm.