Я пытаюсь выяснить, возможно ли добавить своего рода сценарий, инициированный, прежде чем система пойдет для приостановки. Идея состоит в том, чтобы инициировать некоторый webhooks для хранения некоторой информации перед состоянием ожидания.
проблема состоит в том, что независимо от того, что рычаг мог бы существовать или к пустому экрану или к входу, приостанавливают, связанная команда или скрипт, который Вы хотите запустить прежде , всегда работали бы слишком поздно, так как это назовут после возможный сигнал.
Как всегда, который не означает, что у нас закончились опции. Если мы отключаем пустой экран по умолчанию/, приостанавливают - опции и заменяют его нашим собственным фоновым сценарием, мы можем включать команду, которую Вы хотите выполнить перед изменением состояния в процедуре.
В сценарии ниже, можно установить время простоя, после которого экран должен очистить и когда система должна войти, приостанавливают. Можно также установить команду для выполнения , прежде чем приостановят.
#!/usr/bin/env python3
import subprocess
import time
# set times for blank screen and suspend (in that order)
times = [300, 1200]
pre_command = "touch banana.txt"
# don't change anything below, *unless* changes for other distros
last_t = times[-1]
commands = ["xset dpms force off", "sudo xfce4-session-logout --suspend"]
restore = "xset dpms force on"
def gettime():
return int(int(subprocess.check_output(
"xprintidle"
).decode("utf-8").strip())/1000)
def run_command(cmd):
# made it like this, so user can conveniently set commands
subprocess.call(["/bin/bash", "-c", cmd])
def change(set_t, t1, t2):
if all([t1 <= set_t, t2 > set_t]):
if set_t == last_t:
run_command(pre_command)
run_command(commands[times.index(set_t)])
elif all([t2 < set_t, t1 >= set_t]):
run_command(restore)
return True
t1 = gettime()
while True:
time.sleep(2)
t2 = gettime()
for t in times:
if change(t, t1, t2):
break
t1 = t2
потребности сценария xprintidle:
sudo apt-get xprintidle
Копия сценарий выше в пустой файл, сохраните его как my_suspend.py
Теперь, мы должны удостовериться, что сценарий может принести компьютер в, приостановите: добавьте строку к sudoers
файл:
Выполнение от терминала:
sudo visudo
Добавляют строку:
ALL All=NOPASSWD: /usr/bin/xfce4-session-logout*
в файл.
В главном разделе сценария, набор время, после которого Вы хотите очистить экран (в секундах), время, которое Вы хотите, чтобы компьютер переключил для приостановки и команда, которую Вы хотите выполнить перед, приостановите:
# set times for blank screen and suspend (in that order)
times = [300, 1200]
pre_command = "touch banana.txt"
В примере выше, экранные пробелы после 5 минут, система приостанавливает после 20 минут. Очевидно, Вы хотите заменить pre_command
N.B. , возражают против кавычек вокруг команды! Если Ваша команда также включает смешанные кавычки, упомяните.
Тестовый прогон сценарий от терминала с командой:
python3 /path/to/my_suspend.py
, Если все хорошо работает, добавьте сценарий для Запущения Приложений (Сессия & Запуск> Автоматический запуск Приложения (вкладка)> Добавляет)
, которое сценарий был записан для Xubuntu, но только в строке:
commands = ["xset dpms force off", "sudo xfce4-session-logout --suspend"]
команда:
"sudo xfce4-session-logout --suspend"
Xubuntu-конкретный. Сценарий поэтому может легко быть адаптирован к другим дистрибутивам.