2012-07-18 4 views
5

私はバス名、オブジェクトパス、およびインターフェースを持っていますが、gnome-shell拡張機能のGjからDBusメソッドを呼び出す方法はありますか?Gjs/GnomeシェルでDBusメソッドを呼び出す

私は、次のPythonコードの同等を探しています:

import dbus 
bus = dbus.SessionBus() 
obj = bus.get_object("org.gnome.Caribou.Keyboard", "/org/gnome/SessionManager/EndSessionDialog") 
obj.Open(0, 0, 120, dbus.Array(signature="o")) 

(私は明示的に何らかののpython-dbusの魔法へのインタフェースを使用していませんでしたが、私はiface = dbus.interface(obj, "org.gnome.SessionManager.EndSessionDialog")を持っている可能性があることに注意してください。私はインターフェイス名を持っているので、それを照会する解決策があります。この例はgnome-shellに呼び出されるので、Gjsでは愚かです)

答えて

1

これはあなたに良いアイデアを与えるはずです:

gjs> const DBus = imports.dbus; 
gjs> for (let i in DBus) log(i); 
8

インポートimports.dbusは、gnome-shell 3.4以降では非推奨です。 新しい方法はhereを説明するようにGioを使用することです:

const Gio = imports.gi.Gio; 

const MyIface = '<interface name="org.example.MyInterface">\ 
<method name="Activate" />\ 
</interface>'; 
const MyProxy = Gio.DBusProxy.makeProxyWrapper(MyIface); 

let instance = new MyProxy(Gio.DBus.session, 'org.example.BusName', 
'/org/example/Path'); 

(正しいmakeProxyWrapperで、オリジナルのポストはmakeProxyClassを使用することに注意してください。)

あなたは例えば、イントロスペクションを使用して、インターフェイス定義を取得することができます。ピジン/パープルDOの場合 :イントロスペクションとのインターフェースの検査に

$ dbus-send --print-reply --dest=im.pidgin.purple.PurpleService \ 
/im/pidgin/purple/PurpleObject org.freedesktop.DBus.Introspectable.Introspect 

さらなる説明はhereを見つけることができます。

関連する問題