在bash脚本中运行shutdown命令

时间:2019-03-15 14:37:36

标签: bash root sudo shutdown notify-send

我试图制作一个可执行文件(bash脚本)来向我显示通知,并在找不到进程时关闭计算机。

我将脚本作为启动应用程序运行,并且在此脚本中使用notify-sendshutdown命令。

问题是:
(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)。

1 个答案:

答案 0 :(得分:0)

我认为它在sudoers中缺少关闭的条目。请在 /etc/sudoers.d 下创建文件 sudo ,并输入以下内容:

[YOURUSER] ALL = (ALL) NOPASSWD: /sbin/shutdown

用您的用户帐户替换[YOURUSER]!