用 Onboard -> Hide/Show 通过 DBus 替换 Gnomes 虚拟键盘不起作用
Replacing Gnomes virtual keyboard with Onboard -> Hide/Show via DBus doesn't work
我在平板电脑上使用 Gnome 作为日常驱动程序。集成虚拟键盘不能替代真实键盘,但我确实需要它。因此我想用 Onboard 替换它,并开始为 Gnome Shell 编写一个扩展。目标是在集成虚拟键盘为 hidden/shown.
时隐藏和显示 Onboard
我可以 show/hide 像这样通过 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 中的示例以测试 showing/hiding 通过 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/ 验证后立即可用,只需搜索 "Onboard integration"。我也做了另一个相关的,"Slide for keyboard" 照它说的做(从底部滑动)
我在平板电脑上使用 Gnome 作为日常驱动程序。集成虚拟键盘不能替代真实键盘,但我确实需要它。因此我想用 Onboard 替换它,并开始为 Gnome Shell 编写一个扩展。目标是在集成虚拟键盘为 hidden/shown.
时隐藏和显示 Onboard我可以 show/hide 像这样通过 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 中的示例以测试 showing/hiding 通过 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/ 验证后立即可用,只需搜索 "Onboard integration"。我也做了另一个相关的,"Slide for keyboard" 照它说的做(从底部滑动)