2012-07-18 4 views
5

में डीबीस विधियों को कॉल करना यदि मेरे पास बस नाम, ऑब्जेक्ट पथ और इंटरफ़ेस है, तो मैं जीजेएस (एक gnome-shell एक्सटेंशन में) से डीबीस विधियों को कैसे कॉल करूं?जीजे/जीनोम शैल

मैं निम्नलिखित अजगर कोड के बराबर की तलाश में हूँ:

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

(ध्यान दें कि मैं स्पष्ट रूप से कुछ अजगर-dbus जादू की वजह से इंटरफ़ेस का उपयोग नहीं किया है, लेकिन मैं iface = dbus.interface(obj, "org.gnome.SessionManager.EndSessionDialog") साथ हो सकता था। चूंकि मेरे पास इंटरफेस का नाम है, इसलिए मैं इसे हल करने वाले समाधान के साथ ठीक हूं। यह भी ध्यान दें कि यह उदाहरण जीजे में मूर्खतापूर्ण होगा, क्योंकि यह वापस gnome-shell में कॉल करता है)

उत्तर

1

इससे आपको एक बेहतर विचार मिलना चाहिए:

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

आयात imports.dbus gnome-shell 3.4 के बाद से बहिष्कृत है। नया तरीका के रूप में वर्णित hereGio उपयोग करने के लिए है:

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 

आत्मनिरीक्षण और इंटरफेस के निरीक्षण पर आगे स्पष्टीकरण here पाया जा सकता है।