我正在使用基于此处发布的工作的脚本:使用 cron 更新 pidgin 状态
我正在尝试制作一个 wicd 脚本,该脚本会在 Wifi 断开之前自动断开连接,并在 Wifi 重新连接时重新连接。
但不知何故 dbus/pidgin 似乎无法找到 dbus 会话,即使设置了环境变量。
我的设置:
- 拱门Linux
- 洋泾浜2.9.0
- 利紫2.9.0-2
自动加载脚本(在 Xfce 启动时运行):
#!/bin/bash
touch /tmp/dbus_session_data
env | grep DBUS_SESSION_BUS_ADDRESS > /tmp/dbus_session_data
echo 'export DBUS_SESSION_BUS_ADDRESS' >> /tmp/dbus_session_data
运行脚本后的 tmp 文件:
[skaverat@eeepthought ~]$ cat /tmp/dbus_session_data
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-gZMqzhdS2S,guid=9b8b3169f14346902127832000000043
export DBUS_SESSION_BUS_ADDRESS
好吧,我们进入另一个环境:
[root@eeepthought ~]# env | grep DBUSD
[root@eeepthought ~]# source /tmp/dbus_session_data
[root@eeepthought ~]# env | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-gZMqzhdS2S,guid=9b8b3169f14346902127832000000043
[root@eeepthought ~]# purple-remote getstatus
No existing libpurple instance detected.
紫色-正常环境下远程调用:
[skaverat@eeepthought ~]$ purple-remote getstatus
available
知道可能出什么问题吗?
答案1
DBus 会话不能为不同的用户共享,这就是它的设计方式。
我可能无法获得您当前的解决方案,为什么您要尝试使用 root 来执行此操作?
如果是这样,请使用su - USERNAME -c /path/to/this/script.sh
启动这样的脚本,
#!/bin/bash
. ~/.dbus/session-bus/*
purple-remote getstatus
这适用于 root 用户。
PS:为什么不将 cron 设置为通过 pidgin 登录的用户?
答案2
据我所知,您无法连接到另一个用户的 D-Bus 会话。因此 root@eeepthought 作为另一个用户被拒绝连接到 skaverat@eeepthought 的 D-Bus 会话。这就是你所做的事情的全部错误。