kodlarda uykuyu önle


13

Komut satırında veya cygwin ile bir program çalıştırırken Windows'un uyku moduna geçmesini önlemenin bir yolu var mı? İdeal olarak, aşağıdaki gibi kullanılabilecek bir şey umuyorum:

nosleep myscript.sh

Arka fon

Bazen manuel yedekleme veya büyük dosya aktarımları gibi uzun süren işlere başladım ve Windows'un bu bitmeden önce sık sık uyuduğunu gördüm. Komut çalışırken komutu başlatmak ve uyku modunu önlemek istiyorum, ancak komut tamamlandığında otomatik olarak tekrar çalışmasını istiyorum.

Yanıtlar:


14

powercfgBir komut dosyasında, bilgisayarın uyku moduna geçene kadar bekleyeceği süreyi değiştirmek için kullanabilirsiniz :

Asla bekleme durumuna geçme:

powercfg -change -standby-timeout-ac 0

15 dakika içinde bekleme moduna geçin:

powercfg -change -standby-timeout-ac 15

Teşekkürler. powercfg artı bazı bash büyüsü tam ihtiyacım olan şey.
Bay Fooz

Ne yazık ki bu önceki ayarı siler ve manuel olarak geri yüklemeniz gerekir.
Leeroy

8

İşte harrymc'in cevabına göre çırptığım bir bash betiği.

#!/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'de, alıntıları kaldırmak zorunda kaldım: ' "$*"dan' $*. Aksi takdirde, birden fazla argüman verirken aşağıdakileri aldım (örneğin $nosleep sleep 1:/usr/bin/nosleep: line 31: sleep 1 command not found
Nippey

1
@Nippey, aslında öyle olmalı "$@". "$*"yanlıştır, çünkü tüm argümanları birleştirir, argümanları böldüğü ve boş olanları kaldırdığı için $*yanlıştır $IFS.
sch

Bu , Ctrl-C olsa bile güç düzeninin geri yüklenmesini sağlar, ancak daha düzenli olan, bilgisayarı herhangi bir ayarı kalıcı olarak değiştirmeden komut dosyası süresince uyanık tutan bir güç isteği oluşturmak olacaktır. Ama öyle görünüyor ki bunu yapmanın temiz ve kolay bir yolu yok, bu yüzden yönetim durumu öyle. Ancak, sessizlik oynayan gizli bir medya oynatıcı kirli ama kolay bir yol olabilir. AutoHotkey'de varsayılan bir Windows sesi (yay, taşınabilir komut dosyası) kullanarak bile kurtulabilirdim. Loop { SoundPlay, %A_WinDir%\Media\ding.wav }, waittartışmasız.
Leeroy

2

Artık nosleepCygwin'de böyle bir komut var. nosleepPaketi kur ve şu şekilde çalıştır

nosleep myscript.sh

2011 yılında Andrew E. Schulman tarafından yazılmıştır. Bkz. Https://cygwin.com/ml/cygwin/2011-09/msg00151.html

Launchpad'deki kaynak . Kullanır SetThreadExecutionState()(daha önce sözü edilen Uykusuzluk gibi), ayrı bir güç düzeni oluşturmaz.

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

Kullanıcı tarafından istendiğinde sistemin uyku durumuna geçmesini değil, sistemin otomatik olarak boşta uykuya geçmesini önlediğini unutmayın (dizüstü bilgisayar kapağını kapatırken olduğu gibi).


2

@LorenzCK tarafından ilgili bir soruya bu yanıttan öneri :

Windows Mobility Center'dan Sunum Modunu kullanma (varsa)

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

powercfg -requestsKomut isteminde kontrol edin . Çıktı gerekir:

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

Upside, kapatma veya yeniden başlatma sırasında temizlenir. Artık orijinal güç ayarlarını saklama ve geri yükleme konusunda endişelenmenize gerek yok 👍

Ayrıca monitörlerin uyku moduna geçmesini önler, ancak bunu komut dosyanızdaki bir komutla yapabilirsiniz. Basit ama üçüncü parti çözümleri: NirCmd nircmd monitor off veya AutoHotkey SendMessage, 0x112, 0xF170, 2,, Program Manager yerleşik powercfg /requestsoverride process PresentationSettings.exe displayolsa çalışmaz.


1

Uykusuzluk pencerelerinizin uykuya dalmasını önler, ancak bu bir komut satırı aracı değildir, bu yüzden harrymc komutlarına sahip komut dosyanız daha iyi çözümlerdir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.