2012-07-18 22 views
5

Nếu tôi có tên bus, đường dẫn đối tượng và giao diện, làm cách nào để gọi các phương thức DBus từ Gjs (trong phần mở rộng gnome-shell)?Gọi phương thức DBus trong Gjs/Gnome Shell

Tôi đang tìm tương đương với mã python sau:

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

(Lưu ý rằng tôi đã không sử dụng một cách rõ ràng giao diện do một số ma thuật python-dbus, nhưng tôi có thể có với iface = dbus.interface(obj, "org.gnome.SessionManager.EndSessionDialog"). Cũng lưu ý rằng ví dụ này sẽ là ngớ ngẩn trong Gjs, vì nó gọi lại vào gnome-shell)

Trả lời

1

điều này sẽ cung cấp cho bạn một ý tưởng tốt hơn:

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

Việc nhập imports.dbus không được chấp nhận vì gnome-shell 3.4. Cách mới là sử dụng Gio như mô tả 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'); 

(Lưu ý rằng các bài bản gốc sử dụng makeProxyClass, đúng là makeProxyWrapper.)

Bạn có thể có được định nghĩa giao diện, ví dụ, bằng cách sử dụng mẫn . Đối với pidgin/làm tím:

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

giải thích thêm về mẫn và kiểm tra các giao diện có thể được tìm thấy here.