นาฬิกาปลุกจากโหมดหยุดชั่วคราว


9

ฉันต้องการให้แล็ปท็อปของฉันตื่นจากโหมดหยุดทำงานในตอนเช้าและปลุกฉันให้ปลุกด้วยไฟล์ MP3 ของฉัน ฉันต้องทำอย่างไร?

ฉันลอง apmsleep แต่มันไม่ทำงานเพราะพีซีของฉันไม่มีฟีเจอร์ "suspend to RAM" ใน BIOS ฉันควรทำอย่างไร ขอบคุณ!

คำตอบ:


13

1. ฟังก์ชั่นนาฬิกาปลุกพื้นฐาน

เข้าสู่โหมด Suspend

สำหรับโซลูชันนี้คุณต้องเข้าสู่โหมด suspend โดยเรียกใช้สคริปต์ด้านล่าง มันทำให้คอมพิวเตอร์เข้าสู่โหมด suspend และทำให้คุณตื่นขึ้นมาในเวลา (clock-) ที่กำหนดโดยคุณ (ในสคริปต์) กำลังเล่นเพลงของคุณ

แน่นอนคุณก็สามารถเรียกใช้สคริปต์ด้วยตนเองที่จะใช้มัน 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

  • หลังจากตื่นนอนคอมพิวเตอร์จะไม่ได้ใช้งานเป็นเวลา 20 วินาทีก่อนที่การเตือนจะเริ่มขึ้น
  • หากคุณไม่ต้องการที่จะแก้ไขไฟล์ sudoers คุณจำเป็นต้องติดตั้ง :gksu sudo apt-get install gksuในกรณีนั้นคำสั่งในการเรียกใช้สคริปต์คือgksu /path/to/wakeup.pyและคุณจะได้รับพร้อมท์ให้ใส่รหัสผ่านทุกครั้งที่คุณเรียกใช้

ตอนนี้คุณสามารถเข้าสู่โหมด suspend ด้วยคีย์ผสมของคุณและคุณจะตื่นขึ้นมาด้วยเพลงปลุก

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คำสั่งตามที่อธิบายไว้ที่นี่ สามารถใช้คำสั่งเพื่อทำให้คอมพิวเตอร์เข้าสู่โหมด suspend และ wake up หลังจากระยะเวลาที่กำหนดไว้ (และสามารถรันคำสั่งหลังจาก wake up) -m diskตัวเลือกที่ถูกนำมาใช้ตั้งแต่ OP กล่าวถึงคอมพิวเตอร์ของเขาไม่สนับสนุน "ระงับแรม" คุณสมบัติใน BIOS man rtcwakeดูเพิ่มเติม

ฟังก์ชั่นหยุด

ฟังก์ชั่นหยุดทำงานโดยฟังก์ชั่นที่วัดเวลาว่างทุกวินาทีในขณะที่เพลงกำลังเล่นและจดจำเวลาว่างล่าสุด หากเวลาว่างล่าสุดเกินเวลาปัจจุบันหมายถึงเหตุการณ์การกดแป้นหรือเมาส์เกิดขึ้นและ Rhythmbox ถูกฆ่า


ฉันอยากจะแนะนำมือใหม่ว่าอย่าแตะไฟล์ sudoers
RegarBoy

@ ผู้พัฒนาที่พวกเขาต้องการจริง แต่ควรได้รับคำเตือน จะแก้ไขหากฉันกลับถึงบ้าน (ขณะนี้อยู่บนมือถือ)
Jacob Vlijm

@developer และทำ ....
Jacob Vlijm

1
มันไม่ควรจะเป็นsudo visudo /etc/sudoers?
UniversallyUniqueID

@BharadwajRaju ไม่ลองเลย :) vi เป็นเพียงเครื่องมือแก้ไข
Jacob Vlijm

2

หากคุณสามารถเชื่อมต่อแล็ปท็อปของคุณเข้ากับอินเทอร์เน็ตด้วยสายเคเบิลคุณสามารถลองใช้คอมพิวเตอร์หรือสมาร์ทโฟนเครื่องอื่นเพื่อส่ง "แพ็คเก็ตเวทย์มนตร์" ไปยังคอมพิวเตอร์ของคุณและปลุกมันขึ้นมา

มองหา "wake on lan" (WOL)


ไม่มันเป็น wifi เท่านั้น
Chelios

1

ผมมีปัญหาการเรียกใช้สคริปต์หลามของจาค็อบดังนั้นผมเขียนไว้ในทุบตี เพียงแค่ดาวน์โหลดมันทำให้มันสามารถเรียกใช้งานได้และแก้ไขตัวแปรตามนั้น

สองสิ่งที่ A: date -dเวลาปลุกถูกตั้งค่าผ่านทาง ตัวอย่างบางส่วนจากman date:

  • "อา., 29 ก.พ. 2547 16:21:42 -0800"
  • "2004-02-29 16:21:42"
  • "วันพฤหัสบดีหน้า"

หลังจากตื่นนอนฉันใช้vlc -Lเพื่อเล่นเพลงในวง หากเส้นทางของคุณเป็นโฟลเดอร์มันจะพยายามเล่นไฟล์ในนั้น นั่นคือสิ่งที่ฉันทำ.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.