Существует ли простой способ препятствовать тому, чтобы ПК заснул, если существует высокая активность ЦП? Я должен выполнить долгие процессы в течение ночи, таким образом, я хочу, чтобы ПК не лег спать, в то время как мои процессы работают без любого пользовательского действия, но когда обработка закончена, ПК должен заснуть после тайм-аута сна.
Решение с функцией "resetSleepTimer", которую я могу вызвать из своего кода (Python идеально) также было бы приемлемо.
Разъяснение после комментариев от WinEunuuchs2Unix и Joaquín Ayuso de Paúl: к сожалению, Ваше решение работает, только если существует единственный процесс, но у меня обычно есть больше чем одно выполнение процесса с переменной продолжительностью, поэтому если один процесс закончит и повторно включит короткий тайм-аут сна, то это будет кв/см* w по другим все еще выполнение. С функцией resetSleepTimer я означаю что-то быть названным в равных интервалах для сброса приостановить таймера. Мое предыдущее (удаленное) предложение моделирования ввода данных пользователем не работало бы, потому что это также сохранит экран НА.
Править: требование, как упомянуто в комментарии OP:
Это оставит экран на всем времени? Не, что я ищу. Кроме того, будет действие на экранную заставку, также влияют на спать/приостанавливать тайм-аут?
Базирующийся от этого поток , можно отключить спящий процесс через продолжительность программы путем вызова в неактивное ингибирование через 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'
Узнайте свои текущие настройки сна с этим:
$ 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 разъяснила потребности. Несколько заданий могут работать. Первый, который концы повторно активировали бы сон, который будет препятствовать тому, чтобы остающиеся задания завершились.
А уменьшил масштаб версии , этот сценарий необходим:
Затем, код с помощью 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)
Вы можете использовать программу 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 &