Fcitx
Fcitx,即小企鹅输入法,是一个以 GPL 许可发布的输入法平台,可以通过安装引擎支持多种输入法,支持简入繁出,是在 Linux 操作系统中常用的中文输入法。它的优点是:短小精悍、与各种程序的兼容性比较好。
Fcitx 内置的输入法支持中文拼音和基于字符表的输入(例如五笔)。根据语言的不同,可以选择其他输入法引擎。
在 Fcitx 支持的拼音输入法中,内置拼音响应速度最快。Fcitx 同样支持流行的第三方拼音输入法以提供更好的整句输入效果。
- fcitx-sunpinyinAUR 在输入速度和输入精度之间有较好的平衡。
- fcitx-libpinyinAUR 算法比 sunpinyin 先进。
- fcitx-rimeAUR, 即著名中文输入法 Rime IME的 Fcitx 版本。但它不支持 Fcitx 本身的 #特殊符号和 #快速输入功能,自定义设置请参见官方,
- fcitx-googlepinyinAUR, Google 拼音输入法 for Android。
- fcitx-sogoupinyinAUR, 搜狗输入法for linux——支持全拼、简拼、模糊音、云输入、皮肤、中英混输入。官方网址
- fcitx-cloudpinyinAUR 可以提供云拼音输入的支持,支持 Fcitx 下的所有拼音输入法,Fcitx-rime 除外。
- fcitx-chewingAUR 为 Fcitx 添加 chewing (繁体中文注音) 输入引擎支持。依赖 libchewing包。
- fcitx-baidupinyinAUR, 百度拼音输入法的fcitx wrapper。
- fcitx-table-extraAUR Fcitx 的一些额外码表支持,包括仓颉 3, 仓颉 5, 粤拼, 速成, 五笔, 郑码等等。
- fcitx-mozcAUR, 为 Fcitx 添加 mozc (日语) 输入引擎支持,mozc 是 Google 日语输入法的开源版本。
- fcitx-kkcAUR, 一款新的基于 libkkc包 的日文假名与汉字输入引擎。
- fcitx-skkAUR, 一款基于 libskk包 的日文假名与汉字输入引擎。
- fcitx-anthyAUR, 为 Fcitx 添加 anthy (日语) 输入引擎支持。
- fcitx-hangulAUR, 为 Fcitx 添加 hangul (韩语) 输入引擎支持。
- fcitx-m17nAUR, 为 Fcitx 添加 m17n (多国语言码表) 输入引擎支持。
- fcitx-unikeyAUR, 为 Fcitx 添加 unikey (越南语) 输入引擎支持。
- fcitx-sayuraAUR, 为 Fcitx 添加 sayura (僧伽罗语) 输入引擎支持。
Fcitx 提供对 Qt 提供了输入法模块,请根据需要安装 fcitx-qt4AUR、fcitx-qt5AUR 和 fcitx-qt6AUR。如果没有安装对应的模块,一般还是可以在大部分程序中使用输入法的。不过很可能出现从无法光标跟随、无法显示预编辑字符串、无法输入甚至程序卡死等情况。
某些程序不使用 Qt 的输入法模块,这些程序包括:
- 使用 Tk, motif, 甚至 xlib 的程序
- Emacs、Opera、OpenOffice、LibreOffice、Skype、Wine、Java、Xterm、urxvt、WPS
- fcitx-ui-lightAUR, Fcitx 的轻量 UI。
- fcitx-table-extraAUR adds Cangjie, Zhengma, Boshiamy support.
- fcitx-table-otherAUR, Fcitx 的一些更奇怪的码表支持,包括 Latex, Emoji, 以及一大堆不明字符等等。
- #GUI configuration tools
您还可以在 Arch User Repository 找到更多以上软件包的 Git 版以及其它。
如果您用 XDG 兼容的桌面环境,比如 KDE, GNOME, Xfce, LXDE, 那么当您安装好 Fcitx 并重新登录后,Fcitx 应该会自动启动。如果没有的话,可以打开控制台并运行fcitx。为检验 Fcitx 是否正常运行, 打开一个程序,按 Ctrl+Space (这是切换输入法的默认快捷键)激活 Fcitx 并试着输入几个字。
如果 Fcitx 没有随桌面环境自动启动,或者您想修改下 Fcitx 启动参数,请用桌面环境提供的自动启动工具autostart配置,或者直接编辑用户目录~/.config/autostart/ 下的 fcitx-autostart.desktop 文件以确认自动启动是否被禁用。如果用户目录下的文件并不存在,您可以复制自动启动文件 /etc/xdg/autostart/fcitx-autostart.desktop 到用户目录。
如果您使用的桌面环境并不自动支持 XDG 自动启动, 请在您使用的启动脚本里面添加 fcitx 以实现自动启动。
例如,你使用i3或sway窗口管理器,可以在配置文件中添加exec --no-startup-id fcitx -d来自动启动输入法。对于 fcitx5 用户则应添加如下 exec --no-startup-id fcitx5 -d 。
当 iBus 等其它输入法程序同时启动且开启了 Xim 支持时, 可能导致 Fcitx 无法启动,请确保已禁用了其它输入法程序的自动启动。
同时,请设置以下环境变量,使 GTK/Qt 应用程序优先使用输入法模块(IM module)。
模板错误: 您在尝试使用 = 标志吗? 有关解决方法,请访问 Help:Template#Escape template-breaking characters。
如果没有设置这些环境变量,应用程序可能会回退到 XIM 协议。Qt5 应用程序例外,因为 Qt5 不支持 XIM 协议,必须使用输入法模块。
请按以下方式设置环境变量,如果没有这些环境变量,程序可能默认使用 XIM 协议。qt5 程序不支持 XIM 所以必须配置使用 IM 模块,其它程序也有可能出现问题。
建议通过 /etc/environment 设置环境变量,pam-env 模块会在所有登录会话中读取此文件,包括 X11 会话和 Wayland 会话。详情请参考 man 8 pam-env。
/etc/environment
GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx
~/.pam_environment 文件。部分登录管理器(如 LightDM)也支持读取 ~/.xprofile,可以这样设置:
~/.xprofile
export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx
重新登录后让环境变量生效。
如果 fcitx 没有自动启动,请将 fcitx & 加入 ~/.xinitrc, 如果 fcitx & 不启动,在后面加一个延时 sleep 2。
- 请不要在
.bashrc设置这些环境变量。bashrc只应用于交互性 bash 会话的初始化,并不应用于非交互性脚本或 X 会话的初始化。 - 如果 Qt 使用 fcitx 有问题,请执行 qtconfig (qtconfig-qt4),在输入法配置中将 fcitx 设置为 "Default Input Method"。
要在 Gtk/Qt 程序中用 xim, 请将上面的变量改成如下的值:
GTK_IM_MODULE=xim QT_IM_MODULE=xim
如果您在 ~/.xprofile 或 ~/.xinitrc 中修改这些变量,请添加 export。
重新登录后让环境变量生效。
- Gtk2 从 2.24.20 开始,使用
/usr/lib/gtk-2.0/2.10.0/immodules.cache作为缓存文件。如果设置了GTK_IM_MODULE_FILE环境变量或在安装后修改了配置,请清掉环境变量并使用/usr/bin/gtk-query-immodules-2.0 --update-cache更新缓存。 - Qt5 程序不支持 XIM 所以必须配置使用 IM 模块
Fcitx 提供了若干图形界面的配置程序:KDE 中的 kcm-fcitxAUR, 基于 GTK+3 的 fcitx-configtoolAUR。
在终端运行 fcitx-config-gtk3 打开已安装的配置工具 fcitx-configtoolAUR。 如果您希望启用其它语言的输入法,请取消勾选 仅显示当前语言。
如果要手工编辑 fcitx 的配置文件,请确保系统中并没有在运行 fcitx,否则编辑的配置内容可能丢失。
为了启用拼写检查功能,请先切换到由 fcitx-keyboard 提供的输入法,然后按下 Ctrl+Alt+h。
您可以在配置界面中添加或移除已启用的输入法。右键点击输入法图标即可打开对应配置。请注意,搜索功能区分大小写。
第一个设置的输入法处于未激活状态,其余所有输入法均处于激活状态。
通常情况下,建议将未激活状态设置为某个 Keyboard 选项(例如 Keyboard - English (US))。这些选项仅根据名称中指定的键盘布局进行输入。
在全局配置中,触发输入法快捷键仅在未激活输入法及最后一个活动输入法之间切换。切换输入法快捷键默认仅在不同的活动输入法间切换,但是在高级设置中可以将非激活输入法加入切换选择。切换输入法快捷键需要按顺序按下,例如 ALT_SHIFT 仅在先按 alt 再按 shift 后生效。
可以通过将键盘设置为所需的 IME,然后右键点击托盘图标来访问对应 IME 的配置选项。
Fcitx 支持 kimpanel 协议,以提供更好的桌面集成体验。
- Gnome-Shell:您可以从 extensions.gnome.org 安装 kimpanel,或者安装 gnome-shell-extension-kimpanel-gitAUR,它能够提供类似于 ibus-gjs 的用户体验。
用户配置拼音词库在 ~/.config/fcitx/pinyin, 其中 pybase.mb 为拼音单字库,pyphrase.mb 为拼音词库。如果这两文件并不存在,直接将您下载的词库放置到 /usr/share/fcitx/pinyin. 重启 Fcitx 即可。
下载皮肤并解压缩到下面任一目录,如果没有可以新建目录:
/usr/share/fcitx/skin全局设置~/.config/fcitx/skin特定用户设置
安装 fcitx-cloudpinyinAUR 后重启 fcitx 即可。在配置程序里却没有看见云拼音,记得勾上“高级”复选框。所选的云拼音输入结果会自动添加到当前输入法的词库中。
建议在fcitx设置里面将“云拼音来源”由Google改为“百度”,Google国内访问不是很顺畅。
启用云拼音后,从云拼音获得的候选词会默认添加到候选词列表中的第二个,显示位置可以通过云拼音的设置配置。如果云拼音的结果和本地输入法给出的结果一致,云拼音后选项会和本地产生的候选项自动合并,不会产生重复的候选项。
部分常用默认快捷键:
Ctrl+Space激活输入法左 Shift临时切换到英文Ctrl+Shift输入法间切换-/=向前/向后翻页Shift+Space全角、半角切换
如果您经常在 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
"退出插入模式
autocmd InsertLeave * call Fcitx2en()
"进入插入模式
autocmd InsertEnter * call Fcitx2zh()
"##### auto fcitx end ######
小小功能拯救世界!
Fcitx 自带剪贴板,其快捷键为 Ctrl + ;,这是一个非常实用的小功能。您可以在剪贴板插件配置页面中修改触发快捷键以及其它选项。
创建 ~/.config/fcitx/data/pySym.mb, 文件内容示范如下:
#第一个字符为“#”的行是注释 #格式:编码 符号 #编码只能为小写字母,经拼音解析后最长为10(如py为2,pinyin也为2) #数学符号 sxfh + sxfh - sxfh < sxfh = sxfh > sxfh ± sxfh × sxfh ÷ sxfh ∈ sxfh ∏ sxfh ∑ sxfh ∕ sxfh √ sxfh ∝
直接输入某编码,可以匹配出对应的特殊符号。
确保在 ~/.config/fcitx/config 里把 SemiColonAction 修改为 QuickPhrase。
创建 ~/.config/fcitx/data/QuickPhrase.mb, 文件内容示范如下:
#第一个字符为“#”的行是注释 #格式:编码 符号 dianhua 123456789 youbian 123456 dizhi 中华人民共和国北京市长安街一号 aowu ┗<(=`O′=)>┛ mobai m<(_ _)>m baobao <(=′▽')爻 (`▽`=)> baobao <(=*′д`)爻(′д`*=)> qiangbi ▄︻┻┳═一…… ☆<(= ̄□ ̄=!)> xiaoku 😂 canyue 🌖 xuehua ❄
按 ; 并输入编码,可实现快速输入,自然也能用来当颜文字库和emoji表情库。
; 开头之外,没有其它限制。fcitx-remote 是可以控制 fcitx 状态的命令行工具,位于 fcitxAUR 安装包中。
常见的应用包括用 fcitx-remote -s imname, 将输入法切换到 imname。要获得正确的 imname,执行 fcitx-diagnose 并查看 "## Input Methods:" 对应的输出。
参见:Fcitx5#通过 Fcitx5 输入特殊字符。该内容同样适用于 Fcitx
此设置位于 Global Config 选项卡中,默认值为 SHIFT Both,表示按下任意一个 Shift 键都会立即切换输入法。
虽然该设置本应只在单独按下某个 Shift 键时生效,但在使用标准键盘输入时,它可能会随机干扰大写字母输入、使用键盘选择文本等操作。
此外,该设置可能会在不提示的情况下随时恢复为默认值。若要确保 Fcitx 配置不会被修改,必须将该文件设置为不可变:
chattr +i ~/.config/fcitx/config
(需要以 root 用户执行。)
当你遇到任何 fcitx 有关的问题,比如 Ctrl + Space 在有的程序中不能工作,首先应该用 fcitx-diagnose 命令诊断问题的原因。
fcitx-diagnose 会列出所有 fcitx 正常运行所需的前提条件,从输出结果中通常可以找到问题的原因。
在网上(比如在 irc 或者论坛里)询问别人关于 fcitx 配置的问题时,也请首先提供你的 fcitx-diagnose 输出结果(比如贴到 pastebin 服务),这将加速别人帮你找到问题所在。
如果您的 LC_CTYPE 设置为英文,可能会由于 Emacs 的一个旧 bug 而无法在 Emacs 中使用输入法。您可以在启动 Emacs 前将 LC_CTYPE 设置为其它值,例如 zh_CN.UTF-8,以避免此问题。
默认字体集合会在 src/xfns.c 中使用 `-*-*-*-r-normal--14-*-*-*-*-*-*-*' 作为基础字体。如果系统中没有匹配的字体(例如 terminus 或 75dpi 字体,可以通过 `xlsfonts` 查看输出),则无法启用 XIM。根据 FAQ 和 字体 页面,可能需要安装 xorg-fonts-misc-otbAUR,因为 xorg-fonts-misc包 已不再提供所需的字体集合。
如果您使用 Emacs daemon/client 模式,则应在启动 daemon 时设置 LC_CTYPE。例如:
LC_CTYPE=zh_CN.UTF-8 emacs --daemon
如果通过 systemd 启动 Emacs daemon,请在 unit 文件中设置:
Environment="LC_CTYPE=zh_CN.UTF-8" "XMODIFIERS=@im=fcitx"
(这里可能需要显式设置 XMODIFIERS,因为 systemd 不会加载 .xprofile。可以检查 Emacs 中的 initial-environment 变量,以确认这两个变量是否正确设置。)
这个问题有时会发生,尤其是在 locale 设置为英文时。请确保您的 GTK_IM_MODULE 已正确设置。
另请参阅:FAQ
如果您已经将 *_IM_MODULE 环境变量设置为 fcitx,但仍然无法激活 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'>}"
严格来说,这并不是一个 BUG。Fcitx 的 Ctrl + ; 快捷键会覆盖许多用户自定义的快捷键,尤其是 Emacs 用户的快捷键。如果有需要,可以在配置界面中禁用剪贴板插件,或者修改其激活快捷键。
如果您遇到以下问题:
- 输入类似“安装”、“暗影”等以 "a" 开头的词语时,Fcitx 出现卡死。
- 输入并非以拼音 "a" 开头的词语时,却出现“阿拉伯”、“阿里巴巴”等以 "a" 开头的错误联想词。
可以通过删除 ~/.config/fcitx/sogou 目录下的所有内容来解决。
例如,在 XMind 中,当按下 Enter 创建新节点时,输入法会自动切换到美语键盘,需要再次按 Ctrl + Space 才能切回中文输入法。
启动 Fcitx 配置工具,在 Global Config 选项卡中的 Share State Among Window 选项里选择 PerProgram 或 All 即可解决。
如果您的 locale 为 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.**
此时,您应该通过图形配置工具将 Pinyin 或 Shuangpin 输入法添加到已启用的输入法列表中。
由于一些原因,KDE 对键盘布局的处理并不完善。例如,当您从 US(英语)切换到 LT(立陶宛语)时,键盘上的数字键本应输出立陶宛语字母,但实际仍然输出数字。
可以通过以下步骤解决:
- 如果 Fcitx 正在后台运行,请先关闭它。
- 禁用 KDE 相关设置:
- 在 System Settings > Input Devices > Layouts(选项卡) 中,确保取消勾选 Configure layouts。
- 在 System Settings > Input Devices > Advanced(选项卡) 中,确保取消勾选 Configure keyboard options。
- 启动 Fcitx。此时可以关闭终端,Fcitx 仍会继续在后台运行。
- 设置所需的键盘布局(右键点击系统托盘图标,然后选择 Configure)。
- 右键点击系统托盘图标,然后选择 Exit。
完成后,键盘布局应该可以正常工作,KDE 原生的布局切换图标也会出现,并且可以通过鼠标滚轮或点击进行切换。
例如,在 XMind 中,当用户按下 Enter 创建节点时,输入法总是会切换到英文,需要手动切回中文输入法。
要解决此问题,请打开 Fcitx 图形配置工具(由 fcitx-configtoolAUR 提供),切换到 Global Config 选项卡,在 Share State Among Window 下拉菜单中选择 PerProgram 或 All。
Fcitx 会控制键盘布局,因此您的 xmodmap 设置可能会被覆盖。
从 4.2.7 版本开始,Fcitx 会尝试加载存在的 ~/.Xmodmap 文件。
有关如何保存 xmodmap 修改的更多信息,请参阅 FAQ。
如果您使用 setxkbmap 设置其它语言的键盘布局,那么根据上述情况,Fcitx 可能会覆盖这些设置,甚至导致某些应用程序(例如 QuteBrowser)无法切换到对应语言。
如果您希望避免这种情况,并独立管理自己的 xmodmap 键盘布局,请按照以下步骤操作:
- 打开 Fcitx 图形配置工具(由 fcitx-configtoolAUR 提供)。
- 切换到 Addon 选项卡。
- 选择 Advanced。
- 搜索 xkb。
- 选择 X Keyboards Integration。
- 点击 Configure。
- 取消勾选 Allow to Override System XKB Settings。
- 点击 OK。
参见 HiDPI#Fcitx。