Запустите команду 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] своей учетной записью!

Другие вопросы по тегам