Ubuntu 如何从GNOME下的HUD DBus服务中获得结果?

Ubuntu 如何从GNOME下的HUD DBus服务中获得结果?,ubuntu,dbus,hud,gnome-3,Ubuntu,Dbus,Hud,Gnome 3,我想(通过编程)访问Gnome3.6下Ubuntu的抬头显示(HUD)菜单服务的结果。我一直在为HUD使用DBus接口,并取得了一些成功,但在Unity之外无法使其工作。例如,在Unity下登录时,从终端运行时,以下Python脚本将显示一些结果: #!/usr/bin/env python import dbus session_bus = dbus.SessionBus() proxy_obj = session_bus.get_object('com.canonical.hud', '/

我想(通过编程)访问Gnome3.6下Ubuntu的抬头显示(HUD)菜单服务的结果。我一直在为HUD使用DBus接口,并取得了一些成功,但在Unity之外无法使其工作。例如,在Unity下登录时,从终端运行时,以下Python脚本将显示一些结果:

#!/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])
在Unity下运行它(在12.10中),我得到:

但如果我在GNOME下启动它们,它们很快就会退出

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

(process:4921): libindicator-WARNING **: No watchers, service timing out.

如果我能在这么短的时间内运行我的脚本,那么我就会得到结果!但我如何保持这些服务运行?首先是什么让他们开始的?它们是否包含应用程序菜单内容,或者是由其他服务提供的内容?

看起来您使用了错误的服务名称。我现在没有GNOME 3.6可用,但您可以使用列出dbus服务

dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
此外,在启动Gnome之前,您应该导出UBUNTU\u MENUPROXY=libappmenu.so,或者在

还要检查您是否已安装

然而,在阅读本文之后,我猜GNOME桌面不使用这样的服务:


因此,我确认您应该寻找另一个特定于Gnome的DBus服务(使用不同的API)。

我假设该项目中没有活动。然而,许多人真的喜欢gnome的hud的想法!
你在这里发布的脚本是所有这方面的工作,还是你还有一些更好的文件

如果我使用了错误的服务名称,为什么它会在Unity下工作?我不会得到一个DBUS错误吗?另外,
UBUNTU\u MENUPROXY
是根据需要设置的,我不这么认为。没有错误。在总线中,我希望能够订阅一个尚未公开但稍后将公开的服务。这辆公共汽车起着调停者的作用。这就是总线和客户机-服务器体系结构之间的区别之一。顺便说一句,检查一下,自从安装了这样的服务以来,您是否安装了indicator appmenu。即使GNOME不会自动使用这样的服务,我想弄清楚的是:Unity是如何做到的?GNOME可以通过运行几个命令来复制它的行为吗,或者它比这复杂得多?这就是问题所在。噢,
indicator appmenu
确实安装了。
$ /usr/lib/indicator-session/indicator-session-service

(process:4921): libindicator-WARNING **: No watchers, service timing out.
dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames