dbus指令透视不完整?

1sbrub3j  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(438)

我使用的是javadbus接口。由于它不完整,我们必须使用dbus自省工具来生成xml文件,这些文件将被转换为java类。
我想能够接收信号时,驱动器插入或删除系统。
为此,我发现接口添加和接口删除的信号就是我要搜索的。
我已使用此命令生成xml自省文件:

  1. gdbus introspect --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2 --xml

它生成了一个文件,我用这个命令转换了这个文件:

  1. CreateInterface --system --no-ignore-builtin --create-files org.freedesktop.UDisks2.xml

我现在可以接收接口添加的信号,但不能接收接口删除的信号。
似乎有一个问题,这个信号想提供一些信息,在块\设备节点。但对于此节点,xml文件为空:

  1. <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
  2. "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
  3. <!-- GDBus 2.66.2 -->
  4. <node>
  5. <interface name="org.freedesktop.DBus.Properties">
  6. ... snip ...
  7. <interface name="org.freedesktop.DBus.ObjectManager">
  8. <method name="GetManagedObjects">
  9. <arg type="a{oa{sa{sv}}}" name="object_paths_interfaces_and_properties" direction="out"/>
  10. </method>
  11. <signal name="InterfacesAdded">
  12. <arg type="o" name="object_path"/>
  13. <arg type="a{sa{sv}}" name="interfaces_and_properties"/>
  14. </signal>
  15. <signal name="InterfacesRemoved">
  16. <arg type="o" name="object_path"/>
  17. <arg type="as" name="interfaces"/>
  18. </signal>
  19. </interface>
  20. <node name="Manager"/>
  21. <node name="drives"/>
  22. <node name="block_devices"/>
  23. </node>

因此java代码不知道如何创建信号。
我能做些什么?

xzlaal3s

xzlaal3s1#

我认为核心误解是:为对象生成接口文件 /org/freedesktop/UDisks2 但是在您的代码中,您可以使用这些接口文件为实现的接口创建代理 /org/freedesktop/UDisks2/block_devices/sdb . 这些对象实现不同的接口。
为其创建代理的所有接口都需要接口定义。我不能给出内省的确切命令,但只要找到合适的对象,就可以使用相同的方法生成它们。例如:

  1. gdbus introspect --system --xml \
  2. --dest org.freedesktop.UDisks2 \
  3. --object-path /org/freedesktop/UDisks2/block_devices/nvme0n1

生成的接口定义 org.freedesktop.UDisks2.Block 以及 org.freedesktop.UDisks2.PartitionTable 在我的机器上。
也就是说,udisks2似乎拥有 org.freedesktop.UDisks2.* 源代码中提供的接口:org.freedesktop.udisks2.xml。

相关问题