将结构传递给 dbus 方法的工具?
A tool to pass struct to dbus method?
我创建了一个守护进程。该守护进程提供了一个 dbus 接口,其方法之一具有这样的签名 (uu)
——这是两个 uint32
字段的结构。
是否有现成的工具供我调用方法,将结构传入? dbus-send
和 d-feet
似乎没有帮助。
有什么指点吗?
gdbus
应该可以解决问题。尝试相当于:
gdbus call --session --dest com.example.MyTest --object-path /com/example/MyTest --method com.example.MyTest.Test "(1,2)"
...当然要根据您的情况使用正确的参数。
我已经使用 Python D-Bus 服务测试了上面的调用,如下所示:
import gobject
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
OPATH = "/com/example/MyTest"
IFACE = "com.example.MyTest"
BUS_NAME = "com.example.MyTest"
class Example(dbus.service.Object):
def __init__(self):
bus = dbus.SessionBus()
bus.request_name(BUS_NAME)
bus_name = dbus.service.BusName(BUS_NAME, bus=bus)
dbus.service.Object.__init__(self, bus_name, OPATH)
@dbus.service.method(dbus_interface=IFACE,
in_signature="(uu)", out_signature="")
def Test(self, payload):
print "Got this from client:", payload
if __name__ == "__main__":
service = Example()
loop = gobject.MainLoop()
loop.run()
在 Ubuntu 15.10 机器上 gdbus
由 libglib2.0-bin
包提供:
$ dpkg -L libglib2.0-bin | grep gdbus
/usr/bin/gdbus
/usr/share/bash-completion/completions/gdbus
/usr/share/man/man1/gdbus.1.gz
希望这对您有所帮助。
我创建了一个守护进程。该守护进程提供了一个 dbus 接口,其方法之一具有这样的签名 (uu)
——这是两个 uint32
字段的结构。
是否有现成的工具供我调用方法,将结构传入? dbus-send
和 d-feet
似乎没有帮助。
有什么指点吗?
gdbus
应该可以解决问题。尝试相当于:
gdbus call --session --dest com.example.MyTest --object-path /com/example/MyTest --method com.example.MyTest.Test "(1,2)"
...当然要根据您的情况使用正确的参数。
我已经使用 Python D-Bus 服务测试了上面的调用,如下所示:
import gobject
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
OPATH = "/com/example/MyTest"
IFACE = "com.example.MyTest"
BUS_NAME = "com.example.MyTest"
class Example(dbus.service.Object):
def __init__(self):
bus = dbus.SessionBus()
bus.request_name(BUS_NAME)
bus_name = dbus.service.BusName(BUS_NAME, bus=bus)
dbus.service.Object.__init__(self, bus_name, OPATH)
@dbus.service.method(dbus_interface=IFACE,
in_signature="(uu)", out_signature="")
def Test(self, payload):
print "Got this from client:", payload
if __name__ == "__main__":
service = Example()
loop = gobject.MainLoop()
loop.run()
在 Ubuntu 15.10 机器上 gdbus
由 libglib2.0-bin
包提供:
$ dpkg -L libglib2.0-bin | grep gdbus
/usr/bin/gdbus
/usr/share/bash-completion/completions/gdbus
/usr/share/man/man1/gdbus.1.gz
希望这对您有所帮助。