스크립트에서 수면을 방지


13

명령 행 또는 cygwin에서 프로그램을 실행하는 동안 Windows가 절전 모드로 전환되는 것을 방지 할 수있는 방법이 있습니까? 이상적으로, 나는 다음과 같은 것을 사용할 수 있기를 바라고 있습니다.

nosleep myscript.sh

배경

때로는 수동 백업이나 대용량 파일 전송과 같이 오래 실행되는 작업을 시작했는데 이러한 작업이 완료되기 전에 Windows가 절전 모드로 전환되는 경우가 종종 있습니다. 명령을 시작하고 명령이 실행되는 동안 절전 모드를 방지하고 싶지만 명령이 완료되면 자동으로 다시 작동하도록하고 싶습니다.

답변:


14

powercfg스크립트를 사용 하여 PC가 절전 모드가 될 때까지 대기하는 시간을 변경할 수 있습니다 .

절대 대기하지 마십시오.

powercfg -change -standby-timeout-ac 0

15 분 후에 대기 모드로 이동 :

powercfg -change -standby-timeout-ac 15

감사. powercfg와 bash 매직이 내가 필요한 것입니다.
Mr Fooz

불행히도 이전 설정이 지워지고 수동으로 복원해야합니다.
Leeroy

8

다음은 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 sleep 1:/usr/bin/nosleep: line 31: sleep 1 command not found
Nippey

1
@Nippey, 그것은 실제로이어야 "$@"합니다. "$*"모든 인수를 연결하기 때문에 잘못된 반면 $*인수를 분할 $IFS하고 빈 인수를 제거하면 잘못됩니다 .
sch

이렇게 하면 Ctrl-C가 발생하더라도 전원 구성표를 깔끔하게 복원 할 수 있지만 설정을 영구적으로 변경하지 않고 스크립트가 지속되는 동안 컴퓨터를 깨우는 전원 요청을 만드는 것이 훨씬 더 중요합니다. 그러나 그렇게하는 깨끗하고 쉬운 방법이 없으므로 상태를 관리하는 것 같습니다. 그러나 숨겨진 미디어 플레이어가 침묵을 재생하는 것은 더럽지 만 쉬운 방법입니다. AutoHotkey에서는 기본 Windows 사운드 (예 : 휴대용 스크립트)를 사용하여 벗어날 수도 있습니다. Loop { SoundPlay, %A_WinDir%\Media\ding.wav }, wait논쟁 없이 .
Leeroy

2

nosleepCygwin 에는 이러한 명령이 있습니다. nosleep패키지를 설치 하고 다음으로 실행하십시오.

nosleep myscript.sh

2011 년 Andrew E. Schulman이 작성 함. https://cygwin.com/ml/cygwin/2011-09/msg00151.html 참조

Launchpad 의 소스 입니다 . 그것은 사용하여 SetThreadExecutionState()별도의 전원 구성표를 만들지 않습니다, (불면증 이미 언급 한 것처럼).

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 <cygwin@cygwin.com>.

사용자가 요청한 경우 (노트북 덮개를 닫을 때와 같이) 시스템이 절전 모드로 전환되지 않고 유휴 상태 에서 시스템이 자동으로 절전 모드로 전환되지 않습니다.


2

에서 제안 이 답변 관련 질문에 @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

거꾸로 종료 또는 다시 시작하면 지워집니다. 이제 원래 전원 설정 저장 및 복원에 대해 걱정할 필요가 없습니다 👍

또한 모니터가 절전 모드로 전환되는 것을 방지하지만 스크립트의 명령으로이를 수행 할 수 있습니다. 단순하지만 타사 솔루션 : NirCmd nircmd monitor off 또는 AutoHotkey SendMessage, 0x112, 0xF170, 2,, Program Manager 내장 기능은 powercfg /requestsoverride process PresentationSettings.exe display작동하지 않습니다.


1

불면증 은 창문이 잠들지 않게하지만 명령 줄 도구는 아니므로 harrymc 명령이 포함 된 스크립트가 더 나은 솔루션입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.