web-dev-qa-db-ja.com

タイムアウト後にふたを閉じて一時停止

Ubuntu 16.04、デスクトップ環境としてGnome、ログインマネージャーとしてLightDMを備えたラップトップを使用しています。

私がやりたいのは、蓋が30秒間閉じられた後、コンピュータを一時停止することです。これは可能ですか?

2
tjespe

蓋を閉じてから30秒後に一時停止に切り替えます


デフォルトのふたを閉じるアクションを無効にする

特定の時間を設定するには、コンピューターをサスペンドに切り替える前に、ふたを閉じるためのデフォルトのアクションを無効にする必要があります。これは、次のコマンドで実行できます。

gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action "nothing"

そして

gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action "nothing"

ふたを閉じる際のカスタムアクション

続いて、一時停止前の30秒の中断を含めるために、蓋を閉じる際の代替アクションを設定する必要があります。 canそれらを既存のイベントにフックします。

問題は、その利点が、必要となるより複雑なセットアップに影響するかどうかです。以下のようなスクリプトバージョンでは、10を実行したとしても、プロセッサとメモリの両方から実質的にゼロを消費します。

スクリプトオプションの利点は、簡単に元に戻せることです。単にそれをもう実行せずに、元の(または異なる)設定を復元してください。

スクリプト

#!/usr/bin/env python3
import time
import subprocess

# set delay time below (seconds)
delay = 30
# set path to lid status file
f = "/proc/acpi/button/lid/LID/state"
# --- set close command below 
close_command = ["systemctl", "suspend"]

def get_state():
    return "open" in open(f).read()

state1 = get_state()

while True:
    time.sleep(3)
    state2 = get_state()
    if state2 != state1:
        t = 0
        while not get_state():
            time.sleep(1); t = t+1
            if t > delay:
                subprocess.Popen(close_command)
                break
    state1 = state2

使い方

  1. 前述のように、最初にデフォルトのふたクローズアクションを無効にします。

    gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action "nothing"
    

    そして

    gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action "nothing"
    
  2. スクリプトを空のファイルにコピーし、delay_lidsuspend.pyとして保存します

  3. スクリプトのヘッドセクションでは、いくつかのデフォルト値とパスが設定されています。ほとんどの場合、何も変更する必要はありません。

    # set delay time below (seconds)
    delay = 30
    # set path to lid status file
    f = "/proc/acpi/button/lid/LID/state"
    # --- set close command below 
    close_command = ["systemctl", "suspend"]
    

    私はあなたのふたの状態ファイル( "/ proc/acpi/button/lid/LID/state")へのパスがすべてのラップトップで同じかどうかはわかりません。次のコマンドでテストします。

    cat /proc/acpi/button/lid/LID/state
    
  4. 端末から実行して、スクリプトをテスト実行します。

    python3 /path/to/delay_lidsuspend.py
    

    ふたを閉じて、意図したとおりに機能するかどうかを確認します(ここでは完全に機能しました)。

  5. すべて正常に動作する場合は、スタートアップアプリケーションに追加します。

4
Jacob Vlijm