Fcitx
Fcitx (Free Chinese Input Toy for X) 是一个轻量级的输入法框架,旨在为 Linux 提供独立于环境的语言支持。它支持多种不同的语言,并提供许多有用的非 CJK 功能。
安装
输入法引擎
根据您希望输入的语言,还可以使用其他输入法引擎:
中文
- fcitx-baidupinyinAUR,百度拼音输入法引擎的 Fcitx 封装。
- fcitx-chewingAUR 是一款基于 libchewing 的繁体中文注音输入引擎。
- fcitx-cloudpinyinAUR 使用网络资源提供输入候选词。选择的云端结果将被添加到本地词库。它支持除 fcitx-rimeAUR 之外的所有 Fcitx 拼音输入法。
- fcitx-googlepinyinAUR,谷歌拼音输入法的 Fcitx 封装。
- fcitx-rimeAUR,基于 Rime 输入法项目的方案。
- fcitx-sogoupinyinAUR,搜狗输入法,支持简拼、模糊音、云输入、英文输入及混合皮肤。
- fcitx-sunpinyinAUR,基于 sunpinyin,在速度和准确性之间取得了很好的平衡。
日语
- fcitx-anthyAUR,一款流行的日语输入引擎。但目前已不再积极开发。
- fcitx-mozcAUR,基于 Mozc(Google 日语输入法的开源版本)。
- fcitx-kkcAUR,基于 libkkc 的日语假名汉字输入引擎。
- fcitx-skkAUR,基于 libskk 的日语假名汉字输入引擎。
其他语言
- fcitx-hangulAUR,基于 libhangul,用于输入韩文。
- fcitx-m17nAUR,用于由 M17n 提供的其他语言。
- fcitx-sayuraAUR,用于输入僧伽罗语。
- fcitx-unikeyAUR,用于输入越南语字符。
输入法模块
为了在 Qt 程序中获得更好的体验,请根据需要安装 fcitx-qt4AUR、fcitx-qt5AUR 或 fcitx-qt6AUR 输入法模块。如果没有这些模块,输入法可能在大多数应用程序中有效,但可能会遇到输入法挂起、预览窗口屏幕位置错误或无预览错误。
以下应用程序不使用 GTK/Qt 输入模块:
- 使用 Tk、motif 或 xlib 的应用程序:
- Emacs、Opera、OpenOffice、LibreOffice、Wine、Java、Xterm、urxvt、WPS。
其他
- fcitx-ui-lightAUR,Fcitx 的轻量级界面。
- fcitx-table-extraAUR 增加了对仓颉、郑码、行列输入法的支持。
- fcitx-table-otherAUR,Latex、Emoji 等的输入表。
- #图形化配置工具
其他软件包(包括 git 版本)也可在 AUR 中获得。安装所有 Fcitx 组件后,通常需要重新启动 Fcitx。
用法
桌面环境自动启动
如果您正在使用任何兼容 XDG 的桌面环境,如 KDE、GNOME、Xfce、LXDE,重新登录后,自动启动功能应直接生效。如果无效,请运行 fcitx 可执行文件。要查看 Fcitx 是否正常工作,打开一个应用程序并按 Ctrl+Space(默认的切换输入法快捷键)来调用 Fcitx 并输入一些字符。
如果 Fcitx 未能随桌面自动启动,或者您想更改启动参数,请配置自动启动,或编辑 ~/.config/autostart/ 目录下的 fcitx-autostart.desktop 文件(如果不存在,请从 /etc/xdg/autostart/ 复制)。
当其他支持 XIM 的输入法也在运行时,Fcitx 可能会因为 XIM 错误而无法启动。请确保在启动 Fcitx 之前没有其他输入法在运行。
此外,请设置以下环境变量,以便 GTK/Qt 应用程序优先使用输入法模块。
对于 i3 和 Sway 用户,请在配置文件中添加 exec --no-startup-id fcitx -d。如果您使用的是 fcitx5,则应添加 exec --no-startup-id fcitx5 -d。
设置输入法模块的环境变量
设置以下环境变量以注册输入法模块。
GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx
如果没有这些变量,应用程序可能会回退到 XIM 协议(Qt5 应用程序除外,它们不支持 XIM,必须使用输入法模块)。
如果 fcitx 进程未自动启动,您可能需要在 ~/.xinitrc 中添加 fcitx &。如果 fcitx & 启动失败,可以在其后添加 sleep 2。
- 避免在
.bashrc中设置这些变量,请参阅 GregsWiki:DotFiles。 - 如果所有 Qt 应用程序在使用 Fcitx 时都有问题,请运行 qtconfig (qtconfig-qt4),进入第三个选项卡,确保 fcitx 在 Default Input Method 下拉菜单中。
XIM
您可以选择在 GTK 和/或 Qt 程序中使用 X Input Method (XIM),而无需安装上述模块。在这种情况下,您需要按如下方式更改相应的环境变量。
GTK_IM_MODULE=xim QT_IM_MODULE=xim
如果您在 ~/.xprofile 或 ~/.xinitrc 中修改,请添加 export。
- 自 2.24.20 版本起,Gtk2 使用
/usr/lib/gtk-2.0/2.10.0/immodules.cache作为 immodule 缓存文件。如果您设置了GTK_IM_MODULE_FILE环境变量,或者没有使用官方软件包的安装脚本来更新缓存,请更改/清除该环境变量,并使用/usr/bin/gtk-query-immodules-2.0 --update-cache来更新 immodule 缓存。 - Qt5 应用程序不再像 Qt4 那样支持 XIM 协议,完全依赖于输入法模块来与 Fcitx 通信。
配置
GUI 配置工具
Fcitx 提供了 KDE 配置模块 (kcm-fcitxAUR) 和一个 GTK3 配置工具 (fcitx-configtoolAUR)。
安装 fcitx-configtoolAUR 后,运行 fcitx-config-gtk3。如果您想为其他语言启用输入法,请取消勾选“只显示当前语言”。
在更改配置前,请手动停止 Fcitx,否则更改可能会丢失。
若要启用拼写检查,请在 Fcitx 使用由 fcitx-keyboard 提供的输入法时,按 Ctrl+Alt+h。
输入法配置
您可以在图形化工具中添加/删除输入法。请注意,搜索是区分大小写的。
第一个设置的输入法为非激活状态,其余均为激活状态。通常,您希望非激活状态是“键盘”选项之一(例如“Keyboard - English (US)”)。这些选项仅基于名称中的键盘布局进行输入。
在“全局配置”下,“触发输入法”快捷键仅在非激活状态和最近使用的激活状态之间切换。“切换输入法”默认仅在不同的激活状态之间切换,但也可以在高级设置中设置为包含非激活状态。此外,切换快捷键必须按顺序按下,例如,如果设置为 ALT_SHIFT,则只有先按下 alt 再按下 shift 才会激活。
输入法的配置设置可以通过将输入法切换到目标输入法并右键点击托盘图标来找到。
更改默认界面
Fcitx 支持 kimpanel 协议以提供更好的桌面整合。
- Gnome-Shell:您可以从 extensions.gnome.org 或安装 gnome-shell-extension-kimpanel-gitAUR 来使用 kimpanel,它提供类似于 ibus-gjs 的用户体验。
扩展拼音词库
拼音词库位于 ~/.config/fcitx/pinyin。pybase.mb 文件用于单字,pyphrase.mb 文件定义拼音词组。要扩展它们,将您的文件放入 /usr/share/fcitx/pinyin 并重启 Fcitx。
皮肤
您可以下载皮肤并将其解压到以下目录之一(如果目录不存在,可以手动创建):
/usr/share/fcitx/skin(全局设置)~/.config/fcitx/skin(用户设置)
云拼音配置
安装 fcitx-cloudpinyinAUR 输入法后,重启 Fcitx。如果您在配置界面中找不到它,请启用高级设置。云端查询结果将自动添加到当前输入法的词库中。
如果您的网络无法访问 Google,请将云拼音源更改为百度。
云端查询结果默认列为次候选词,这是可配置的。如果结果已存在,则只显示一项。
技巧与提示
快捷键
一些常用的默认快捷键:
Ctrl+Space- 激活输入法Left Shift- 临时切换到英文Ctrl+Shift- 在输入法之间切换-/=- 向前/向后翻页Shift+Space- 全角/半角切换
Vim
如果您经常在 Vim 下使用 Fcitx,可以安装 vim-fcitxAUR 插件,或将以下代码添加到 ~/.vimrc。退出插入模式时,Fcitx 会自动关闭,反之亦然。
"##### auto fcitx ###########
let g:input_toggle = 1
function! Fcitx2en()
let s:input_status = system("fcitx-remote")
if s:input_status == 2
let g:input_toggle = 1
let l:a = system("fcitx-remote -c")
endif
endfunction
function! Fcitx2zh()
let s:input_status = system("fcitx-remote")
if s:input_status != 2 && g:input_toggle == 1
let l:a = system("fcitx-remote -o")
let g:input_toggle = 0
endif
endfunction
set ttimeoutlen=150
"Exit insert mode
autocmd InsertLeave * call Fcitx2en()
"Enter insert mode
autocmd InsertEnter * call Fcitx2zh()
"##### auto fcitx end ######
特殊符号
创建 ~/.config/fcitx/data/pySym.mb,文件内容如下:
#The first line with "#" is a comment #Format: coding symbol #Code can only be lowercase letters, after pinyin analysis, the longest is 10 (such as py is 2, pinyin is also 2) #Mathematics symbols sxfh + sxfh - sxfh < sxfh = sxfh > sxfh ± sxfh × sxfh ÷ sxfh ∈ sxfh ∏ sxfh ∑ sxfh ∕ sxfh √ sxfh ∝
直接输入代码即可匹配对应的特殊符号。
剪贴板访问
您可以使用 Fcitx 输入剪贴板中的文本(以及简短的剪贴板历史和主要选择区)。默认触发键是 Ctrl-;。您可以在剪贴板插件配置页面更改触发键及其他选项。
fcitx-remote
fcitx-remote 是一个可用于控制 Fcitx 状态的命令行工具。它随 fcitxAUR 软件包安装。
这里值得一提的选项是 fcitx-remote -s imname,它可以切换到由 imname 指定的输入法。正在使用的输入法的正确 imname 可以通过执行 fcitx-diagnose 并查看“## Input Methods:”部分找到。
输入特殊字符
请参阅 Fcitx5#输入特殊字符,该内容同样适用于 Fcitx。
故障排除
禁用或更改“额外的输入法触发键”
此设置位于“全局配置”选项卡下,默认为 SHIFT Both,这意味着按下 任何一个 Shift 键都会立即切换输入法。尽管这应该仅在单独按下 Shift 键时生效,但在标准键盘输入过程中,它往往会随机中断大写字母输入、键盘选择文本等操作。
此外,此设置可能会在没有任何警告的情况下恢复为默认值。为了确保 Fcitx 的配置无法被修改,您必须将文件设置为不可变:chattr +i ~/.config/fcitx/config(以 root 用户身份)。
诊断问题
如果您在使用 Fcitx 时遇到问题(例如在所有应用程序中 Ctrl+Space 均无效),您应该首先尝试使用 fcitx-diagnose 进行诊断。fcitx-diagnose 的输出通常包含常见问题的线索。提供其输出在您咨询他人(例如在 IRC 或论坛)时也会有所帮助。
Emacs
如果您的 LC_CTYPE 设置为英文,由于旧的 Emacs Bug,您可能无法在 Emacs 中使用输入法。您可以在 Emacs 启动前将 LC_CTYPE 设置为其他值(例如 zh_CN.UTF-8)来解决此问题。
默认字体集使用 `-*-*-*-r-normal--14-*-*-*-*-*-*-*' 作为基础字体(在 src/xfns.c 中),如果您没有匹配的字体(可以通过查看 `xlsfonts` 的输出确认),XIM 将无法激活。根据 FAQ 和 字体,很可能应该安装 xorg-fonts-misc-otbAUR,因为 xorg-fonts-misc 不再提供必需的字体集。
Emacs 守护进程
如果您正在使用 emacs 守护进程/客户端模式,则在启动守护进程时应设置 LC_CTYPE。例如:使用 LC_CTYPE=zh_CN.UTF-8 emacs --daemon 运行 emacs 守护进程。
如果从 systemd 启动 emacs 守护进程,请在单元文件中设置 Environment="LC_CTYPE=zh_CN.UTF-8" "XMODIFIERS=@im=fcitx"。
(XMODIFIERS 可能需要在此明确设置,因为 systemd 不会加载 .xprofile。检查 emacs 中的 initial-environment 变量以验证两个变量是否已正确设置。)
在 GTK 程序中 Ctrl+Space 无效
此问题有时会发生,特别是当区域设置(Locale)为英文时。请确保您的 GTK_IM_MODULE 已正确设置。
另请参阅 FAQ。
如果您已将 *_IM_MODULE 环境变量设置为 fcitx 但无法激活,请检查是否已安装相应的输入法模块。
某些程序只能使用 XIM。如果您正在使用这些程序,请确保正确设置了 XMODIFIERS 并意识到可能出现的问题。这些程序包括所有不使用 GTK 或 Qt 的程序(例如直接使用 tk、motif 或 xlib 的程序),以及 Emacs、Opera、OpenOffice、LibreOffice 等。
如果您无法在 Gnome 下的 gnome-terminal 中启用 Fcitx,且上述方法无效,请尝试:
$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/IMModule':<'fcitx'>}"
内置中文拼音默认未激活
如果您的区域设置为 en_US.UTF-8,Fcitx 默认不会启用内置中文拼音输入法。仅启用了 fcitx-keyboard-us。您可能会收到 fcitx-diagnose 命令的提示。
## Input Methods:
1. Found 1 enabled input methods:
fcitx-keyboard-us
2. Default input methods:
**You only have one input method enabled, please add a keyboard input method as the first one and your main input method as the second one.**
在这种情况下,您应该通过图形化配置工具将 拼音 或 双拼 输入法添加到激活的输入法列表中。
Fcitx 与 KDE
由于某些原因,KDE 不能正确处理键盘布局。例如,如果您从 US (English) 切换到 LT (Lithuanian),键盘上的所有数字键本应输出立陶宛语字母,但它们仍输出数字。这可以通过以下步骤解决:
- 如果 Fcitx 正在后台运行,请关闭它。
- 禁用与 KDE 相关的设置:
- 在“系统设置 > 输入设备 > 键盘布局(选项卡)”中,确保取消勾选“配置布局”。
- 在“系统设置 > 输入设备 > 高级(选项卡)”中,确保取消勾选“配置键盘选项”。
- 运行 fcitx 以启动它。您可以关闭终端 - Fcitx 将继续在后台运行。
- 设置您需要的布局(右键点击系统托盘图标,然后选择“配置”)。
- 右键点击系统托盘图标,选择“退出”。
此时布局应该已正常工作,原生的 KDE 布局切换图标会出现,您可以通过鼠标滚轮或点击它来切换布局。
输入法意外切换为英文
例如,在 XMind 中,当用户按 Enter 创建节点时,输入法总是自动切换为英文,必须手动切换回中文。
要解决此问题,打开 Fcitx 图形化配置工具(由 fcitx-configtoolAUR 提供),切换到“全局配置”选项卡,在“在程序间共享状态”下拉菜单中,选择“每个程序”或“全部”。
xmodmap 设置被覆盖
Fcitx 控制键盘布局,因此您的 xmodmap 设置会被覆盖。自 4.2.7 版本起,Fcitx 会尝试加载 ~/.Xmodmap(如果存在)。
有关如何保存 xmodmap 更改的更多详情,请参阅 FAQ。
Fcitx 和 setxkbmap
如果您正在为其他语言使用 setxkbmap,那么(如上所述)Fcitx 可能会覆盖这些设置,甚至在某些应用程序中阻止切换到该语言(例如 QuteBrowser)。
如果您想防止这种情况并独立于 Fcitx 管理您的 xmodmap 布局,请按照以下步骤操作:
- 打开 Fcitx 图形化配置工具(由 fcitx-configtoolAUR 提供)。
- 切换到“附加组件”选项卡。
- 选择“高级”。
- 搜索 xkb。
- 选择“X 键盘整合”。
- 点击“配置”。
- 取消勾选“允许覆盖系统 XKB 设置”。
- 点击“确定”。
在高分屏 (HiDPI) 下 Fcitx 预编辑框太小
请参阅 HiDPI#Fcitx。