如果脚本是由 udev-rule 触发的,为什么里面的 systemctl 命令需要用 sudo 调用?

如果脚本是由 udev-rule 触发的,为什么里面的 systemctl 命令需要用 sudo 调用?

第一:系统使用的默认用户是root。
这是目前尚未更好实现的其他流程和功能所需要的
。 操作系统:Fedora 35

我有一个 udev 规则,如果插入 hdmi 设备,它会触发一个脚本:

ACTION=="change", SUBSYSTEM=="drm", ENV{DISPLAY}=":0",ENV{XAUTHORITY}="/root/.Xauthority", RUN+="/bin/bash hdmi_hotplug_detection.sh"

在脚本内部,我有一些逻辑来更改分辨率等。
另外我想重新启动正在运行的服务- 用户语境。

xrandr --output HDMI-1 --auto
/usr/bin/systemctl --user restart daemon.service

如果 udev 正在触发脚本,则会失败。
但如果我调用系统控制命令通过sudo其按预期工作。

xrandr --output HDMI-1 --auto
sudo /usr/bin/systemctl --user restart daemon.service

xrandr无需 sudo 即可工作。


echo $(whoami)在我的脚本中添加了一个,它声明它以 root 身份运行(即使是从 udev 触发的),
所以假设我不需要 sudo?!

=========

我的这种行为的主要问题是,我还手动或通过 pyhton 脚本触发此脚本 - 这比以下原因失败sudo

Failed to connect to bus: $DBUS_SESSION_BUS_ADDRESS and $XDG_RUNTIME_DIR not defined (consider using --machine=<user>@.host --user to connect to bus of other user)

这种行为的原因是什么?
为什么我需要sudo


我的解决方法是:

if [[ $1 = "-no-sudo" ]]; then
    systemctl='/usr/bin/systemctl'
else
    systemctl='sudo /usr/bin/systemctl'
fi

$systemctl --user restart daemon.service

所以 udev 使用 sudo 启动它,我也可以不使用 sudo 启动它。

相关内容