3

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 &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 ではなく 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.

その短い時間枠でスクリプトを実行できれば、結果が得られます! しかし、これらのサービスを実行し続けるにはどうすればよいでしょうか? そして、そもそも何が彼らを始めたのでしょうか? また、アプリケーション メニューのコンテンツは含まれていますか、それとも別のサービスによって提供されていますか?

4

2 に答える 2

0

間違ったサービス名を使用しているようです。現在利用可能なGNOME 3.6はありませんが、dbusサービスをリストすることができます

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

さらにexport UBUNTU_MENUPROXY=libappmenu.so、Gnome を起動する前に、または/etc/environmentで定義する必要があります。

また、indicator-appmenuがインストールされていることを確認してください。

ただし、ここを読んだ後、GNOME デスクトップはそのようなサービスを使用していないと思います。

ここに画像の説明を入力

したがって、Gnome に固有の別の DBus サービス (別の API を使用) を探す必要があることを確認します。

于 2013-04-09T09:25:38.417 に答える