GNOME 3.6 で Ubuntu のヘッドアップ ディスプレイ (HUD) メニュー サービスの結果に (プログラムで) アクセスしたいと考えています。私は HUD の DBus インターフェイスをいじってみましたが、ある程度成功しましたが、Unity の外で動作させることはできません。たとえば、次の Python スクリプトは、Unity にログインしているときにターミナルから実行すると、いくつかの結果が表示されます。
#!/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)で実行すると、次のようになります。
$ ./hud.py
File > <b>Open</b> Tab
File > <b>Open</b> Terminal
dropbox > <b>Open</b> Dropbox Folder
View > Zoom <b>Out</b>
Terminal > Set Character Encoding > Add <b>or</b> Remove…
...しかし、GNOME 3.6 では結果が得られません (エラーも何もありません)。
これらのサービスは、GNOME ではなく Unity で常に実行されているため、関与しているようです。
/usr/lib/indicator-appmenu/hud-service
/usr/lib/x86_64-linux-gnu/indicator-application-service
/usr/lib/indicator-(whatever)/indicator-(whatever)-service
しかし、GNOMEで起動すると、すぐに終了します
$ /usr/lib/indicator-session/indicator-session-service
(process:4921): libindicator-WARNING **: No watchers, service timing out.
その短い時間枠でスクリプトを実行できれば、結果が得られます! しかし、これらのサービスを実行し続けるにはどうすればよいでしょうか? そして、そもそも何が彼らを始めたのでしょうか? また、アプリケーション メニューのコンテンツは含まれていますか、それとも別のサービスによって提供されていますか?