CentOS 屏幕键盘未显示 Java Swing 文本输入字段

CentOS On screen keyboard not showing for Jawa Swing Text entry fields

我们有一个 Java swing 应用程序,在 CentOS 上有文本字段 运行,没有物理键盘。在 CentOS 中,在通用访问下,我们可以打开屏幕键盘,只要在任何应用程序上输入文本,屏幕键盘就会出现。当我们使用终端或 GEdit 或类似应用程序时,这非常有效。但是当我们使用 Java Swing 应用程序时,OS 似乎不理解文本输入字段的存在,也不会调出键盘。

有一个选项可以让键盘始终保持打开状态,但它不适合我们的应用程序,尽管它解决了这个问题。键盘应该只在有文本输入时按需出现。另外像Florence这样的第三方键盘也不能满足客户要求。

有没有办法通过代码强制以编程方式在 CentOS 的屏幕键盘上调出 Caribou? (在 Ubuntu 16.04 中,可以通过调用命令 "onboard" 调出屏幕键盘 "Onboard")

更新:解决方案不需要具体通过 Java。即使是命令或shell脚本,我也可以在Java中使用Processbuilder来调用它。

在 CentOS 7 (GNOME) 中,屏幕键盘作为一项名为 "Caribou" 的服务运行。它监听到 auto-show/hide 的 dbus 消息。通过发送适当的 dbus 信号,我们可以强制 show/hide 屏幕键盘。 因此,当获得焦点时(对于 Java Swing 控件),dbus 信号在程序内部发送到 show/hide CentOS 7 中的屏幕键盘。

这些终端命令可以尝试模拟这个

dbus-send --type=method_call --dest=org.gnome.Caribou.Keyboard /org/gnome/Caribou/Keyboard org.gnome.Caribou.Keyboard.Show uint32:0
dbus-send --type=method_call --dest=org.gnome.Caribou.Keyboard /org/gnome/Caribou/Keyboard org.gnome.Caribou.Keyboard.Hide uint32:0

还有一个 java 库也用于发送 dbus 消息。 https://dbus.freedesktop.org/doc/dbus-java/dbus-java/

但是 CentOS 7.5 中似乎缺少 Caribou dbus 接口的 Show/Hide 接口

在 CentOS 7(KDE) 中,键盘小部件可以添加到任务栏,并且可以为 showing/hiding 屏幕键盘分配快捷方式。从 java 程序可以将此快捷键模拟为 show/hide 屏幕键盘。