单击面板扩展图标时调用 gdbus
gdbus call when click on panel extension icon
是否可以在点击面板扩展图标时触发 gdbus call
?
在我的具体示例中,我想调用以下命令来更改单击扩展程序图标时的显示亮度。
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp
有几个选项可供您选择。您可以使用 GLib.spawn_command_line_async()
:
生成该命令
const Lang = imports.lang;
const PanelMenu = imports.ui.panelMenu;
const St = imports.gi.St;
const ExamplePanel = new Lang.Class({
Name: "ExamplePanelButton",
Extends: PanelMenu.Button,
_init: function () {
this.parent(null, "ExamplePanelButton");
// Icon
this.icon = new St.Icon({
icon_name: "view-refresh-symbolic",
style_class: "system-status-icon"
});
this.icon.connect("clicked", () => GLib.spawn_command_line_async(
"gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp"
));
this.actor.add_actor(this.icon);
}
});
但是也有相当广泛的 DBus API 可用,例如 creating proxy wrappers 的这个较旧的示例。或者您可以进行原始 DBus 调用:
const Gio = imports.gi.Gio;
//
let proxy = new Gio.DBusProxy({
g_connection: Gio.DBus.session,
g_name: "org.gnome.SettingsDaemon.Power",
g_object_path: "/org/gnome/SettingsDaemon/Power",
g_interface_name: "org.gnome.SettingsDaemon.Power.Screen"
});
proxy.init(null);
let returnValue = proxy.call_sync(
"org.gnome.SettingsDaemon.Power.Screen.StepUp",
null, // method args
0, // call flags
-1, // timeout
null // cancellable
);
log(returnValue.deep_unpack());
- 免责声明:我很确定这是对的,我通常使用代理包装器。
是否可以在点击面板扩展图标时触发 gdbus call
?
在我的具体示例中,我想调用以下命令来更改单击扩展程序图标时的显示亮度。
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp
有几个选项可供您选择。您可以使用 GLib.spawn_command_line_async()
:
const Lang = imports.lang;
const PanelMenu = imports.ui.panelMenu;
const St = imports.gi.St;
const ExamplePanel = new Lang.Class({
Name: "ExamplePanelButton",
Extends: PanelMenu.Button,
_init: function () {
this.parent(null, "ExamplePanelButton");
// Icon
this.icon = new St.Icon({
icon_name: "view-refresh-symbolic",
style_class: "system-status-icon"
});
this.icon.connect("clicked", () => GLib.spawn_command_line_async(
"gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp"
));
this.actor.add_actor(this.icon);
}
});
但是也有相当广泛的 DBus API 可用,例如 creating proxy wrappers 的这个较旧的示例。或者您可以进行原始 DBus 调用:
const Gio = imports.gi.Gio;
//
let proxy = new Gio.DBusProxy({
g_connection: Gio.DBus.session,
g_name: "org.gnome.SettingsDaemon.Power",
g_object_path: "/org/gnome/SettingsDaemon/Power",
g_interface_name: "org.gnome.SettingsDaemon.Power.Screen"
});
proxy.init(null);
let returnValue = proxy.call_sync(
"org.gnome.SettingsDaemon.Power.Screen.StepUp",
null, // method args
0, // call flags
-1, // timeout
null // cancellable
);
log(returnValue.deep_unpack());
- 免责声明:我很确定这是对的,我通常使用代理包装器。