暂停模式下的闹钟


9

我希望我的笔记本电脑在早晨从暂停模式中唤醒,并提醒我使用mp3文件唤醒。我该怎么做?

我尝试了apmsleep,但是它不起作用,因为我的PC在BIOS中没有“暂停到RAM”功能。我能做什么?谢谢!

Answers:


13

1.基本闹钟功能

进入暂停模式

对于此解决方案,您需要通过运行以下脚本进入暂停模式。它使计算机进入挂起模式,并在您(在脚本中)定义的(时钟)时间唤醒您。播放您的歌曲。

当然,您可以简单地手动运行脚本来使用它,但是通过设置为的组合键使其更方便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文件,则需要安装 gksusudo apt-get install gksu。在这种情况下,运行脚本的命令是gksu /path/to/wakeup.py,并且每次运行脚本时都会提示您输入密码。

现在,您可以使用按键组合进入暂停模式,并且您会被唤醒的歌曲唤醒。

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()

说明

rtcake

这两个脚本围绕书面rtcwake命令,解释在这里。该命令可用于使计算机进入挂起状态并在定义的时间后唤醒(也可以在唤醒后运行命令)。使用此-m disk选项是因为OP提到他的计算机不支持BIOS中的“暂停到RAM”功能。另请参阅man rtcwake

停止功能

停止功能的功能是在歌曲播放时每秒测量一次空闲时间,并记住上一个空闲时间。如果最后一个空闲时间超过当前时间,则意味着发生了击键或鼠标事件,并且Rhythmbox被杀死。


我建议新手不要触摸sudoers文件。
RegarBoy

他们实际上需要@developer,但是应该给出警告。如果我到家(目前在手机上),将进行编辑。
Jacob Vlijm

@developer and done ....
Jacob Vlijm

1
不是sudo visudo /etc/sudoers吗?
UniversallyUniqueID

@BharadwajRaju不,请尝试:) vi只是编辑器。
Jacob Vlijm'6

2

如果您可以将笔记本电脑通过电缆连接到Internet,则可以尝试使用其他计算机或智能手机向其发送“魔术包”并将其唤醒。

查找“局域网唤醒”(WOL)。


不,这只是wifi。
Chelios 2012年

1

我在运行Jacob的python脚本时遇到了麻烦,所以我用bash重写了它。只需下载它,使其可执行并相应地编辑变量即可。

有两件事:通过设置闹钟时间date -d。来自man date以下示例:

  • “ Sun,2004年2月29日16:21:42 -0800”
  • “ 2004-02-29 16:21:42”
  • “下个星期四”

醒来后,我会vlc -L循环播放一些音乐。如果您的路径是一个文件夹,它将尝试在其中播放文件。我就是做这个的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.