Askıya alınmış moddan çalar saat


9

Dizüstü bilgisayarımın sabah askıya alınmış moddan uyanmasını ve mp3 dosyamı kullanarak uyanmam için alarm vermesini istiyorum. Nasıl yaparım?

Apmsleep'i denedim, ancak çalışmıyor çünkü bilgisayarımın BIOS'ta "RAM'e askıya alma" özelliği yok. Ne yapabilirim? Teşekkürler!

Yanıtlar:


13

1. temel çalar saat fonksiyonu

Askıya alma moduna girme

bu çözüm için, aşağıdaki komut dosyasını çalıştırarak askıya alma moduna girmeniz gerekir. Bilgisayarı bekleme moduna geçirir ve sizin tarafınızdan (komut dosyasında) tanımlanan (saat) zamanında sizi uyandırır. şarkınızı çalıyor.

Elbette komut dosyasını kullanmak için manuel olarak çalıştırabilirsiniz, ancak ayarlanmış bir tuş kombinasyonu ile kullanılabilir hale getirmek daha uygundur System Settings > Keyboard > Shortcuts > Custom Shortcuts.

Kurmak

  • Aşağıdaki komut dosyasını boş bir dosyaya yapıştırın, uyandırma (saat) süresini (1-24 saat, 1-60 dakika içinde) ayarlayın, uyandırma şarkınızın yolunu ayarlayın ve olarak kaydedin 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])
    
  • komut dosyasını yürütülebilir yap

  • Komut dosyasını çalıştırmak için bir tuş kombinasyonu ayarlayın; aç System Preferences > Keyboard > Shortcuts > Custom Shortcuts, komutu ekle

    sudo /path/to/wakeup.py (sudo = assuming you do the next step below)
    

    ve bir tuş kombinasyonu seçin

  • Komut dosyasının yöneticinin ayrıcalıklarına ihtiyacı var. Şifreyi girmek zorunda kalmadan çalıştırmak için sudoers dosyasını açın:

    sudo visudo
    

    satırı dosyanın en altına ekleyin:

    [your_username] ALL=NOPASSWD: [/path/to/wakeup.py]
    

    Sudoers dosyasının önemli bir dosya olduğunu unutmayın; dosyadaki hatalar muhtemelen ciddi sorunlara yol açar , bu yüzden dikkatli olun!

NB

  • Uyandıktan sonra, alarm başlamadan önce bilgisayar 20 saniye boyunca boşta kalır.
  • Eğer Sudoers dosyayı düzenlemek istemiyorsanız, yüklemek gerekir gksu: sudo apt-get install gksu. Bu durumda, komut dosyasını çalıştırma komutu olur gksu /path/to/wakeup.pyve her çalıştırdığınızda parolanız istenir.

Artık tuş kombinasyonunuzla askıya alma moduna girebilirsiniz ve uyandırma şarkınızla uyandırılacaksınız.

2. (herhangi) tuşa veya fareye basıldığında durdurma işlevini içeren genişletilmiş sürüm

Bu ve "temel" sürüm arasındaki farklar, bu tuşta herhangi bir tuş vuruşu veya fare hareketi algılandığında alarmın durmasıdır (uyandığınızda bilgisayarda Rhythmbox'ı durdurmaktan daha uygundur) ve alarmın daha sonra otomatik olarak çıkmasıdır. belirli bir süre.

Kurulum, temel sürümle hemen hemen aynıdır, ancak xprintidletuş vuruşu veya fare hareketi olaylarını algılamak için yüklenmesi gerekir:

sudo apt-get install xprintidle

Senaryo:

#!/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()

açıklama

rtcwake

Her iki komut dosyası da buradartcwake açıklandığı gibi komutun etrafına yazılır . Komut, bilgisayarı belirli bir süre sonra askıya alma ve uyandırma (ve isteğe bağlı olarak uyandıktan sonra bir komut çalıştırma) için kullanılabilir. OP onun bilgisayar desteklemek BIOS özelliğini "RAM ile askıya" değil sözü beri seçeneği kullanılır. Ayrıca bakınız .-m diskman rtcwake

Durdurma işlevi

Durdurma işlevi, şarkı çalarken her saniye boşta kalma süresini ölçen ve son boşta kalma süresini hatırlayan bir işlevle çalışır. EĞER son boş zaman mevcut olanı aşar, bir tuş ya da fare olayı gerçekleştikten ve Rhythmbox öldürdü demektir.


Newbie'nin sudoers dosyasına dokunmamasını öneririm.
RegarBoy

@developer pratikte gerekir, ancak bir uyarı verilmelidir. Eve dönersem (şu anda mobilde) düzenler.
Jacob Vlijm

@developer ve bitti ....
Jacob Vlijm

1
Olmamalı mı sudo visudo /etc/sudoers?
UniversallyUniqueID

@BharadwajRaju hayır, deneyin :) vi sadece editör.
Jacob Vlijm

2

Dizüstü bilgisayarınızı bir kabloyla internete bağlayabilirseniz, ona "sihirli bir paket" göndermek için başka bir bilgisayar veya akıllı telefon kullanmayı deneyebilir ve uyandırabilirsiniz.

"Wake on lan" (WOL) için arama yapın.


Hayır, sadece wifi.
Chelios

1

Jacob'un python senaryosunu çalıştırırken sorun yaşadım, bu yüzden bash'de yeniden yazdım . Sadece indirin, yürütülebilir yapın ve değişkenleri buna göre düzenleyin.

Birkaç şey: alarm zamanı üzerinden ayarlanır date -d. Bazı örnekler man date:

  • "Pzr, 29 Şub 2004 16:21:42 -0800"
  • "2004-02-29 16:21:42"
  • "önümüzdeki Perşembe"

Uyandıktan sonra vlc -Ldöngü halinde müzik çalmak için kullanıyorum . Yolunuz bir klasörse, içindeki dosyaları oynatmaya çalışır. İşte bu yaptığım şey.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.