У меня проблема, потому что мои друзья, с которыми я живу, часто забывают выключить наш компьютер. Я не знаю, как использовать решение, чтобы притвориться. Установлена система Ubuntu.
Я ищу решение, по которому пользователь будет вынужден нажимать и подтверждать (раз в час), что кто-то использует компьютер. Если он этого не делает, компьютер автоматически отключается.
Есть ли решение этой проблемы?
Это рабочий сценарий того, что вы хотите сделать:
#!/bin/bash
while true; do
sleep 59m
zenity --question --text "Are you using the pc (click anything)?"&
zenity_id=$!
#the user has 1 minute to answer, otherwise PC will shut down
sleep 1m
if kill $zenity_id 2> /dev/null; then
#zenity was still running, shutdown the pc
dbus-send --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
fi
done
Каждый раз в час отображается всплывающее окно с вопросом «Вы еще здесь?», Если пользователь нажимает на что-то, то он не выключается еще один час (через час снова появляется всплывающее окно), но если прошло более 1 минуты без взаимодействия с диалоговым окном, компьютер автоматически выключается. Чтобы запустить это при запуске, создайте файл с вышеуказанным кодом и сделайте его исполняемым (щелкните правой кнопкой мыши -> свойства -> разрешения -> разрешить запуск файла как программы) и нажмите кнопку питания в правом верхнем углу экрана, выберите автозагрузку приложения и добавьте этот скрипт.
Один из способов сделать это - эмулировать нажатие кнопки питания. Затем появится следующее диалоговое окно и выключит компьютер через 60 секунд.
Для этого используйте acpi_fakekey 116
, который «нажмет» кнопку выключения (номер 116). (По крайней мере 116 - моя кнопка выключения. Если она не работает на вашем компьютере, попробуйте установить evtest
и запустить ее, пока вы нажимаете кнопку)
Чтобы автоматизировать это каждый час, добавьте его в корневой каталог root следующим образом:
sudo crontab -e
и добавьте следующую строку:
0 * * * * /usr/bin/acpi_fakekey 116
Это будет нажимать кнопку на 0-й минуте каждого часа каждого дня каждой недели каждой недели. месяц.
Кажется утомительным заставлять кого-то нажимать кнопку каждый указанный интервал.
Вы можете позволить gnome-screensaver работать на вас и проверить, как долго он работает.
В сценарии вы можете сделать что-то вроде следующего:
#!/bin/bash
pidof X || exit #not running X!
export DISPLAY=":0" # use current display
DURATION="`gnome-screensaver-command -t | awk '{print $7}'`"
if [ $DURATION -gt 3600 ]; then #idle for an hour
shutdown -h now
fi
Это ОЧЕНЬ базовый пример, который может расширить любой. Поместите его в задание cron или запустите его в режиме демона с помощью вызовов while / sleep.
Я бы не использовал его в точности как есть, а просто для иллюстрации метода. Это делает предположение, что мы используем gnome-screensaver. xscreensaver имеет похожие вызовы.
Вы можете написать простой скрипт , используя команду shutdown 0
после приглашения.
Я должен добавить, что вы можете использовать команду sleep в цикле, чтобы реализовать ожидание.