如何使用 DBus 打开扩展首选项?

How to open extension prefs with DBus?

$ gnome-shell --version      
GNOME Shell 40.2

我正在尝试在 gjs-console 中打开扩展首选项。

我找到了一种使用 dbus-send 打开首选项的方法

dbus-send --session --print-reply --reply-timeout=2000 --type=method_call --dest=org.gnome.Shell.Extensions /org/gnome/Shell/Extensions org.gnome.Shell.Extensions.LaunchExtensionPrefs string:'text-translator'

但我坚持使用 gjs

  1. 运行 gjs-console
  2. 连接到总线代理并调用该方法。 PS 您可以尝试为您想要的任何其他扩展打开首选项,将“text-translator”替换为您的扩展 uuid “
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
dbus = Gio.DBusProxy.new_for_bus_sync(Gio.BusType.SESSION, Gio.DBusProxyFlags.NONE, null, "org.gnome.Shell", "/org/gnome/Shell/Extensions", "org.gnome.Shell.Extensions", null);
dbus.call_sync("LaunchExtensionPrefs", new GLib.Variant("(s)", [ "text-translator" ]), 0, -1, null);

但是出现这个错误:

typein:4:6 uncaught exception: Object
  @typein:4:6
  @<stdin>:1:42

-我不知道如何调试它。

我的问题是从我的扩展中打开我的扩展首选项。如果有任何其他方法可以做到这一点,我愿意接受任何帮助。

好吧,现在我看到错误在 object_pathnew_for_bus_sync 的参数中。我使用了 /org/gnome/Shell/Extensions 而预期 /org/gnome/Shell

这个脚本工作正常

const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
dbus = Gio.DBusProxy.new_for_bus_sync(Gio.BusType.SESSION, Gio.DBusProxyFlags.NONE, null, "org.gnome.Shell", "/org/gnome/Shell", "org.gnome.Shell.Extensions", null);
dbus.call_sync("LaunchExtensionPrefs", new GLib.Variant("(s)", [ "text-translator" ]), 0, -1, null);

My problem is to open my extension prefs from inside my extension.

可以直接打开:

Main.extensionManager.openExtensionPrefs('your-extension-uuid', '', {});