我正在使用从某个进程访问彻底的 DBUS。问题在于它是从另一个用户运行的,并且 DBUS 的会话对他们来说是不同的。因此,如果会话不同,我将无法通过另一个进程访问使用 DBUS 的应用程序。我找到了解决这个问题的方法:一些脚本从主用户写入文件 dbus 会话数据(我在系统加载时设置它)。这是那个脚本:
#!/bin/bash
touch /.Xdbus
chmod 666 /.Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > /.Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> /.Xdbus
这是该文件的示例:
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023
export DBUS_SESSION_BUS_ADDRESS
现在我只需要执行该文件中的数据,两个 DBUS 会话将是相同的。这里有一些麻烦:
#!/bin/bash
if [ -f /.Xdbus ]
then
source /.Xdbus; /usr/bin/purple-remote "setstatus?status=away&message=At lunch"
else
echo "File doesnt exist"
fi
如您所见,我使用 pidgin 作为 DBUS 应用程序。但它会抛出错误,即没有紫色应用程序,因此 DBUS 会话不同!所以命令:
source /.Xdbus
没用。为什么?
UPD
source /.Xdbus; echo $DBUS_SESSION_BUS_ADDRESS; /usr/bin/purple-remote "setstatus?status=away&message=At lunch"; echo $DBUS_SESSION_BUS_ADDRESS;
→</p>
unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023 No existing libpurple instance detected. unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023