Предотвратите сон, если использование ЦП высоко

Существует ли простой способ препятствовать тому, чтобы ПК заснул, если существует высокая активность ЦП? Я должен выполнить долгие процессы в течение ночи, таким образом, я хочу, чтобы ПК не лег спать, в то время как мои процессы работают без любого пользовательского действия, но когда обработка закончена, ПК должен заснуть после тайм-аута сна.

Решение с функцией "resetSleepTimer", которую я могу вызвать из своего кода (Python идеально) также было бы приемлемо.


Разъяснение после комментариев от WinEunuuchs2Unix и Joaquín Ayuso de Paúl: к сожалению, Ваше решение работает, только если существует единственный процесс, но у меня обычно есть больше чем одно выполнение процесса с переменной продолжительностью, поэтому если один процесс закончит и повторно включит короткий тайм-аут сна, то это будет кв/см* w по другим все еще выполнение. С функцией resetSleepTimer я означаю что-то быть названным в равных интервалах для сброса приостановить таймера. Мое предыдущее (удаленное) предложение моделирования ввода данных пользователем не работало бы, потому что это также сохранит экран НА.


Править: требование, как упомянуто в комментарии OP:

Это оставит экран на всем времени? Не, что я ищу. Кроме того, будет действие на экранную заставку, также влияют на спать/приостанавливать тайм-аут?

17
задан 9 November 2019 в 07:30

3 ответа

Базирующийся от этого поток , можно отключить спящий процесс через продолжительность программы путем вызова в неактивное ингибирование через DBus:

org.freedesktop.ScreenSaver.Inhibit

Или можно периодически проверять с помощью ping-запросов его:

org.freedesktop.ScreenSaver.SimulateUserActivity

, Если необходимо предотвратить компьютер для сна вообще, можно отключить временно (снова через dBus) поведение и затем восстановить его. Это ударит экранную заставку, но не позволит компьютерному сну:

  $ sudo -u gdm dbus-launch gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
10
ответ дан 23 November 2019 в 02:25

Узнайте свои текущие настройки сна с этим:

$ gsettings list-recursively | grep sleep
org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'suspend'
org.gnome.settings-daemon.plugins.power button-sleep 'suspend'
org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 0
org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'suspend'

Моя система установлена никогда не заснуть, но, если бы Ваш установлена в течение 5 минут (300 секунд), она была бы похожа на это:

org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 300

, Когда Ваша программа Python запускается, дают команду:

gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0

, Когда Ваши концы программы Python восстанавливают предыдущие настройки:

gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 300
<час>

Ваши настройки экранной заставки время от времени связываются:

$ gsettings list-recursively | grep top.screensaver
org.gnome.desktop.screensaver picture-opacity 100
org.gnome.desktop.screensaver logout-enabled false
org.gnome.desktop.screensaver lock-enabled false
org.gnome.desktop.screensaver logout-delay uint32 7200
org.gnome.desktop.screensaver embedded-keyboard-enabled false
org.gnome.desktop.screensaver primary-color '#023c88'
org.gnome.desktop.screensaver idle-activation-enabled true
org.gnome.desktop.screensaver secondary-color '#5789ca'
org.gnome.desktop.screensaver logout-command ''
org.gnome.desktop.screensaver color-shading-type 'solid'
org.gnome.desktop.screensaver embedded-keyboard-command ''
org.gnome.desktop.screensaver show-notifications false
org.gnome.desktop.screensaver picture-options 'zoom'
org.gnome.desktop.screensaver lock-delay uint32 0
org.gnome.desktop.screensaver show-full-name-in-top-bar true
org.gnome.desktop.screensaver picture-uri 'file:///usr/share/backgrounds/gnome/adwaita-lock.jpg'
org.gnome.desktop.screensaver status-message-enabled true
org.gnome.desktop.screensaver ubuntu-lock-on-suspend false
org.gnome.desktop.screensaver user-switch-enabled true
<час>

сценарий Редактирования на основе системного действия

OP разъяснила потребности. Несколько заданий могут работать. Первый, который концы повторно активировали бы сон, который будет препятствовать тому, чтобы остающиеся задания завершились.

А уменьшил масштаб версии , этот сценарий необходим:

movie.sh status display 2.png

  • потускнение Удаления / прояснение мониторов
  • Удаляет список выборочных мониторов для обработки
  • , Удаляют проверки на клавиатуру / неактивная мышь (который гном использует для активации сна)
  • , Решительно уменьшают сводный экран статистики или удаляют все вместе

Затем, код с помощью xprintidle (клавиатура и мышь неиспользованное время) должен дергаться и заменяться:

$ uptime
 08:08:54 up 9 days,  3:38,  1 user,  load average: 0.30, 0.47, 0.71

среднее число загрузки печатает в течение 1 минуты, 5 минут и 15 минут. Однажды 5 минут или 15 минут ниже порога, просто приостановите систему.

<час>

Разработка, тестирующая

, Чтобы начать тестировать, выполняет это в терминале теперь:

$ while true ; do uptime; sleep 300; done
 08:20:36 up 9 days,  3:50,  1 user,  load average: 0.36, 0.50, 0.64

Каждые пять минут среднее число загрузки будет отображаться для давания Вам общее представление о том, где Ваши пороги должны быть должны приостановить.

<час>

использование Отслеживания

После программы было реализовано, можно хотеть контролировать использование. Для отслеживания приостановить действия (экономия электроэнергии?) этот сценарий может использоваться:

$ suspendtime
Oct 31 05:55:19 to Oct 31 16:54:26 lasting 39,547 seconds
 (... SNIP ...)
Nov 08 07:24:31 to Nov 08 09:28:44 lasting 7,453 seconds
Nov 08 23:26:19 to Nov 09 07:38:50 lasting 29,551 seconds

Linux uptime 791,119 seconds (9 days, 3 hours, 45 minutes, 19 seconds)
18 Suspends 494,551 seconds (5 days, 17 hours, 22 minutes, 31 seconds)
Real uptime 296,568 seconds (3 days, 10 hours, 22 minutes, 48 seconds)
5
ответ дан 23 November 2019 в 02:25

Вы можете использовать программу Keep.Awake python3, чтобы делать именно то, что вам нужно. Это решит вашу проблему, и это просто работает!

Он будет учитывать загрузку процессора, активность пользователей и сетевой трафик (логическое ИЛИ для всех трех).

Вы можете получить его отсюда: https://launchpad.net/keep.awake

Он написан на python3, если вы хотите посмотреть, как он работает. Теперь поддерживается до Ubuntu 20.04

Пример использования взят с веб-страницы:

Для запуска в качестве фоновой службы и установки 15 минут (900 сек) в качестве времени простоя активности пользователя, прежде чем он определит, что пользователь бездействует:

nohup ./keepawake.py -u 900 -r > /dev/null 2>&1 &

Чтобы запустить фоновую службу и установить минимальную загрузку ЦП на 13%:

nohup ./keepawake.py -c 13 -r > /dev/null 2>&1 &

Чтобы запустить как фоновую службу и установить минимальный сетевой трафик на 5 КБ (5120 байт):

nohup ./keepawake.py -s 5120 -r > /dev/null 2>&1 &

Чтобы запустить фоновую службу и установить расписание на спящий/приостановленный режим через 1 час (это значение устанавливается только в том случае, если пользовательская активность, ЦП и сетевой трафик определяются как бездействующие):

nohup ./keepawake.py -w 3600 -r > /dev/null 2>&1 &

Чтобы запустить все указанные выше настройки (сеть, ЦП, бездействие пользователя, расписание сна) за один раз и установите путь к файлу журнала «/home/$USER/sleep/log/Keep.Awake/» с подробным выводом:

nohup ./keepawake.py -s 5120 -c 13 -u 900 -w 3600 -l /home/$USER/sleep/log/Keep.Awake/ -v Detail -r > /dev/null 2>&1 &
0
ответ дан 27 April 2020 в 14:52

Другие вопросы по тегам:

Похожие вопросы: