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



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

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

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显示/隐藏板载:

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

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

Onboard不是一个系统服务,而是在用户会话中启动的,因此它不能工作。

扩展将在https://extensions.gnome.org/上,只要它被验证,只需搜索"板载集成"。我还做了另一个相关的,"Slide for keyboard"(从底部滑动)

相关内容

  • 没有找到相关文章

最新更新