ngăn chặn giấc ngủ trong kịch bản


12

Có cách nào để ngăn Windows chuyển sang chế độ ngủ trong khi chạy chương trình trên dòng lệnh hoặc với cygwin không? Lý tưởng nhất, tôi hy vọng cho một cái gì đó có thể được sử dụng như:

nosleep myscript.sh

Lý lịch

Đôi khi tôi bắt đầu các công việc dài hạn như sao lưu thủ công hoặc chuyển tập tin lớn và tôi thấy rằng Windows thường đi ngủ trước khi kết thúc. Tôi muốn có thể khởi động lệnh và ngăn chế độ ngủ trong khi lệnh đang chạy, nhưng để nó tự động hoạt động trở lại sau khi lệnh hoàn thành.

Câu trả lời:


14

Bạn có thể sử dụng powercfgtập lệnh để thay đổi thời gian PC chờ cho đến khi nó đi ngủ:

Không bao giờ đi đến chế độ chờ:

powercfg -change -standby-timeout-ac 0

Chuyển đến chế độ chờ trong 15 phút:

powercfg -change -standby-timeout-ac 15

Cảm ơn. powercfg cộng với một số phép thuật bash là những gì tôi cần.
Ông Fooz

Thật không may, điều này xóa sạch các thiết lập trước đó và bạn phải khôi phục nó bằng tay.
Leeroy

8

Đây là một kịch bản bash mà tôi đã đánh lên dựa trên phản ứng của harrymc.

#!/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

Trên Cygwin, tôi đã phải xóa các trích dẫn: Từ "$*"đến $*. $nosleep sleep 1/usr/bin/nosleep: line 31: sleep 1 command not found
Mặt

1
@Nippey, điều đó thực sự nên được "$@". "$*"là sai bởi vì nó nối tất cả các đối số, trong khi đó $*là sai khi nó phân tách các đối số trên $IFSvà loại bỏ các đối số trống.
sch

Điều này gọn gàng đảm bảo sơ đồ nguồn được khôi phục, ngay cả khi Ctrl-C xảy ra, nhưng điều thậm chí gọn gàng hơn sẽ chỉ là tạo một yêu cầu năng lượng để giữ cho máy tính luôn hoạt động trong suốt thời gian của tập lệnh, mà không thay đổi vĩnh viễn bất kỳ cài đặt nào. Nhưng có vẻ như không có cách nào dễ dàng để làm điều đó để quản lý trạng thái. Tuy nhiên, một người chơi phương tiện truyền thông ẩn chơi im lặng sẽ là một cách bẩn thỉu nhưng dễ dàng. Trong AutoHotkey, tôi thậm chí có thể thoát khỏi việc sử dụng âm thanh Windows mặc định (yay, tập lệnh di động). Loop { SoundPlay, %A_WinDir%\Media\ding.wav }, không cần waittranh luận.
Leeroy

2

Bây giờ có một nosleeplệnh như vậy trong Cygwin. Chỉ cần cài đặt nosleepgói và chạy như

nosleep myscript.sh

Được viết bởi Andrew E. Schulman vào năm 2011. Xem https://cygwin.com/ml/cygwin/2011-09/msg00151.html

Nguồn trên Launchpad . Nó sử dụng SetThreadExecutionState()(như Insomnia đã được đề cập), không tạo ra một sơ đồ năng lượng riêng biệt.

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

Lưu ý rằng nó ngăn hệ thống tự động chuyển sang chế độ ngủ, chứ không phải hệ thống chuyển sang chế độ ngủ nếu người dùng yêu cầu (như khi đóng nắp máy tính xách tay).


2

Gợi ý từ câu trả lời này của @LorenzCK về một câu hỏi liên quan:

Sử dụng Chế độ trình bày từ Trung tâm di động Windows (nếu có)

%WINDIR%\System32\PresentationSettings.exe "/start"

Kiểm tra với powercfg -requeststrong dấu nhắc lệnh. Nên đầu ra:

DISPLAY:
[PROCESS] \Device\HarddiskVolume2\Windows\System32\PresentationSettings.exe
SYSTEM:
[PROCESS] \Device\HarddiskVolume2\Windows\System32\PresentationSettings.exe

Ưu điểm là nó sẽ bị xóa khi tắt máy hoặc khởi động lại. Bây giờ bạn không phải lo lắng về việc lưu trữ và khôi phục cài đặt nguồn gốc

Nó cũng ngăn màn hình đi ngủ nhưng bạn có thể thực hiện điều đó bằng một lệnh trong tập lệnh của mình. Đơn giản nhưng bên thứ ba giải pháp: NirCmd nircmd monitor off hoặc AutoHotkey SendMessage, 0x112, 0xF170, 2,, Program Manager Việc xây dựng trong powercfg /requestsoverride process PresentationSettings.exe displaysẽ không hoạt động mặc dù.


1

Mất ngủ ngăn cửa sổ của bạn đi ngủ nhưng nó không phải là công cụ dòng lệnh, vì vậy tập lệnh của bạn với các lệnh harrymc là giải pháp tốt hơn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.