用 Onboard -> Hide/Show via DBus 替换 Gnomes 虚拟键盘不起作用

Posted

技术标签:

【中文标题】用 Onboard -> Hide/Show via DBus 替换 Gnomes 虚拟键盘不起作用【英文标题】:Replacing Gnomes virtual keyboard with Onboard -> Hide/Show via DBus doesn't work 【发布时间】:2016-01-09 00:34:16 【问题描述】:

我在平板电脑上使用 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

【问题讨论】:

你是在 XServer 还是 Wayland 上,Onboard 似乎在 Wayland 上完全死了。 【参考方案1】:

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

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

验证后,扩展程序将在https://extensions.gnome.org/ 上可用,只需搜索“板载集成”即可。我也做了另一个相关的,“键盘滑动”按照它说的做(从底部滑动)

【讨论】:

您应该将此标记为您自己问题的答案!这些扩展太棒了!

以上是关于用 Onboard -> Hide/Show via DBus 替换 Gnomes 虚拟键盘不起作用的主要内容,如果未能解决你的问题,请参考以下文章

DJI Onboard-SDK ROS 安装 catkin_ws 的位置

jquery hide,show方法问题

.hide()、.show()、表格和 IE

javascript javascript hide / show

ng-hide / ng-show 中是不是可以使用复杂的表达式?

javascript 如何实现jquery中hide(),show()的功能?