gpt4 book ai didi

dbus - 在 Gjs/Gnome Shell 中调用 DBus 方法

转载 作者:行者123 更新时间:2023-12-04 17:38:12 25 4
gpt4 key购买 nike

如果我有总线名称、对象路径和接口(interface),我如何从 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 魔术,我没有明确使用该接口(interface),但我可以使用 iface = dbus.interface(obj, "org.gnome.SessionManager.EndSessionDialog") 。因为我有接口(interface)名称,所以我可以使用查询它的解决方案。另请注意,这示例在 Gjs 中会很愚蠢,因为它会回调到 gnome-shell)

最佳答案

进口 imports.dbus自 gnome-shell 3.4 起已弃用。
新方法是使用 Gio如所述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');

(请注意,原始帖子使用 makeProxyClass ,正确的是 makeProxyWrapper 。)

例如,您可以通过使用自省(introspection)来获取接口(interface)定义。
对于 pidgin/紫色,请执行以下操作:
$ dbus-send --print-reply --dest=im.pidgin.purple.PurpleService \
/im/pidgin/purple/PurpleObject org.freedesktop.DBus.Introspectable.Introspect

关于接口(interface)自省(introspection)和检查的进一步解释可以找到 here .

关于dbus - 在 Gjs/Gnome Shell 中调用 DBus 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11544758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com