Linux 平台都有哪些输入法? 我只听说过 ibus 和 fcitx,然后没有了。其他的输入法,要么基于ibus,或者基于 fcitx 实现的插件。比如 百度输入法是基于 fcitx 插件实现的, rime 在linux 平台上,官方的是基于 ibus 实现的,社区版本是基于 fcitx 实现的。
对于我来说,无论是ibus 还是 fcitx,第一印象都是界面丑陋,配置复杂,偶尔还会出现bug。特别是 fcitx 的rime 插件,总是会出现很难切换的bug。
所以,有没有办法绕过 ibus 和 fcitx,自己实现一个输入法呢?
调研
我们都知道, Linux 有 2 个图形显示协议:X11 和 Wayland 。 还有好几个桌面,其实最出名的是 KDE 和 GNOME。
但是其实对于输入法而言,最重要的是合成器。其中,KDE 使用的是 KWin,GNOME 使用的是 Mutter 合成器。
又由于 X11 基本被判了死缓,所以,我们只讨论 Wayland 的情况。
Wayland 的输入法框架分为两部分,使用合成器作为中介:
- 合成器与输入法之间的协议唤作 input-method-v1 和 input-method-v2
- 合成器与
Wayland客户端(就是我们平时用的应用程序 )之间的协议唤作 text-input-v1 、text-input-v2、text-input-v3、text-input-v4 四个版本
输入法 <=> 合成器 <=> 应用程序
所以这个合成器很重要。麻烦的是,合成器有很多个,比如 KWin、Mutter、Sway 等等。 应用程序的 text input 协议一般要看框架的情况,比如:
- QT: v2 v3 v4
- Chromium/Electron: v1 v3
- GTK:v3
输入法反而简单得多,因为就2个平台:
- ibus:input-method-v1 和 input-method-v2
- fcitx:input-method-v1 和 input-method-v2
由于合成器基本是和桌面绑定的,所以,选择桌面环境也约等于选择了默认的合成器。
而上面的内容还只是 Wayland 的情况,我们还有一个 X11 来要兼容,因为目前有非常大量的软件其实是以 X11 作为默认的显示引擎,哪怕你的桌面是以 Wayland 启动的。
看了上面的内容,你就会明白为什么商业输入法一般都基于
ibus或者fcitx插件了。因为Linux平台太过于碎片化了! 是个正常人都不愿意干这个活。