2011-12-19 95 views
3

我在使用GREE Labs' Dbus PHP Extension來嘗試創建一個能夠創建桌面通知的PHP類。

$dbus = $dbus = dbus_bus_get(DBUS_BUS_SESSION); 

$message = new \DBusMessage(DBUS_MESSAGE_TYPE_SIGNAL); 
$message->setDestination("org.freedesktop.DBus"); 
$message->setAutoStart(true); 

$dbus->sendWithReplyAndBlock($message, 1); 

當我的代碼運行時我得到以下錯誤:

Warning: dbus_bus_get() [function.dbus-bus-get]: failed to create dbus connection object [Unable to autolaunch a dbus-daemon without a $DISPLAY for X11] in [...COI/GTK/Notify.php on line 39

這是我第一次使用與DBUS什麼,我寧願丟失。

我的目標類似於一個執行時,下面出現什麼樣的終端(在Ubuntu 11.10)的影響:

/usr/bin/notify-send -t 2000 'title' 'message' 

我最初使用notify-send & exec,但切換時,我發現了GREE Dbus擴展,因爲我認爲它可以提供更清晰的界面。另外notify-send將只能正常工作,如果我更改我的apache用戶爲我正在登錄的用戶相同 - 不是一個理想的解決方案。

任何人都可以告訴我需要進行哪些修改才能達到我想要的效果,或者告訴我我想要做什麼實際上是不可能的?

或者,還有另一種方法我應該這樣做嗎?

+0

你可以試試:http://stackoverflow.com/questions/2701059/how-to-send-a-notification-to-another -user-with-notify-send-bash – Petah 2011-12-19 03:26:15

回答

1

在啓動Web服務器的腳本中使用​​以便同時啓動適當的DBus守護進程。有關詳細信息,請參閱dbus-launch(1)手冊頁。

+0

號再試一次。但是閱讀。 – 2011-12-19 03:37:05

3

Dbus確實不是就像在命令行環境中運行時一樣沒有X.這很令人沮喪,但這是我在Python中寫的,以覆蓋它。它歸結爲設置兩個環境變量。

def run(self): 
    os.environ['DBUS_SESSION_BUS_ADDRESS'] = "unix:path=/run/dbus/system_bus_socket" 
    os.environ["DISPLAY"] = ":0" 

    try: 
     bus_name = dbus.service.BusName(INTERFACE, 
            bus = dbus.SessionBus()) 
     dbus.service.Object.__init__(self, bus_name, 
            '/com/your/path/here') 
     gobject.MainLoop().run() 
    except Exception, E: 
     f = file('/tmp/bus.log', 'a') 
     f.write(str(E)) 
     f.close() 

編輯:我忘了另一個命令行

eval 'dbus-launch --auto-syntax' [command] 

我用它在樹莓派跑我的自定義DBUS守護程序上運行的dbus非常有用的方式。 dbus-launch --auto-syntax是輸出適用於bash中的dbus的環境變量和文件的命令。 eval命令將獲取該輸出並對其進行評估,以便您的command將與這些環境變量一起運行。

一個簡單的測試,可運行是這樣的:

eval 'dbus-launch --auto-syntax' python /usr/bin/my-dbus-daemon.py 
eval 'dbus-launch --auto-syntax' qdbus org.dbus.method /org/dbus/method/test 
+1

或者在命令行上: 'DISPLAY = 「0」 DBUS_SESSION_BUS_ADDRESS = 「UNIX:PATH = /運行/ DBUS/system_bus_socket」/你/斌/ program' – NuclearPeon 2013-07-19 18:31:25

相關問題