如何配置使用 D-Bus 的 systemd 服务?

如何配置使用 D-Bus 的 systemd 服务?

我编写了一个发送通知的脚本。该脚本调用notify-send来执行此操作,并且notify-send需要 D-Bus 环境变量才能运行:DBUS_SESSION_BUS_ADDRESS

当我从终端运行脚本时,它会正常生成通知。但是我每次登录时都会使用 systemd 运行脚本,并且当 systemd 运行脚本时,它不再生成通知。这是因为 systemd 以干净的环境启动我的脚本 --- 这意味着缺少 D-Bus 环境变量。

在 Arch Linux 上,我可以将其添加到脚本的单元文件中:

[Install]
WantedBy=default.target
Requires=dbus-setenv.service

通过此配置,systemd 在 D-Bus 准备就绪时启动我的脚本,并将DBUS_SESSION_BUS_ADDRESS变量传递给我的脚本。

现在我在使用 Ubuntu,但该配置似乎不起作用。我想知道:在 Ubuntu 下推荐的执行方法是什么?

答案1

评论太长了...我正在另一个脚本中使用它来更改壁纸cron

#!/bin/bash -e
user=$(whoami)

fl=$(find /proc -maxdepth 2 -user "$user" -name environ -print -quit)
for i in {1..5}
do
  fl=$(find /proc -maxdepth 2 -user "$user" -name environ -newer "$fl" -print -quit)
done

export DBUS_SESSION_BUS_ADDRESS
DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS "$fl" | cut -d= -f2-)

相关内容