dbus-send如何从zathura获取页数?

Dbus-send how to get the number of pages from zathura?

我正在尝试使用 dbus-send 从 zathura 获取总页数(Zathura 是一个 PDF 查看器)(见下图)。我对DBus不熟悉(不管我怎么学,我总是放弃)。

我可以使用 GUI 程序查看总页数 numberofpages 当我双击它时 属性 我得到了值。

但是,我正在尝试使用 dbus-send 获取相同的信息。我在终端上尝试了以下操作:

dbus-send --session --dest=org.pwmt.zathura.PID-1057698 \
 --print-reply org.pwmt.zathura.Properties.numberofpages

上面的命令不起作用。

你能告诉我如何构造一个 dbus 命令来获取 numberofpages 值吗?

在与 dbus-send 命令搏斗之后,我终于找到了正确的语法:

dbus-send --session  --print-reply \
 --dest=org.pwmt.zathura.PID-1057698\ 
 /org/pwmt/zathura \
 org.freedesktop.DBus.Properties.Get \
 string:org.pwmt.zathura string:numberofpages

该命令的输出是:

method return time=1650032068.076028 sender=:1.2273 -> destination=:1.2408 serial=79 reply_serial=2
   variant       uint32 46

我可以使用 grep 获取值 46(在我的例子中是 PDF 文档中的总页数)。

使用 busctl 而不是 dbus-send 可能更容易做到这一点。无论哪种方式,对于大多数 D-Bus 情况,您都需要了解四位信息。

  1. 巴士名称:org.pwmt.zathura.PID-1057698
  2. 路径:/org/pwmt/zathura
  3. 接口:org.pwmt.zathura
  4. 属性: numberofpages

我希望你的情况是这样的:

busctl --user get-property org.pwmt.zathura.PID-1057698 /org/pwmt/zathura org.pwmt.zathura numberofpages 

要在可能在大多数机器上 运行ning 的服务上尝试此操作:

  1. 巴士名称:org.freedesktop.systemd1
  2. 路径:/org/freedesktop/systemd1
  3. 接口:org.freedesktop.systemd1.Manager
  4. 属性: Architecture

然后 运行 它与两个实用程序:

dbus-send

$ dbus-send --session --print-reply --dest=org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.DBus.Properties.Get string:"org.freedesktop.systemd1.Manager" string:"Architecture"
method return time=1650033765.273653 sender=:1.0 -> destination=:1.176 serial=2677 reply_serial=2
   variant       string "x86-64"

busctl

$ busctl --user get-property org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager Architecture 
s "x86-64"