Frage Wie übergebe ich {sv} Argumente an gdbus?


Ich habe Probleme, die Argumente der Funktion in einem Wörterbuchformat (Zeichenfolge, Variante) zu übergeben; Ich versuche, einen Screencast in Gnome zu starten und um die Funktion zu starten, muss ich diese asrguments übergeben:

-method name="Screencast"-
  -arg type="s" direction="in" name="file_template"/-
  -arg type="a{sv}" direction="in" name="options"/-
  -arg type="b" direction="in" name="flash"/-
  -arg type="b" direction="out" name="success"/-
  -arg type="s" direction="out" name="filename_used"/-
-/method-

Das ist mein Ruf:

~$ gdbus call --session --dest org.gnome.Shell.Screencast --object-path /org/gnome/Shell/Screencast --method org.gnome.Shell.Screencast.Screencast "test_ %d_ %t.webm" {dict:string:variant:"draw-cursor",true,"framerate",35,pipeline,"vp8enc min_quantizer=13 max_quantizer=13 cpu-used=5 deadline=1000000 threads=%T ! queue ! webmmux"}

Dies ist die Rrror-Ausgabe: "a {sv}": 0-33: kann nicht als Wert des Typs 'a {sv}' parsen. Fehler ist in der Syntax? Danke


4
2017-10-15 21:27


Ursprung




Antworten:


a {sv} sollte wie folgt dargestellt werden:

"{'String': <'variant_value'>, 'String2': <'variant_value'>}"

Um das herauszufinden, habe ich org.freedesktop.DBus.Properties.GetAll auf einer Objektschnittstelle aufgerufen, weil das ein {sv} zurückgibt.

Die CreateInterface-Methode in wpa_supplicant benötigt beispielsweise ein {sv}:

gdbus call -y -d fi.w1.wpa_supplicant1 -o /fi/w1/wpa_supplicant1 -m fi.w1.wpa_supplicant1.CreateInterface "{'Ifname': <'wlan0'>}"

oder um mehrere Schnittstellen hinzuzufügen (ein echtes Array von string: variant):

"{'Ifname': <'wlan0'>, 'Ifname': <'wlan1'>}"

4
2017-10-16 17:31