Gentoo Linux Sway fcitx中文输入(通过X11支持)
在 Gentoo Linux Sway fcitx中文输入 中,最終實際上是採用了Xwayland來實現中文輸入:
在上次 Gentoo Linux Sway fcitx中文输入 实践中,实际上最终是启用了X支持来实现中文候选字的。我在最近的一次实践中,尝试 Gentoo Linux Sway(純wayland) fcitx中文输入 ,不过很不幸没有成功。所以我再次整理和总结通过启用X11支持来完成sway环境下的fcitx5中文输入。本文是最新的一次实践总结,相对较为精简和完整,请参考。
/etc/portage/package.use/fcitx5
:
/etc/portage/package.use/fcitx5
# 候選詞需要X支持
app-i18n/fcitx X
# fcitx啓用X之後,需要以下軟件包啓用參數
# required by x11-libs/pango-1.51.0::gentoo
# required by app-i18n/fcitx-4.2.9.8::gentoo[cairo,pango]
# required by @selected
# required by @world (argument)
#>=x11-libs/cairo-1.18.0 X
x11-libs/cairo X
dev-cpp/cairomm X
# required by app-i18n/fcitx-4.2.9.8::gentoo[cairo,pango]
# required by @selected
# required by @world (argument)
#>=x11-libs/pango-1.51.0 X
x11-libs/pango X
# required by app-i18n/fcitx-4.2.9.8::gentoo
# required by @selected
# required by @world (argument)
#>=x11-libs/libxkbcommon-1.6.0 X
x11-libs/libxkbcommon X
# 安装了 fcitx-gtk 之后发现依然没有能够显示候选字,看起来gtk+也需要X支持
# 候选字可能是采用gtk3绘制的,之前实践gtk+启用X use flags成功firefox显示候选字,但是我这次采用gtk启用X use flags无效
app-i18n/fcitx-gtk gtk3 gtk4
# gtk 实际上就是gtk4
# gtk+ 实际上就是gtk3
# 经过验证绘制候选字应该启用gtk3的X支持,所以我这里关闭了gtk4的X支持
#gui-libs/gtk X
# gtk+ 启用X支持,会有 dev-cpp/gtkmm 要求启用X的依赖
x11-libs/gtk+ X
dev-cpp/gtkmm X
/etc/portage/package.use/sway
:
/etc/portage/package.use/sway
# waybar replace swaybar
gui-apps/waybar ray
# foot终端支持cjk多字节语言(中文,日文,韩文)
dev-libs/libutf8proc cjk
# 当fcitx尝试wayland绘制窗口失败时,会自动回退到Xwayland,所以建议保留Xwayland支持
# fcitx和sway都需要启用X
gui-wm/sway X
# 以下是因为sway启用X之后对应依赖也需要启用X
# required by gui-wm/sway-1.8.1::gentoo
# required by @selected
# required by @world (argument)
#=gui-libs/wlroots-0.16.2-r2 X
gui-libs/wlroots X
# required by x11-base/xwayland-23.2.4::gentoo
# required by gui-libs/wlroots-0.16.2-r2::gentoo[X]
# required by gui-wm/sway-1.8.1::gentoo
# required by @selected
# required by @world (argument)
#>=media-libs/libepoxy-1.5.10-r2 X
media-libs/libepoxy X
# required by media-libs/mesa-23.3.5::gentoo
# required by media-libs/libepoxy-1.5.10-r2::gentoo[egl]
# required by x11-base/xwayland-23.2.4::gentoo
# required by gui-libs/wlroots-0.16.2-r2::gentoo[X]
# required by gui-wm/sway-1.8.1::gentoo
# required by @selected
# required by @world (argument)
#>=media-libs/libglvnd-1.7.0 X
media-libs/libglvnd X
# required by x11-base/xwayland-23.2.4::gentoo
# required by gui-libs/wlroots-0.16.2-r2::gentoo[X]
# required by gui-wm/sway-1.8.1::gentoo
# required by @selected
# required by @world (argument)
#>=media-libs/mesa-23.3.5 X
media-libs/mesa X
然后重新 emerge world
来更新USE flags:
emerge --ask --changed-use --deep @world
经过反复尝试(主要以firefox为输入对象),需要以下配套use flags:
app-i18n/fcitx
和gui-wm/sway
启用了X
在纯粹
wayland
环境的 sway 中,输入中文其实不需要X支持,fcitx5能够输入中文,但是无法绘制候选字匡(完全盲打)参考 gentoo+sway无法在WPS、foot、dingtalk应用中显示输入法候选窗口 #455 fcitx开发者wengxt的答复,提示需要在开启fcitx5的X支持
根据找到的资料,fcitx5如果不能使用wayland绘制候选字匡,就会回退到Xwayland绘制,所以开发者wengxt建议fcitx5启用X支持(其实还提示了需要在gtk2和gtk3开启X11,不过我最初没有理解,后来才想到原来绘制是通过gtk3实现的)
app-i18n/fcitx-gtk
同时启用了gtk3 gtk4
(可能只需要gtk3)我最初编译
fcitx-gtk
启用了gtk4
支持,并且我尝试了在gui-libs/gtk
启用X支持(我的想法是尝试纯GTK 4。但是发现依然无法显示候选字这说明fcitx5绘制候选字不是采用
gtk4
而是采用gtk3
x11-libs/gtk+
启用了X
这步非常重要,我最初只激活了
fcitx
和sway
的X
,发现依然无法弹出候选字(而我上一次实践是成功的,所以我对比了两次系统的use flags)firefox并非gtk程序,所以理论上其实并不需要
fcitx-gtk
,但是我发现我这次仅启用X
并不能显示候选字,对比了上次实践的use flags,发现上次是启用了gtk+
(也就是GTK3) 的X
我修订了
x11-libs/gtk+
启用X
的 use flag之后,就能够正常浮现候选字了
综上:
如果sway不能在纯wayland环境提供
text-inut-v3
绘制输入法popups(需要等待已经合入代码主干的sway发布下一个扳本),那么就需要启用sway和fcitx5的X11支持fcitx5的候选字绘制是采用GTK3来实现的,所以
x11-libs/gtk+
也需要激活X11
支持