1

gnome シェルの d-bus に問題があります。javascript でメッセージ dbus を介してスクリーンキャストを管理しようとしています。これはコードです:`

this.gdbusConnection = Gio.bus_get_sync(Gio.BusType.SESSION, null);

this.gdbusProxy = new Gio.DBusProxy({g_connection: this.gdbusConnection,
    g_flags: Gio.DBusProxyFlags.NONE ,
    g_interface_name: "org.gnome.Shell.Screencast",
    g_name: "org.gnome.Shell.Screencast", 
    g_object_path: "/org/gnome/Shell/Screencast"});

this.gdbusProxy.call("org.gnome.Shell.Screencast.Screencast", null, Gio.DBusCallFlags.NONE, -1, null, this._doExtensionPreferences, null);`

このコードを実行すると、dbus モニターに次のように表示されます。

    ~$ dbus-monitor "interface=org.gnome.Shell.Screencast"
signal sender=org.freedesktop.DBus -> dest=:1.103 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
   string ":1.103"
method call sender=:1.19 -> dest=org.gnome.Shell.Screencast serial=495 path=/org/gnome/Shell/Screencast; interface=org.gnome.Shell.Screencast; member=Screencast
method call sender=:1.19 -> dest=org.gnome.Shell.Screencast serial=500 path=/org/gnome/Shell/Screencast; interface=org.gnome.Shell.Screencast; member=StopScreencast

問題は送信者だと思います.dbusモニターで従来の方法でsceencastを開始すると、同じ関数が呼び出されますが、送信者が異なるため、何か提案はありますか?

    method call sender=:1.6 -> dest=:1.19 serial=228 path=/org/gnome/Shell/Screencast; interface=org.gnome.Shell.Screencast; member=Screencast
   string "Screencast da %d %t.webm"
   array [
   ]
method call sender=:1.6 -> dest=:1.19 serial=229 path=/org/gnome/Shell/Screencast; interface=org.gnome.Shell.Screencast; member=StopScreencast

編集:これは正しいコードです。

const MyProxy = Gio.DBusProxy.makeProxyWrapper(LibRecorder.ScreencastIface);
this.instance = new MyProxy(Gio.DBus.session, 'org.gnome.Shell.Screencast','/org/gnome/Shel/Screencast'
    , Lang.bind(this, function(proxy, error) {
        if (error) {
            log(error.message);
            return;
        } else 
            Lib.TalkativeLog('ESC > d-bus proy connected');
}));

this.instance.ScreencastRemote("test_proxy_ %d_ %t.webm", null, Lang.bind(this, function(result, error) {
    if (error) {
        log(error.message);
        return;
    } else 
        Lib.TalkativeLog('ESC > screencast execute - '+result[0]+' - '+result[1]);
}));
4

0 に答える 0