web-dev-qa-db-ja.com

スクリプトでのスリープを防ぐ

コマンドラインまたはcygwinでプログラムを実行しているときにWindowsがスリープモードにならないようにする方法はありますか?理想的には、次のように使用できるものを期待しています。

nosleep myscript.sh

背景

手動バックアップや大きなファイル転送などの長時間実行ジョブを開始することがありますが、これらが完了する前にWindowsがスリープ状態になることがよくあります。コマンドの実行中にコマンドを起動してスリープモードを防止できるようにしたいのですが、コマンドが完了すると自動的に再び機能するようにします。

13
Mr Fooz

スクリプトでpowercfgを使用して、PCがスリープ状態になるまで待機する時間を変更できます。

スタンバイにしないでください:

powercfg -change -standby-timeout-ac 0

15分でスタンバイになります:

powercfg -change -standby-timeout-ac 15
14
harrymc

これは、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
8
Mr Fooz

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]>.
_

システムが自動的にアイドル状態でスリープ状態になるのを防ぎ、ユーザーが要求した場合(ラップトップを閉じるときなど)、システムがスリープ状態になるのではなく、蓋)。

2
sch

この回答 からの提案@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しかし動作しません。

2
Leeroy

不眠症 ウィンドウがスリープ状態になるのを防ぎますが、コマンドラインツールではないため、harrymcコマンドを使用したスクリプトの方が優れたソリューションです。

1
fluxtendu