<div dir="ltr"><div dir="ltr">Thanks for all the replies, these have inspired me and I got the signature correctly set.</div><div dir="ltr"></div><div>I past the code just as a reference, for the a(sv) part with v being an array of uint32, 'au'.</div><div dir="ltr"><br></div><div>It is still not working but at least I got the message well formed.. it seems. Now I get: "Process org.freedesktop.systemd1 exited with status 1" as a reply but I cannot see anything in 'dbus-monitor --system', so I guess the message is still not being sent? <br></div><div><br></div><div>For newbies like me trying to debug this, it is helpful to add some debug just printing the signature of the message while you are creating with dbus_message_get_signature(msg). You can use also dbus_message_iter_get_signature for the iterators. Also I used dbus/tools/dbus-print-message.h functions to print my message internals.<br></div><div><br></div><div>]# ./main 12568<br>-- Starting query --<br>Calling remote method with 12568<br>SIGNATURE IS0: ss<br>SIGNATURE IS1: ssa(sv)<br>SIGNATURE IS2: ssa(sv)a(sa(sv))<br>method call sender=(null sender) -> destination=org.freedesktop.systemd1 serial=0 path=/org/freedesktop/systemd1; interface=org.freedesktop.systemd1.Manager; member=StartTransientUnit<br>   string "my_test.scope"<br>   string "fail"<br>   array [<br>      struct {<br>         string "PIDs"<br>         variant             array [<br>               uint32 12568<br>            ]<br>      }<br>   ]<br>   array [<br>   ]<br>Request Sent... blocking for reply.<br><br>-- Reply received --<br>output says: Process org.freedesktop.systemd1 exited with status 1</div><div></div><div><br></div><div>Below how I formed the 'a(sv)' with v being 'au' (note, no error control!):<br></div><div dir="ltr"></div><div dir="ltr">---<br></div><div dir="ltr">static dbus_bool_t _dbus_asv_add_fixed_array(DBusMessageIter *arr_iter,<br>                                          const char *key, char element_type,<br>                                         const void *value, int n_elements)<br>{<br>  /* Signature for the container v - 'array of <uint32>' */<br>       char sigy[] = { DBUS_TYPE_ARRAY, element_type, '\0' };<br>        char sigx[5];<br> DBusMessageIter it1, it2, it3, it4;<br><br> /* Signature for the container - (sv) part */<br> sigx[0] = DBUS_STRUCT_BEGIN_CHAR;<br>     sigx[1] = DBUS_TYPE_STRING;<br>   sigx[2] = DBUS_TYPE_VARIANT;<br>  sigx[3] = DBUS_STRUCT_END_CHAR;<br>       sigx[4] = '\0';<br><br>     dbus_message_iter_open_container(arr_iter, DBUS_TYPE_ARRAY, sigx, &it1); /* Open array*/<br>  dbus_message_iter_open_container(&it1, DBUS_TYPE_STRUCT, NULL, &it2); /* Open struct */<br>       dbus_message_iter_append_basic(&it2, DBUS_TYPE_STRING, &key); /* Insert string */<br>     dbus_message_iter_open_container(&it2, DBUS_TYPE_VARIANT, sigy, &it3); /* Open variant */<br>     dbus_message_iter_open_container(&it3, DBUS_TYPE_ARRAY, (sigy + 1), &it4); /* Open array */<br>   dbus_message_iter_append_fixed_array(&it4, element_type , &value, n_elements); /* Insert elements */<br>  dbus_message_iter_close_container(&it3, &it4); /* Close array */<br>      dbus_message_iter_close_container(&it2, &it3); /* Close variant */<br>    dbus_message_iter_close_container(&it1, &it2); /* Close struct */<br>     dbus_message_iter_close_container(arr_iter, &it1); /* Close array */<br><br>    return true;<br>}</div></div>