2010-07-03 16 views
2

我正在使用從某個進程訪問徹底的DBUS。麻煩的是,它從另一個用戶運行,並且DBUS的會話與他們不同。因此,如果會話不同,我無法訪問通過另一個進程使用DBUS的應用程序。我找到了解決這個問題的方法:一些腳本寫入主用戶的文件dbus會話數據(我在系統加載時設置它)。下面是該腳本:Libpurple不能從bash中工作

#!/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

不是嗎?如果您在採購/.Xdbus之後立即「echo $ DBUS_SESSION_BUS_ADDRESS」,您會看到什麼?或在購買之前購買「cat /.Xdbus」? – 2010-07-03 16:51:07

+0

@ owen-s我的帖子升級了 – Ockonal 2010-07-03 17:04:27

回答

1

根據您的更新,則source命令工作。因此,問題與purple-remotelibpurple或某些依賴關係而不是與您的Bash腳本。

在根目錄下創建這樣的文件不是一個好主意。嘗試爲您的文件選擇一個更合適的位置。執行下列操作之一可能是:

  • /home/username/.Xdbus
  • /var/local/.Xdbus - 你可能需要您的用戶添加到該目錄擁有該組
  • /tmp/.Xdbus
+0

嗯,我把它移到了/tmp/.Xdbus,現在沒有任何錯誤,但是狀態沒有改變。 – Ockonal 2010-07-03 17:55:48

+0

@Ockonal:顯然它現在工作?你還做了什麼來解決它? – 2010-07-04 20:49:51

1

我想這是因爲你用/這是文件系統的根。 你想要的是./或者丹尼斯說的絕對路徑。

您也可以使用$ PWD/file或$ {pwd} /文件

+0

與$ PWD/.Xdbus它說該文件不存在。但是使用/tmp/.Xdbus沒有錯誤。但狀態是一樣的。 – Ockonal 2010-07-03 18:00:19

+0

取決於您運行腳本的位置。如果可能的話,更喜歡絕對路徑。 – Aif 2010-07-03 18:08:23

+0

腳本在/bin/script.sh中,需要權限'-rwxr - r-- 1根root' – Ockonal 2010-07-03 18:11:52