7

バス名、オブジェクト パス、およびインターフェイスがある場合、Gjs から (gnome-shell 拡張で) 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 ではばかげています)

4

2 に答える 2

10

imports.dbusgnome-shell 3.4 以降、インポートは非​​推奨になりました。新しい方法は、ここで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');

(元の投稿では を使用していることに注意してください。makeProxyClass正しいのはmakeProxyWrapperです。)

たとえば、イントロスペクションを使用して、インターフェース定義を取得できます。ピジン/パープルの場合:

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

インターフェイスのイントロスペクションとインスペクションの詳細については、こちらを参照してください。

于 2013-05-27T20:39:42.810 に答える
1

これはあなたにもっと良い考えを与えるはずです:

gjs> const DBus = imports.dbus;
gjs> for (let i in DBus) log(i);
于 2012-10-15T13:37:06.380 に答える