第一:系统使用的默认用户是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 启动它。