【问题标题】:gdbus call when click on panel extension icon单击面板扩展图标时调用 gdbus
【发布时间】:2018-02-22 16:59:58
【问题描述】:

是否可以在点击面板扩展图标时触发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

【问题讨论】:

    标签: gnome-shell gnome-shell-extensions


    【解决方案1】:

    有几个选项可供您使用。您可以使用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());
    
    • 免责声明:我很确定这是对的,我通常使用代理包装器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-23
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多