How to use a variant dictionary (`a{sv}`) in dbus-send

前端 未结 3 1881
梦如初夏
梦如初夏 2021-02-05 18:59

I have some trouble with dbus-send when using a{sv}

Calling a method with in_signature=\'a{ss}\' seems to work using the followin

相关标签:
3条回答
  • 2021-02-05 19:17

    Although D-Bus supports signatures such as a{sv}, dbus-send does not. This is from the dbus-send man page:

    "...D-Bus supports more types than these, but dbus-send currently does not. Also, dbus-send does not permit empty containers or nested containers (e.g. arrays of variants)."

    So as far as I can understand it, you cannot send a dict of string:variant using dbus-send.

    0 讨论(0)
  • 2021-02-05 19:31

    You need to compile dbus-send with the following patch.

    https://chromium-review.googlesource.com/#/c/12323/2/sys-apps/dbus/files/dbus-1.4.12-send-variant-dict.patch

    FYR, I uploaded the patched full source at this link.

    https://gitlab.com/mujicion/dbus-send.git

    0 讨论(0)
  • 2021-02-05 19:39

    Not possible with dbus-send

    As mentioned, dbus-send does not support all Dbus types. From dbus-send man page:

    Also, dbus-send does not permit empty containers or nested containers (e.g. arrays of variants).


    But possible gdbus

    Buried in https://www.freedesktop.org/software/gstreamer-sdk/data/docs/2012.5/gio/gdbus.html we see this:

    gdbus call --session \
               --dest org.freedesktop.Notifications \
               --object-path /org/freedesktop/Notifications \
               --method org.freedesktop.Notifications.Notify \
               my_app_name \
               42 \
               gtk-dialog-info \
               "The Summary" \
               "Here's the body of the notification" \
               [] \
               {} \
               5000
    

    Bonus: this method returns the id, so you can close or replace the notification.

    0 讨论(0)
提交回复
热议问题