org.freedesktop.Notifications
我正在创建一个 systemd 服务,每当记录高优先级事件时,该服务都会通过 dbus 目标发送桌面通知。为此,我journalctl
以 root 身份运行并在 Rust 程序中处理所有输出(journalctl
在程序中作为子程序调用),可以近似如下:
sudo journalctl -focat -p3 -Snow | xargs -I{} -d '\n' notify-send {}
我需要以 root 权限运行才能访问所有日志,但是当我将其设为 systemd 服务时,它不再起作用(在终端中journalctl
运行时也不起作用)。sudo
我的(缩写).service
文件如下所示:
[Unit]
Requires=dbus.service
[Service]
WorkingDirectory=~
ExecStart=/usr/bin/auditnotify
Restart=always
PrivateTmp=true
NoNewPrivileges=true
[Install]
Alias=auditnotify
WantedBy=default.target
在检查了服务后strace
,我发现似乎发生的事情是zbus
我正在使用的通知箱的依赖性,notify-rust
,正在获取 UID,然后尝试使用它来获取会话总线。但是,由于它以 root 身份运行,因此它的 UID 为 0,并且无法发送通知。
strace
输出片段:
geteuid() = 0
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/run/user/0/bus"}, 18) = -1 ENOENT (No such file or directory)
close(3) = 0
User=gfaster
当我将和添加Group=gfaster
到文件中时,这个假设得到了证实.service
,并且通知开始工作。然而,正如我之前提到的,这不起作用,因为我需要对日志进行根访问。
有什么办法可以解决这个问题吗?是否可以将此服务作为用户会话的一部分运行,但具有 root 权限?我是否只需要创建第二个与日志交互的服务,如果是这样,该配置是什么样的?