我正在使用从某个进程访问彻底的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;
→
unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023 No existing libpurple instance detected. unix:abstract=/tmp/dbus-9yStbCgjwb,guid=0deadb6519676638e1e93f5000000023
答案 0 :(得分:1)
根据您的更新,source
命令正在运行。因此,问题在于purple-remote
或libpurple
或某些依赖项,而不是您的Bash脚本。
在根目录中创建此类文件不是一个好主意。尝试为您的文件选择更合适的位置。也许以下之一:
/home/username/.Xdbus
/var/local/.Xdbus
- 您可能必须将您的用户添加到拥有此目录的组/tmp/.Xdbus
答案 1 :(得分:1)
我认为这是因为您使用/是文件系统的根目录。 你想要的是./或丹尼斯所说的绝对路径。
您还可以使用$ PWD / file或$ {pwd} / file