Запустите команду shutdown внутри bash-скрипта
Я пытаюсь создать исполняемый файл (скрипт bash), чтобы показать мне уведомление и выключить компьютер, когда процесс не найден.
Я буду запускать скрипт как приложение запуска, и я использую notify-send
а также shutdown
Команды в этом скрипте.
Проблема в:
(1) Если я добавлю myfolder/myscript
в список автозагрузки приложений он не может запустить shutdown
команда (для этого требуется пароль root)
(2) Если я добавлю сценарий sudo myfolder/myscript
он не может показывать уведомления через notify-send
приложение.
Я уже сделал много поисков в Интернете и попробовал эти шаги:
(1) Добавлен путь к сценарию или /sbin/shutdown
в судоры через sudo visudo
(2) Добавлено su - $USER -c "DISPLAY=$DISPLAY DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus
до notify-send
команда (я обнаружил, что некоторые пользователи сообщают, что root не может отправлять уведомления)`
Так что... никто из них не работал. Что мне не хватает? Что можно сделать для отображения уведомлений и выключения?
Вот мой код:
#!/bin/bash
#Search for a specific process and sleep if it is found (removed for space saving)
shut_time=$(date --date='10 minutes' +"%T")
notify-send -t 600000 "WARNING:
Program is not running.
Shutting down in 10 minutes (scheduled for $shut_time)."
#ALREADY TESTED BELLOW LINES (DON'T WORK)
#su - $USER -c "DISPLAY=$DISPLAY DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus notify-send -t 600000 'WARNING:
#Program is not running.
#Shutting down in 10 minutes.'"
sudo /sbin/shutdown -h +10 #Tried with our without sudo
Я использую MX Linux 18 (xfce, на основе Debian).
2 ответа
Чтобы выполнить терминал или любые команды, даже другой сценарий bash в BASH SCRIPT, все, что вам нужно сделать, это просто начать со знака доллара и заключить все команды и аргументы, если они есть, в СКОБКИ, как показано ниже.
$(COMMANDS)
В его случае будет
$(sudo shutdown 10)
Приведенный выше оператор будет ВЫПОЛНЯТЬ команду SHUTDOWN для 10-минутного выключения системы и выдавать фактическую дату и время, когда система будет автоматически выключена, точно так же, как вы запускаете эту команду в консоли. Нет необходимости превращать пользователя в sudoer или суперпользователя. Всякий раз, когда он запускает свой сценарий bash в качестве пользователя ROOT или использует SUDO, ему будет предложено ввести пароль root. Это все, что ему нужно сделать, и приведенная выше команда будет выполнена.
Кроме того, если когда-либо возникнет необходимость захватить вывод какой-либо команды или сценария, сделайте следующее.
my_shuttime=$(sudo shutdown 10)
Я думаю, что не хватает входа для выключения в sudoers. Пожалуйста, создайте файл sudo в /etc/sudoers.d и введите следующую запись:
[YOURUSER] ALL = (ALL) NOPASSWD: /sbin/shutdown
Замените [YOURUSER] своей учетной записью!