用Onboard替换Gnomes虚拟键盘 - >通过DBus隐藏/显示不起作用

时间:2015-10-11 13:49:02

标签: gnome dbus gnome-shell gjs gdbus

我在平板电脑上使用Gnome作为日常驱动程序。集成的虚拟键盘不能替代真正的键盘,但我需要的确如此。因此我想用Onboard替换它,并开始为Gnome Shell编写扩展。目标是在隐藏/显示集成虚拟键盘时隐藏和显示Onboard。

我可以通过DBus显示/隐藏Onboard:

dbus-send --type=method_call --dest=org.onboard.Onboard /org/onboard/Onboard/Keyboard org.onboard.Onboard.Keyboard.Show

我在https://wiki.gnome.org/Gjs/Examples/DBusClient修改了示例以测试通过DBus显示/隐藏Onboard:

const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;

// This the D-Bus interface as XML
const OnboardInterface = '<node> \
  <interface name="org.onboard.Onboard.Keyboard"> \
    <method name="ToggleVisible"> \
    </method> \
    <method name="Show"> \
    </method> \
    <method name="Hide"> \
    </method> \
  </interface> \
</node>';

// Declare the proxy class based on the interface
const OnboardProxy = Gio.DBusProxy.makeProxyWrapper(OnboardInterface);

let OnbProxy = new OnboardProxy(
    Gio.DBus.system,
    "org.onboard.Onboard",
    "/org/onboard/Onboard/Keyboard"
);

OnbProxy.ShowSync()

let loop = new GLib.MainLoop(null, false);
loop.run();

可悲的是它没有显示Onboard,而是抛出了这个错误:

$ gjs ./test.js 
(gjs:13144): Gjs-WARNING **: JS ERROR: Gio.DBusError: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.onboard.Onboard was not provided by any .service files
_proxyInvoker@resource:///org/gnome/gjs/modules/overrides/Gio.js:98
_makeProxyMethod/<@resource:///org/gnome/gjs/modules/overrides/Gio.js:124
@./test.js:26

JS_EvaluateScript() failed

我不知道为什么它谈论服务时我不想做的就是通过DBus发送消息?这可能是一个相当愚蠢的错误,因为我对Gnome Shell扩展和DBus都没有任何经验。

Gnome的版本是3.18.0

1 个答案:

答案 0 :(得分:3)

找到解决方案:用Gio.DBus.session替换Gio.DBus.system

Onboard不是系统服务,而是在用户会话中启动,因此它无法正常工作。

只要对https://extensions.gnome.org/进行了验证,就可以在{{3}}上进行扩展,只需搜索&#34;板载集成&#34;。我还做了另一个相关的,&#34; Slide for keyboard&#34;做它说的(从底部滑动)