2012-07-18 20 views
5

Si tengo un nombre de bus, una ruta de objeto y una interfaz, ¿cómo puedo llamar a los métodos de DBus desde Gjs (en una extensión gnome-shell)?Llamando a métodos DBus en Gjs/Gnome Shell

Busco el equivalente del siguiente código 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")) 

(Tenga en cuenta que yo no uso explícitamente la interfaz debido a un poco de magia python-dbus, pero podría tener con iface = dbus.interface(obj, "org.gnome.SessionManager.EndSessionDialog"). Como tengo el nombre de la interfaz, estoy de acuerdo con una solución que lo consulta. También tenga en cuenta que este ejemplo sería absurdo en Gjs, ya que vuelve a llamar a gnome-shell)

Respuesta

1

Esto debería darle una mejor idea:

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

La importación imports.dbus está en desuso desde gnome-shell 3.4. La nueva forma es utilizar Gio como se describe here:

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

(Tenga en cuenta que el post original utiliza makeProxyClass, correcta es makeProxyWrapper.)

, usted puede obtener la definición de interfaz, por ejemplo, mediante el uso de la introspección . Para pidgin/Do púrpura:

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

Más explicaciones sobre la introspección y la inspección de las interfaces se encuentran here.

Cuestiones relacionadas