![如何配置使用 D-Bus 的 systemd 服务?](https://linux22.com/image/1130664/%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E4%BD%BF%E7%94%A8%20D-Bus%20%E7%9A%84%20systemd%20%E6%9C%8D%E5%8A%A1%EF%BC%9F.png)
我编写了一个发送通知的脚本。该脚本调用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-)