web-dev-qa-db-ja.com

CPU使用率が高い場合にスリープを防止する

高いCPUアクティビティがある場合にPCがスリープ状態にならないようにする簡単な方法はありますか?長いプロセスを一晩実行する必要があるので、ユーザーアクティビティなしでプロセスの実行中にPCを稼働させておきたいのですが、処理が完了すると、PCはスリープタイムアウト後にスリープ状態になるはずです。

私のコード(理想的にはPython)から呼び出すことができる「resetSleepTimer」関数を使用したソリューションも受け入れられます。


A clarification WinEunuuchs2UnixとJoaquínAyuso dePaúlからのコメントに続く:残念ながら、ソリューションは単一のプロセスがある場合にのみ機能しますが、通常は複数のプロセスが実行され、可変の継続時間があるため、1つのプロセスが終了します。短いスリープタイムアウトを再度有効にすると、まだ実行中の他のものよりもsc * @ wになります。 resetSleepTimer関数の場合、一時停止タイマーをリセットするために定期的に呼び出されるものを意味します。ユーザー入力をシミュレートするという以前の(削除された)提案は、画面もオンにしておくため機能しません。


編集:OPのコメントで言及されている要件:

これはずっと画面から離れますか?私が探しているものではありません。また、スクリーンセーバーを操作すると、スリープ/サスペンドのタイムアウトにも影響しますか?

17
thebucc

これに基づいて スレッド を呼び出すと、プログラムの期間中、スリーププロセスを無効にできます DBus経由のアイドル禁止

org.freedesktop.ScreenSaver.Inhibit

または、定期的にpingすることもできます。

org.freedesktop.ScreenSaver.SimulateUserActivity

コンピュータがまったくスリープしないようにする必要がある場合は、一時的に(ここでもdBusで)動作を無効にしてから、元に戻すことができます。これはスクリーンセーバーを起動しますが、コンピューターをスリープさせません。

  $ Sudo -u gdm dbus-launch gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'

これであなたの現在の睡眠設定を発見してください:

$ gsettings list-recursively | grep sleep
org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend'
org.gnome.settings-daemon.plugins.power button-sleep 'suspend'
org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 0
org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'suspend'

私のシステムはスリープ状態にならないように設定されていますが、システムが5分(300秒)に設定されている場合、次のようになります。

org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 300

pythonプログラムが起動したら、次のコマンドを発行します。

gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0

pythonプログラムが終了したら、以前の設定を復元します:

gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 300

スクリーンセーバーの設定は、時々関連しています。

$ gsettings list-recursively | grep top.screensaver
org.gnome.desktop.screensaver picture-opacity 100
org.gnome.desktop.screensaver logout-enabled false
org.gnome.desktop.screensaver lock-enabled false
org.gnome.desktop.screensaver logout-delay uint32 7200
org.gnome.desktop.screensaver embedded-keyboard-enabled false
org.gnome.desktop.screensaver primary-color '#023c88'
org.gnome.desktop.screensaver idle-activation-enabled true
org.gnome.desktop.screensaver secondary-color '#5789ca'
org.gnome.desktop.screensaver logout-command ''
org.gnome.desktop.screensaver color-shading-type 'solid'
org.gnome.desktop.screensaver embedded-keyboard-command ''
org.gnome.desktop.screensaver show-notifications false
org.gnome.desktop.screensaver picture-options 'zoom'
org.gnome.desktop.screensaver lock-delay uint32 0
org.gnome.desktop.screensaver show-full-name-in-top-bar true
org.gnome.desktop.screensaver picture-uri 'file:///usr/share/backgrounds/gnome/adwaita-lock.jpg'
org.gnome.desktop.screensaver status-message-enabled true
org.gnome.desktop.screensaver ubuntu-lock-on-suspend false
org.gnome.desktop.screensaver user-switch-enabled true

システムアクティビティに基づいてスクリプトを編集する

OPはニーズを明確にしました。複数のジョブを実行できます。最初に終了するとスリープが再びアクティブになり、残りのジョブが完了できなくなります。

このスクリプト の縮小版が必要です:

movie.sh status display 2.png

  • モニターの調光/明るさを取り除く
  • 処理する選択的モニターのリストを削除します
  • キーボード/マウスのアイドル状態のチェックを削除(gnomeがスリープのアクティブ化に使用)
  • 統計サマリー画面を大幅に削減するか、すべてまとめて削除します

次に、xprintidle(キーボードとマウスの未使用時間)を使用するコードをヤンクアウトして、次のものと置き換える必要があります。

$ uptime
 08:08:54 up 9 days,  3:38,  1 user,  load average: 0.30, 0.47, 0.71

負荷平均は、1分間、5分間、15分間印刷されます。 5分または15分がしきい値を下回ると、システムを一時停止します。


開発テスト

テストを開始するには、ターミナルでこれを実行します。

$ while true ; do uptime; sleep 300; done
 08:20:36 up 9 days,  3:50,  1 user,  load average: 0.36, 0.50, 0.64

5分ごとに負荷平均が表示され、しきい値を一時停止する場所がわかります。


使用状況の追跡

プログラムが実装された後、使用状況を監査することができます。サスペンドアクティビティ(省電力?) を追跡するには、このスクリプト を使用できます。

$ suspendtime
Oct 31 05:55:19 to Oct 31 16:54:26 lasting 39,547 seconds
 (... SNIP ...)
Nov 08 07:24:31 to Nov 08 09:28:44 lasting 7,453 seconds
Nov 08 23:26:19 to Nov 09 07:38:50 lasting 29,551 seconds

Linux uptime 791,119 seconds (9 days, 3 hours, 45 minutes, 19 seconds)
18 Suspends 494,551 seconds (5 days, 17 hours, 22 minutes, 31 seconds)
Real uptime 296,568 seconds (3 days, 10 hours, 22 minutes, 48 seconds)
5