Fcitx

来自 Arch Linux 中文维基

Fcitx (Flexible Input Method Framework) ──即小企鹅输入法,它是一个以 GPL 方式发布的输入法平台,可以通过安装引擎支持多种输入法,支持简入繁出,是在 Linux 操作系统中常用的中文输入法。它的优点是,短小精悍、跟程序的兼容性比较好。

安装[编辑 | 编辑源代码]

安装软件包 fcitx

输入法引擎[编辑 | 编辑源代码]

Fcitx 内置的输入法支持中文 拼音 和基于字符表的输入(例如五笔)。根据语言的不同,可以选择其他输入法引擎。

中文[编辑 | 编辑源代码]

在 Fcitx 支持的拼音输入法中,内置拼音响应速度最快。Fcitx 同样支持流行的第三方拼音输入法以提供更好的整句输入效果。

日文[编辑 | 编辑源代码]

  • fcitx-mozc, 为 Fcitx 添加 mozc (日语) 输入引擎支持,mozc 是 Google 日语输入法的开源版本。
  • fcitx-kkc, 一款新的基于 libkkc 的日文假名与汉字输入引擎。
  • fcitx-skk, 一款基于 libskk 的日文假名与汉字输入引擎。
  • fcitx-anthy, 为 Fcitx 添加 anthy (日语) 输入引擎支持。

其它语言[编辑 | 编辑源代码]

  • fcitx-hangul, 为 Fcitx 添加 hangul (韩语) 输入引擎支持。
  • fcitx-m17n, 为 Fcitx 添加 m17n (多国语言码表) 输入引擎支持。
  • fcitx-unikey, 为 Fcitx 添加 unikey (越南语) 输入引擎支持。
  • fcitx-sayura, 为 Fcitx 添加 sayura (僧伽罗语) 输入引擎支持。

输入法模块[编辑 | 编辑源代码]

Fcitx 提供对 Qt 提供了输入法模块,请根据需要安装, fcitx-qt4AURfcitx-qt5. 软件包组 fcitx-im包组 包含了全部模块。如果没有安装对应的模块,一般还是可以在大部分程序中使用输入法的。不过很可能出现从无法光标跟随、无法显示预编辑字符串、无法输入甚至程序卡死等情况。

某些程序不使用 Qt 的输入法模块,这些程序包括:

  • 使用 Tk, motif, 甚至 xlib 的程序
  • Emacs、Opera、OpenOffice、LibreOffice、Skype、Wine、Java、Xterm、urxvt、WPS

其它[编辑 | 编辑源代码]

  • fcitx-ui-light, Fcitx 的轻量 UI。
  • fcitx-table-other, Fcitx 的一些更奇怪的码表支持,包括 Latex, Emoji, 以及一大堆不明字符等等。

您还可以在 Arch User Repository 找到更多以上软件包的 Git 版以及其它。

使用[编辑 | 编辑源代码]

桌面环境下自动启动[编辑 | 编辑源代码]

如果您用 XDG 兼容的桌面环境,比如 KDE, GNOME, Xfce, LXDE, 那么当您安装好 Fcitx 并重新登录后,Fcitx 应该会自动启动。如果没有的话,可以打开控制台并运行fcitx。为检验 Fcitx 是否正常运行, 打开一个程序,比如 leafpad, 按 CTRL+Space 激活 Fcitx 并试着输入几个字。

如果 Fcitx 没有随桌面环境自动启动,或者您想修改下 Fcitx 启动参数,请用桌面环境提供的自动启动工具配置,或者直接编辑用户目录~/.config/autostart/ 下的 fcitx-autostart.desktop 文件以确认自动启动是否被禁用。如果用户目录下的文件并不存在,您可以复制自动启动文件 /etc/xdg/autostart/fcitx-autostart.desktop 到用户目录:

cp /etc/xdg/autostart/fcitx-autostart.desktop ~/.config/autostart/

如果您使用的桌面环境并不自动支持 XDG 自动启动, 请在您使用的启动脚本里面添加 fcitx 以实现自动启动。

例如,你使用i3sway窗口管理器,可以在配置文件中添加exec --no-startup-id fcitx来自动启动输入法。

当 iBus 等其它输入法程序同时启动且开启了 Xim 支持时, 可能导致 Fcitx 无法启动,请确保已禁用了其它输入法程序的自动启动。

设置输入法的环境变量[编辑 | 编辑源代码]

请按以下方式设置环境变量,如果没有这些环境变量,程序可能默认使用 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-env 已不再读取 ~/.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"。

Xim[编辑 | 编辑源代码]

要在 Gtk/Qt 程序中用 xim, 请将上面的变量改成如下的值:

GTK_IM_MODULE DEFAULT=xim
QT_IM_MODULE  DEFAULT=xim
警告: 使用 xim, 很可能会遇到一些包括不能输入, 没有光标跟随, 重启输入法时应用程序卡死在内的无法由 Fcitx 解决的问题,且官方不支持解决。

重新登录后让环境变量生效。

注意: 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-fcitx, 基于 GTK+3 的 fcitx-configtool

安装完配置工具fcitx-configtool之后打开配置工具的方法是用终端运行fcitx-config-gtk3,打开这个配置工具之后还要添加中文输入法。对于新安装的英文系统,要取消只显示当前语言的输入法(Only Show Current Language),才能看到和添加中文输入法(Pinyin, Libpinyin等)。

如果要手工编辑 fcitx 的配置文件,请确保系统中并没有在运行 fcitx ,否则手工编辑的配置内容可能丢失。

替换自带的经典界面[编辑 | 编辑源代码]

Fcitx 支持使用 kimpanel 协议的界面,以提供更好的桌面整合体验。

  • Gnome-Shell:安装 gnome-shell-extension-kimpanel-gitAUR, 它提供了类似 ibus-gjs 的用户体验,其候选框界面将会采用 Gnome-Shell 的主题风格, 同时在状态栏中增加 Fcitx 的输入法状态图标。
  • KDE:kimtoy 可以使用搜狗输入法和 Fcitx 本身的皮肤。

输入法[编辑 | 编辑源代码]

您可以在配置界面工具中添加/移除启用的输入法。在输入法图标上右键可以打开配置。

列表第一项将作为「未激活」状态使用,请将此项设为键盘布局输入法,比如「(键盘 - 英文)」,第一项后面的输入法都是活动输入法。。

警告: 请必须将键盘布局输入法设为列表中第一项, 否则可能会无法禁用中文输入。

全局配置中, 触发输入法 快捷键仅在未激活输入法及最后一个活动输入法之间切换。切换输入法 快捷键默认仅在不同的活动输入法间切换,但是在高级设置中可以将非激活输入法加入切换选择。切换输入法 快捷键需要按顺序按下,例如 ALT_SHIFT 仅在先按 alt 再按 shift 后生效。

扩充内置拼音词库[编辑 | 编辑源代码]

用户配置拼音词库在 ~/.config/fcitx/pinyin, 其中 pybase.mb 为拼音单字库,pyphrase.mb 为拼音词库。如果这两文件并不存在,直接将您下载的词库放置到 /usr/share/fcitx/pinyin. 重启 Fcitx 即可。

皮肤[编辑 | 编辑源代码]

下载皮肤并解压缩到下面任一目录,如果没有可以新建目录:

/usr/share/fcitx/skin   ##全局设置
~/.config/fcitx/skin    #特定用户设置

云拼音[编辑 | 编辑源代码]

安装后重启 Fcitx 即可,所选的云拼音输入结果会自动添加到当前输入法的词库中。提醒:建议在fcitx设置里面将“云拼音来源”由Google改为“百度”,Google国内访问不是很顺畅。

启用云拼音后,从云拼音获得的候选词会默认添加到候选词列表中的第二个,显示位置可以通过云拼音的设置配置。如果云拼音的结果和本地输入法给出的结果一致,云拼音后选项会和本地产生的候选项自动合并,不会产生重复的候选项。

若安装fcitx-cloudpinyin后,在配置程序里却没有看见云拼音,记得勾上“高级”复选框。这时云拼音会显示出来,再勾上云拼音。

注意: 不推荐将云拼音候选词设为第一个候选词,因为当网络情况不好,没有及时返回云拼音结果,那么云拼音结果将默认降到第二候选词的位置,于是这个过程可能会涉及到默认候选词的改变。

提示与技巧[编辑 | 编辑源代码]

快捷键[编辑 | 编辑源代码]

部分常用默认快捷键:

  • Ctrl+Space 激活输入法
  • 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
"退出插入模式
autocmd InsertLeave * call Fcitx2en()
"进入插入模式
autocmd InsertEnter * call Fcitx2zh()
"##### auto fcitx end ######
注意: 由于要调用外部程序,这将明显拖慢会反复进出插入模式的映射。建议改写相关映射,用带 Python 支持的 Vim 加以配合 fcitx.vim 亦可改善效率。

剪贴板[编辑 | 编辑源代码]

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 ∝

直接输入某编码,可以匹配出对应的特殊符号。

注意: 编码只能用二十六个小写字母表示;以 v 开头,无效。

快速输入[编辑 | 编辑源代码]

确保在 ~/.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-remote 是可以控制 fcitx 状态的命令行工具,位于 fcitx 安装包中。

常见的应用包括用 fcitx-remote -s imname, 将输入法切换到 imname。要获得正确的 imname,执行 fcitx-diagnose 并查看 "## Input Methods:" 对应的输出。

通过 Fcitx 输入特殊字符[编辑 | 编辑源代码]

参见:Fcitx5#通过 Fcitx5 输入特殊字符。该内容同样适用于 Fcitx

故障排除[编辑 | 编辑源代码]

停用或修改 Extra key for trigger input method[编辑 | 编辑源代码]

设置位于 全局配置 标签,默认是 SHIFT, 也就是说两边的 shift 键都会修改输入法。这个设置可能在输入大写字母的时候引起误触,而且可能会在安装后恢复成默认值。要确保进行的修改没有被覆盖,请设置配置文件为只读:# chattr +i ~/.config/fcitx/config

首先诊断问题所在[编辑 | 编辑源代码]

当你遇到任何 fcitx 有关的问题,比如 ctrl+space 在有的程序中不能工作,首先应该用 fcitx-diagnose 命令诊断问题的原因。 fcitx-diagnose 会列出所有 fcitx 正常运行所需的前提条件,从输出结果中通常可以找到问题的原因。 在网上(比如在 irc 或者论坛里)询问别人关于 fcitx 配置的问题时,也请首先提供你的 fcitx-diagnose 输出结果(比如贴到 pastebin 服务),这将加速别人帮你找到问题所在。

Emacs 无法使用输入法[编辑 | 编辑源代码]

emacs会找出一份字体列表发送给输入法,以便输入法绘制输入框。 那么会出现两种情况:

  • 1.找不到字体

emacs 默认 fontset 会使用 "-*-*-*-r-normal--14-*-*-*-*-*-*-*" 字体 (terminus, 75dpi 等等,可以通过 xlsfonts 命令查看)。

解决方法:安装xorg-mkfontscale重启, 它将创建字体文件索引。通过 xlsfonts 命令查看是否存在emacs默认字体,如果不存在可尝试安装类似字体后重启,比如ttf-dejavu

  • 2.找到太多字体

找到太多字体会导致某些地方溢出,无法呼出输入法。终端下并不会遇到此现象。 将LC_CTYPE 设为 zh_CN.UTF-8,会减少找到的字体数目。

解决方法:在.xprofile或.xinitrc中添加以下内容后重新登录或者重启

export LC_CTYPE=zh_CN.UTF-8 

使用locale命令可查看是否成功更改。

更详细的情况参见Emacs 为什么要设置 LC_CTYPEYichao Yu给emacs写的Patch

在 gnome-terminal中 Ctrl + Space 不能调出输入法[编辑 | 编辑源代码]

使用 GDM 3.16 启动 GNOME,可能在某些程序中无法使用 Ctrl + Space 调出输入法。解决方法是修改GSettings配置

gsettings set \
  org.gnome.settings-daemon.plugins.xsettings overrides \
  "{'Gtk/IMModule':<'fcitx'>}"

Ctrl + ; 会调出 Fcitx 的剪贴板[编辑 | 编辑源代码]

严格的说,这不是 BUG, Fcitx 的 Ctrl + ; 会覆盖很多用户自己的快捷键,特别是 Emacs 用户。有必要时,可以在配置界面中禁用剪贴板插件,或更改其激活快捷键。

fcitx-sogoupinyin 卡死、联想失败[编辑 | 编辑源代码]

如果您遇到下列的问题:

  • 输入类似「安装」、「暗影」等 "a" 开头的词语,出现卡死的情况。
  • 输入并不以拼音 "a" 开头的词语时,却出现「阿拉伯」、「阿里巴巴」等以 "a" 开头的错误联想词语等。

可以通过删除 ~/.config/fcitx/sogou 下的所有内容的方式解决。

注意: 此操作会清空用户词库。

在某些程序下输入法总是被切换到美语键盘[编辑 | 编辑源代码]

比如在 XMind 下,当 Enter 出新结点时,输入法就会被切换到美语键盘,不得不按 Ctrl-Space 以重新切回中文输入法。

启动 Fcitx 的 Config, 在 Global Config 选项卡下的「Share State Among Window」选项里选中「PerProgram」或「All」即可解决。

参见[编辑 | 编辑源代码]