一時停止モードからの目覚まし時計


9

朝、ラップトップをサスペンドモードからウェイクアップし、mp3ファイルを使用してウェイクアップするように警告します。どうすればいいのですか?

apmsleepを試しましたが、私のPCのBIOSに「RAMへのサスペンド」機能がないため、動作しません。私に何ができる?ありがとう!

回答:


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

説明

rtcwake

ここでrtcwake説明するように、両方のスクリプトはコマンドを中心に記述されています。このコマンドを使用して、定義した時間後にコンピューターをサスペンドおよびウェイクアップすることができます(オプションで、ウェイクアップ後にコマンドを実行できます)。-m diskOPが彼のコンピューターはBIOSの「RAMへのサスペンド」機能をサポートしていないため、このオプションが使用されます。もご覧くださいman rtcwake

ストップ機能

停止機能は、曲の再生中に毎秒アイドル時間を測定し、最後のアイドル時間を記憶する機能によって機能します。IF最後のアイドル時間が現在の1を超えて、それがキーストロークやマウスイベントが発生した、とのRhythmboxが殺されることを意味します。


私は初心者がsudoersファイルに触れないことをお勧めします。
RegarBoy

@開発者は実際には必要がありますが、警告を与える必要があります。帰宅したら編集します(現在はモバイル)。
Jacob Vlijm

@developer and done ....
Jacob Vlijm

1
そうじゃないのsudo visudo /etc/sudoers
UniversallyUniqueID

@BharadwajRajuいいえ、試してみてください:) viは単なるエディターです。
Jacob Vlijm 2016年

2

ラップトップをケーブルでインターネットに接続できる場合は、他のコンピューターまたはスマートフォンを使用して「マジックパケット」を送信し、ウェイクアップすることができます。

「ウェイクオンラン」(WOL)を探します。


いいえ、Wi-Fiのみです。
Chelios

1

Jacobのpythonスクリプトの実行に問題があったため、bashで書き直しました。ダウンロードして実行可能にし、それに応じて変数を編集します。

いくつかのこと:アラーム時刻はを介して設定されdate -dます。からの例man date

  • 「2004年2月29日16:21:42 -0800 "
  • 「2004-02-29 16:21:42」
  • "次の木曜日"

起きた後、私vlc -Lはループでいくつかの音楽を再生するために使用します。パスがフォルダの場合、その中のファイルを再生しようとします。それが私がすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.