2012-07-18 14 views
5

Bir veri yolu adı, bir nesne yolu ve bir arabirim varsa, Gjs'den (gnome-shell uzantısında) DBus yöntemlerini nasıl ararım?Gjs/Gnome Kabuğu'nda DBus yöntemlerini çağırma

Aşağıdaki piton kod eşdeğer arıyorum:

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")) 

(açıkça nedeniyle bazı piton-dbus büyü arayüzü kullanmak vermedi unutmayın ama iface = dbus.interface(obj, "org.gnome.SessionManager.EndSessionDialog") ile olabilir. Arabirim adına sahip olduğumdan, bunu sorgulayan bir çözüm ile iyiyim. Ayrıca bu örneğin GNS'ye geri döneceği gibi gnome-shell'e geri döneceğini de unutmayın)

cevap

1

size daha iyi bir fikir vermelidir:

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

Gnome-shell 3.4'ten itibaren imports.dbus ithalatı kullanımdan kaldırılmıştır. here tarif edildiği gibi yeni bir yol Gio kullanmaktır:

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'); 

(doğru makeProxyWrapper orijinal sonrası makeProxyClass kullanır unutmayın.)

yapabilirsiniz örneğin iç gözlem kullanarak, arayüz tanımı elde . pidgin/mor do için : içebakış ve arayüzleri inceleme üzerine

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

ayrıntılı açıklamalar here bulunabilir.

İlgili konular