2013-03-10 28 views
3

我想(以編程方式)訪問GNOME 3.6下Ubuntu的擡頭顯示(HUD)菜單服務的結果。我一直在玩HUD的DBus接口,但取得了一些成功,但無法在Unity之外使用它。例如,下面的Python腳本會表現出一定的結果,從團結的時候記錄下在終端中運行時:如何從GNOME下的HUD DBus服務獲得結果?

#!/usr/bin/env python 
import dbus 

session_bus = dbus.SessionBus() 
proxy_obj = session_bus.get_object('com.canonical.hud', '/com/canonical/hud') 
hud_iface = dbus.Interface(proxy_obj, dbus_interface='com.canonical.hud') 
query_result = hud_iface.StartQuery("ope", 5) 

for res in query_result[1]: 
    print res[0].encode('utf8') 

hud_iface.CloseQuery(query_result[2]) 

統一下運行它(在12.10),我得到:

$ ./hud.py 
File &gt; <b>Open</b> Tab 
File &gt; <b>Open</b> Terminal 
dropbox &gt; <b>Open</b> Dropbox Folder 
View &gt; Zoom <b>Out</b> 
Terminal &gt; Set Character Encoding &gt; Add <b>or</b> Remove… 

...但在GNOME 3.6下,我沒有得到任何結果(沒有錯誤,沒有任何結果)。

它看起來像這些服務都參與其中,因爲他們都在不斷團結而不是GNOME下運行:

/usr/lib/indicator-appmenu/hud-service 
/usr/lib/x86_64-linux-gnu/indicator-application-service 
/usr/lib/indicator-(whatever)/indicator-(whatever)-service 

$ /usr/lib/indicator-session/indicator-session-service 

(process:4921): libindicator-WARNING **: No watchers, service timing out. 
後不久,但如果我啓動它們在GNOME,他們退出

如果我設法在狹窄的時間窗口中運行我的腳本,那麼我會得到結果!但是,如何讓這些服務保持運行?首先是什麼啓動它們?它們是否包含應用程序菜單內容,還是由其他服務提供?

回答

0

看起來您正在使用錯誤的服務名稱。我現在已經沒有GNOME 3.6,但您可以用

dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames 

列出DBUS服務,而且你應該export UBUNTU_MENUPROXY=libappmenu.so開始之前的Gnome或/etc/environment

定義它也檢查你已經安裝了indicator-appmenu。閱讀這裏here

不過,我想的是,GNOME桌面不使用這樣的服務:制定

enter image description here

因此我可以證實,你應該尋找另外的DBus服務(使用不同的API)侏儒。

+0

如果我使用錯誤的服務名稱,爲什麼它會在Unity下工作?我不會得到一個DBUS錯誤?此外,'UBUNTU_MENUPROXY'是根據需要設置的。 – detly 2013-04-10 00:39:33

+0

我不這麼認爲。沒有錯誤。在一輛公交車上,我希望能夠訂購尚未公開的服務,但將在稍後公開。巴士就像一個調解人一樣工作。這是總線和客戶機 - 服務器體系結構之間的差異之一。 – 2013-04-10 06:46:56

+0

順便說一句,檢查你安裝了指示器應用程序,因爲它安裝了這樣的服務。 – 2013-04-10 08:23:04

0

我假設在該項目中沒有任何活動。然而,很多人非常喜歡gnome的想法! 您在這裏發佈的腳本是否包含所有這些工作,或者您還有哪些文件更好?