Как выполнить выключение с помощью команды таймера и заставки в скрипте
Я сделал этот сценарий, когда он будет выполнен, выключит мою систему (через некоторое время) и должен включить заставку.
#!/bin/bash
sudo shutdown -h +30
gnome-screensaver-command -a
В этом сценарии в основном две проблемы.
- Он запрашивает пароль (который я не хочу)
- После выполнения
sudo shutdown -h +30его не работаетgnome-screensaver-command -a
то есть он активирует выключение, но не заставку
Как решить эти проблемы?
2 ответа
Решение проблемы 1 и 2:
Вам нужно отредактировать свой
/etc/sudoers(sudo visudo) файл для добавления соответствующей записи для предоставления пароляsudoразрешение для пользователя, чтобы запустить этот скрипт (неshutdownкоманда):foo spamegg = (root) NOPASSWD: /path/to/script.shВот
fooэто имя пользователя,spameggэто имя хоста, замените/path/to/script.shсоответственно. Теперь запустите команду как (сделайте скрипт исполняемым):sudo /path/to/script.shОбратите внимание, что
gnome-screensaver-command -aКоманда также будет работать какroot, если вы не хотите, что вам нужно дать разрешение на парольsudo shutdownкоманда для пользователя:foo spamegg = (root) NOPASSWD: /sbin/shutdownВторая проблема связана с тем, что в вашем текущем скрипте
gnome-screensaver-command -aбудет работать только после завершенияshutdownкоманда. КакshutdownКоманда будет фактически выполнена через 30 минут, следовательно, она находится в состоянии блокировки. Чтобы решить это, вы можете положитьshutdownкоманда в фоновом режиме:shutdown -h +30 & gnome-screensaver-command -a
В двух словах, вы можете сделать скрипт следующим образом:
#!/bin/bash
shutdown -h +30 &
gnome-screensaver-command -a
Запустите его как:
sudo /path/to/script.sh
Перед использованием sudo Храните сценарий в надежном месте, он должен быть доступен только вам, и вы должны быть уверены в его содержании.
Когда у вас есть две команды в двух отдельных строках сценария оболочки, вторая будет запускаться только после завершения первой. Чтобы этого избежать, нужно добавить & до конца первой команды, которая запускается в фоновом режиме:
#!/bin/bash
sudo shutdown -h +30 &
gnome-screensaver-command -a
Что касается того, чтобы не спрашивать пароль, вам нужно будет сказать sudo что ваш пользователь имеет право запускать /sbin/shutdown без пароля Бежать sudo visudo и добавьте эту строку в /etc/sudoers:
eka ALL=NOPASSWD:/usr/sbin/shutdown
+ Изменить eka к какому бы ни было ваше имя пользователя. Сохраните файл, и теперь вы сможете запустить sudo shutdown без запроса пароля.