web-dev-qa-db-ja.com

a {sv}引数をgdbusに渡す方法は?

関数の引数を辞書形式(文字列、バリアント)で渡すことに問題があります。私はgnomeでスクリーンキャストを実行し、これらの引数を渡す必要がある機能を開始しようとします:

-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-

これは私の電話です:

~$ 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"}

これはrror出力です: "a {sv}":0-33:タイプ 'a {sv}'の値として解析できません。エラーは構文にありますか?どうも

4
user552771

a {sv}は次のように表す必要があります。

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

これを理解するために、オブジェクトインターフェイスでorg.freedesktop.DBus.Properties.GetAllを呼び出しました。これは、{sv}を返すためです。

たとえば、wpa_supplicantのCreateInterfaceメソッドはa {sv}を取ります。

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

または、複数のインターフェイス(string:variantの真の配列)を追加するには:

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