gpt4 book ai didi

dbus - 如何将字符串发送到 gnome-shell 扩展?

转载 作者:行者123 更新时间:2023-12-01 10:37:16 36 4
gpt4 key购买 nike

我认为应该使用 D-Bus。基本上,我想要这样的东西——https://wiki.gnome.org/Gjs/Examples/DBusClient ——但反过来。

在扩展中,会有一个函数:

function f(s) { doSomethingWithS; }

并且这个函数会在运行后被调用:

$ <something> "abc"

... 在终端中,使用 s == "abc".


根据@Jasper 和@owen 在irc.gnome.org#gnome-shell 的建议,我改编了https://github.com/GNOME/gnome-shell/blob/master/js/ui/magnifierDBus.js 中的一些代码:

const St = imports.gi.St;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Main = imports.ui.main;

let text;

function init() {
text = new St.Label({ text: "0:0", style_class: 'panel-text' });
}

function enable() {
Main.panel._rightBox.insert_child_at_index(text, 0);
}

function disable() {
Main.panel._rightBox.remove_child(text);
}

const TextInTaskBarIface = '<node> \
<interface name="com.michalrus.TextInTaskBar"> \
<method name="setText"> \
<arg type="s" direction="in" /> \
</method> \
</interface> \
</node>';

const TextInTaskBar = new Lang.Class({
Name: 'TextInTaskBar',

_init: function() {
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(TextInTaskBarIface, this);
this._dbusImpl.export(Gio.DBus.session, '/com/michalrus/TextInTaskBar');
},

setText: function(str) {
text.text = str;
}
});

现在,发布后:

% dbus-send --dest=com.michalrus.TextInTaskBar /com/michalrus/TextInTaskBar \
com.michalrus.TextInTaskBar.setText string:"123"

……什么也没发生。

最佳答案

gnome-shell 扩展 D-Bus 服务器的最终工作版本:

const St = imports.gi.St;
const Gio = imports.gi.Gio;
const Lang = imports.lang;
const Main = imports.ui.main;

let text = null;
let textDBusService = null;

function init() {
text = new St.Label({ text: "0:0", style_class: 'panel-text' });
textDBusService = new TextInTaskBar();
}

function enable() {
Main.panel._rightBox.insert_child_at_index(text, 0);
}

function disable() {
Main.panel._rightBox.remove_child(text);
}

const TextInTaskBarIface = '<node> \
<interface name="com.michalrus.TextInTaskBar"> \
<method name="setText"> \
<arg type="s" direction="in" /> \
</method> \
</interface> \
</node>';

const TextInTaskBar = new Lang.Class({
Name: 'TextInTaskBar',

_init: function() {
text.text = "abc";
this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(TextInTaskBarIface, this);
this._dbusImpl.export(Gio.DBus.session, '/com/michalrus/TextInTaskBar');
},

setText: function(str) {
text.text = str;
}
});

调用:

$ gdbus call --session --dest org.gnome.Shell --object-path /com/michalrus/TextInTaskBar --method com.michalrus.TextInTaskBar.setText 'some text'

关于dbus - 如何将字符串发送到 gnome-shell 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33001192/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com