Jam alarm dari mode ditangguhkan

9

Saya ingin laptop saya bangun dari mode ditangguhkan di pagi hari dan alarm saya untuk bangun menggunakan file mp3 saya. Bagaimana saya melakukannya?

Saya mencoba apmsleep, tetapi tidak berfungsi karena PC saya tidak memiliki fitur "suspend to RAM" di BIOS. Apa yang dapat saya? Terima kasih!

Chelios
sumber

Jawaban:

13

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 xprintidleperlu 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 rtcwakeperintah, 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 diskopsi 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.

Yakub Vlijm
sumber
Saya akan menyarankan pemula untuk tidak menyentuh file sudoers.
RegarBoy
@developer praktis mereka perlu, tetapi peringatan harus diberikan. Akan mengedit jika saya pulang (saat ini di ponsel).
Jacob Vlijm
@developer dan selesai ....
Jacob Vlijm
1
Bukankah seharusnya begitu sudo visudo /etc/sudoers?
UniversallyUniqueID
@BharadwajRaju tidak, coba saja :) vi hanya editor.
Jacob Vlijm
2

Jika Anda dapat menghubungkan laptop Anda ke internet dengan kabel, Anda dapat mencoba menggunakan komputer atau smartphone lain untuk mengirim "paket ajaib" ke sana, dan membangunkannya.

Cari "wake on lan" (WOL).

Presbitero
sumber
Tidak, ini hanya wifi.
Chelios
1

Saya mengalami kesulitan menjalankan skrip python Jacob, jadi saya menulis ulang di bash . Cukup unduh saja, buat itu dapat dieksekusi dan edit variabel sesuai.

Beberapa hal: waktu alarm diatur melalui date -d. Beberapa contoh dari man date:

  • "Sun, 29 Feb 2004 16:21:42 -0800"
  • "2004-02-29 16:21:42"
  • "Kamis depan"

Setelah bangun saya gunakan vlc -Luntuk memutar musik dalam satu lingkaran. Jika jalur Anda adalah folder, ia akan mencoba memutar file di dalamnya. Itu yang saya lakukan.

Саша Давиденко
sumber