我编写的这个脚本在执行时会关闭我的系统(过一段时间)并启用屏幕保护程序。
#!/bin/bash
sudo shutdown -h +30
gnome-screensaver-command -a
这个脚本主要有两个问题。
- 它要求输入密码(我不想要)
- 执行后
sudo shutdown -h +30
其不运行gnome-screensaver-command -a
也就是说,它会激活关机但不激活屏幕保护程序
如何解决这些问题?
答案1
问题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
,请将脚本存储在安全的地方,只有您可以访问,并且您必须确定脚本的内容。
答案2
如果在 shell 脚本的两行中分别运行两个命令,则第二个命令仅在第一个命令完成后才会运行。为了避免这种情况,您需要&
在第一个命令的末尾添加一个,使其在后台运行:
#!/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