コマンドラインまたはcygwinでプログラムを実行しているときにWindowsがスリープモードにならないようにする方法はありますか?理想的には、次のように使用できるものを期待しています。
nosleep myscript.sh
背景
手動バックアップや大きなファイル転送などの長時間実行ジョブを開始することがありますが、これらが完了する前にWindowsがスリープ状態になることがよくあります。コマンドの実行中にコマンドを起動してスリープモードを防止できるようにしたいのですが、コマンドが完了すると自動的に再び機能するようにします。
スクリプトでpowercfg
を使用して、PCがスリープ状態になるまで待機する時間を変更できます。
スタンバイにしないでください:
powercfg -change -standby-timeout-ac 0
15分でスタンバイになります:
powercfg -change -standby-timeout-ac 15
これは、harrymcの応答に基づいて作成したbashスクリプトです。
#!/usr/bin/bash
# NAME
# nosleep - prevent sleep and hibernation while running a command
#
# SYNOPSIS
# nosleep COMMAND [ARG]...
# Make sure the power scheme gets restored, even if Ctrl-C happens
cleanup()
{
powercfg -setactive $SCHEME_GUID
powercfg -delete $TMP_GUID
return $?
}
trap cleanup SIGINT
# Disable sleep and hibernate timers
export SCHEME_GUID=`powercfg -getactivescheme | gawk '{ print $4 }'`
export TMP_GUID=`powercfg -duplicatescheme $SCHEME_GUID | gawk '{ print $4 }'`
if [[ -z $TMP_GUID ]]; then
echo "ERROR: could not duplicate the current power scheme"
exit 254
fi
powercfg -setactive $TMP_GUID
powercfg -changename $TMP_GUID nosleep "temporary scheme for disabling sleep and hibernation"
powercfg -change -standby-timeout-ac 0
powercfg -change -hibernate-timeout-ac 0
# Run the command
"$@"
powercfg -setactive $SCHEME_GUID
powercfg -delete $TMP_GUID
Cygwinにはそのような nosleep
コマンドがあります。 nosleep
パッケージをインストールして、次のように実行するだけです。
_nosleep myscript.sh
_
Andrew E. Schulmanによって2011年に作成。参照 https://cygwin.com/ml/cygwin/2011-09/msg00151.html
ソース Launchpad上 。 SetThreadExecutionState()
を使用し(すでに述べたInsomniaのように)、個別の電源スキームを作成しません。
_Usage: nosleep [OPTION...] command [args]
Run a command while inhibiting computer sleep or hibernation.
-a, --awaymode Force away mode instead of sleep mode
-d, --display Keep the display on
-i, --ifacpower Following options only apply if AC power is on
-?, --help give this help list
--usage give a short usage message
-V, --version print program version
Report bugs to the Cygwin mailing list <[email protected]>.
_
システムが自動的にアイドル状態でスリープ状態になるのを防ぎ、ユーザーが要求した場合(ラップトップを閉じるときなど)、システムがスリープ状態になるのではなく、蓋)。
この回答 からの提案@LorenzCKによる関連する質問:
Windowsモビリティセンターのプレゼンテーションモードを使用する(利用可能な場合)
%WINDIR%\System32\PresentationSettings.exe "/start"
確認する powercfg -requests
コマンドプロンプトで。出力する必要があります:
DISPLAY:
[PROCESS] \Device\HarddiskVolume2\Windows\System32\PresentationSettings.exe
SYSTEM:
[PROCESS] \Device\HarddiskVolume2\Windows\System32\PresentationSettings.exe
利点は、シャットダウンまたは再起動時にクリアされることです。これで、元の電源設定の保存と復元について心配する必要はありません????
また、モニターがスリープ状態になるのを防ぎますが、スクリプト内のコマンドを使用してスリープ状態にすることができます。シンプルだがサードパーティのソリューション: NirCmdnircmd monitor off
または AutoHotkeySendMessage, 0x112, 0xF170, 2,, Program Manager
組み込みpowercfg /requestsoverride process PresentationSettings.exe display
しかし動作しません。
不眠症 ウィンドウがスリープ状態になるのを防ぎますが、コマンドラインツールではないため、harrymcコマンドを使用したスクリプトの方が優れたソリューションです。