Как выполнить выключение с помощью команды таймера и заставки в скрипте
Я сделал этот сценарий, когда он будет выполнен, выключит мою систему (через некоторое время) и должен включить заставку.
#!/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
без запроса пароля.