关机、暂停需要身份验证(安排在以下时间)

关机、暂停需要身份验证(安排在以下时间)

我想使用以下方式暂停我的笔记本电脑at:

echo "systemctl suspend" | at now + 5 minutes

没有发生暂停,而是我找到了一封来自at以下位置的邮件/var/spool/mail/me

Failed to set wall message, ignoring: Interactive authentication required.
Failed to suspend system via logind: Interactive authentication required.
Failed to start suspend.target: Interactive authentication required.
See system logs and 'systemctl status suspend.target' for details.

好的,运行logind时需要身份验证。这很有趣,因为当我直接运行时,没有,不需要身份验证并且机器进入暂停状态。atsystemctl suspendsystemctl suspendat

我已确保使用 执行的命令at由与直接使用 运行的命令相同的非 root 用户运行echo "echo $(who) > who.txt" | at now

怀疑需要身份验证,因为它通过(这是 bash 的别名)at运行命令,我在启动后执行: 挂起立即发生,无需身份验证,表明嵌套 shell 不是挂起失败的原因。/bin/shsystemctl suspend/bin/shat

echo "reboot" | at now在执行和时,我收到相同的行为和非常相似的邮件echo "shutdown now" | at now

我的问题是:如何logind确定它at试图挂起、重新启动或关闭机器,以及如何判断logind它应该允许at在未经身份验证的情况下执行这些命令?


我使用的是 Arch Linux 4.18.1,at版本为 3.1.19。

答案1

大概运行的命令at是在不同的环境中,无法访问您的 tty 设备和 dbus 设置等。

Systemd 有自己的at命令版本。您可以使用它在似乎可以执行其他 systemd 命令的环境中运行命令。因此使用等效命令:

systemd-run --user --on-active=5min /bin/systemctl suspend

为了完美准确地实现 5 分钟的等待时间,您需要添加选项--timer-property=AccuracySec=1

相关内容