Fcitx

来自 ArchWiki

Fcitx 是一个轻量级的输入法框架,旨在为 Linux 提供独立于环境的语言支持。它支持许多不同的语言,并提供了许多有用的非 CJK 功能。

警告: Fcitx 现在处于维护模式。建议使用 Fcitx5 代替[1]

安装

安装 fcitx 软件包。

输入法引擎

Fcitx 提供了中文 拼音 和基于表格的输入法(例如 五笔)的内置输入法。

根据您希望输入的语言,可以使用其他输入法引擎

中文

日语

  • fcitx-anthy,一款流行的日语输入法引擎。但是,它已不再积极开发。
  • fcitx-mozc,基于 Mozc,Google 日语输入法的开源版本。
  • fcitx-kkc,一款日语假名汉字输入法引擎,基于 libkkc
  • fcitx-skk,一款日语假名汉字输入法引擎,基于 libskk

其他语言

输入法模块

为了在 Qt 程序中获得更好的体验,请根据需要安装 fcitx-qt4AURfcitx-qt5fcitx-qt6 输入法模块,或者安装 fcitx-im 组来安装 fcitxfcitx-qt5fcitx-qt6。如果没有这些模块,输入法可能在大多数应用程序上都能工作,但您可能会遇到输入法挂起、预览窗口屏幕位置错误或没有预览错误的问题。

以下应用程序不使用 GTK/Qt 输入模块

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

其他

其他软件包(包括 git 版本)也在 AUR 中提供。Fcitx 的所有组件在安装后都需要重启 Fcitx。

用法

注意: 您需要安装 中文、日文、韩文或越南文字体 才能输入相应的字符。

桌面环境自动启动

如果您正在使用任何 XDG 兼容的桌面环境,例如 KDEGNOMEXfceLXDE,重新登录后,自动启动应该可以正常工作。如果不起作用,请运行 fcitx 可执行文件。要查看 Fcitx 是否正常工作,请打开一个应用程序并按 Ctrl+Space(切换输入法的默认快捷键)来调用 Fcitx 并输入一些文字。

如果 Fcitx 未能随您的桌面自动启动,或者您想更改启动 Fcitx 的参数,请配置自动启动或编辑 ~/.config/autostart/ 目录中的 fcitx-autostart.desktop 文件(如果尚不存在,请从 /etc/xdg/autostart/ 复制它)。

当其他支持 xim 的输入法也在运行时,Fcitx 可能由于 xim 错误而无法启动。在启动 Fcitx 之前,请确保没有其他输入法正在运行。

另请设置以下环境变量,以便 GTK/Qt 应用程序优先使用 IM 模块。

对于 i3Sway 用户,请在您的配置文件中添加 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 应用程序除外,Qt5 应用程序不支持 XIM,并且需要 IM 模块才能工作。

如果 fcitx 进程未自动启动,您可能需要在 ~/.xinitrc 中添加 fcitx &。如果 fcitx & 未启动,请在其后键入 sleep 2

注意
  • 避免为此使用 .bashrc,请参阅 GregsWiki:DotFiles
  • 如果所有 Qt 应用程序在使用 Fcitx 时都遇到问题,请运行 qtconfig (qtconfig-qt4),然后转到第三个选项卡,确保 Fcitx默认输入法组合框中。

XIM

或者,您可以在您的 GTK 和/或 Qt 程序中使用 X 输入法 (XIM),而无需安装上述模块,在这种情况下,您需要将上面的相应行更改为如下所示

GTK_IM_MODULE=xim
QT_IM_MODULE=xim

如果您在 ~/.xprofile~/.xinitrc 中更改它,请添加 export

警告: 使用 XIM 有时会导致问题,包括无法输入、没有光标跟随、选词窗口问题、应用程序在输入法重启时冻结。对于这些与 XIM 相关的问题,Fcitx 无法提供任何修复或支持。任何其他输入法框架也是如此,因此请尽可能使用 GTK 和 Qt 输入法模块而不是 xim
注意
  • 自 2.24.20 起,Gtk2 使用 /usr/lib/gtk-2.0/2.10.0/immodules.cache 作为 immodule 缓存文件。如果您已设置 GTM_IM_MODULE_FILE 环境变量,或者不使用官方软件包的安装脚本来更新缓存,请更改/清除环境变量并使用 /usr/bin/gtk-query-immodules-2.0 --update-cache 来更新 immodule 缓存。
  • Qt5 应用程序不再像 Qt4 那样支持 XIM 协议,而是完全依赖 IM 模块与 Fcitx 通信。

配置

GUI 配置工具

Fcitx 提供了 KDE 配置模块 (kcm-fcitx) 和 GTK3 配置工具 (fcitx-configtool)。

安装 fcitx-configtool 后运行 fcitx-config-gtk3。如果您想启用其他语言的输入法,请取消选中仅显示当前语言

在更改配置之前手动停止 Fcitx,否则更改可能会丢失。

为了启用拼写检查,当 Fcitx 处于 fcitx-keyboard 提供的输入法时,请按 Ctrl+Alt+h

输入法配置

您可以在 GUI 工具中添加/删除输入法。请注意,搜索区分大小写。

第一个设置的输入法是非活动状态,而所有其余的都是活动状态。您通常希望非活动状态是键盘选项之一(例如“键盘 - 英语(美国)”)。这些选项仅根据名称中的键盘布局进行输入。

全局配置下,触发输入法快捷键将仅在非活动状态和上次使用的活动状态之间切换。在输入法之间滚动默认情况下只会滚动不同的活动状态,但也可以在高级设置中设置为包括非活动状态。此外,必须按顺序按下在输入法之间滚动快捷键,例如 ALT_SHIFT 仅在 altshift 之前按下时才会激活。

IME 的配置设置可以通过将键盘设置为所需的 IME 并右键单击托盘图标来找到。

更改默认 UI

Fcitx 支持 kimpanel 协议以提供更好的桌面集成。

扩展拼音词库

拼音词库位于 ~/.config/fcitx/pinyin。文件 pybase.mb 用于单字,文件 pyphrase.mb 定义拼音短语。要扩展它们,请将您的文件放入 /usr/share/fcitx/pinyin 并重启 Fcitx。

皮肤

您可以下载皮肤并将它们解压到以下目录之一,如果该目录不存在,您可以创建它

/usr/share/fcitx/skin   #Global settings
~/.config/fcitx/skin    #User settings

云拼音配置

安装 fcitx-cloudpinyin 输入法后,重启 Fcitx。如果您在配置 GUI 中找不到它,请启用高级设置。云查询结果将自动添加到当前输入法词典中。

如果您的网络阻止您访问 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 ######
注意: 由于调用外部程序,这将显着减慢将重复进入和退出插入模式的映射。建议重写相关映射,并将支持 Python 的 Vim 与 fcitx.vim 结合使用以提高效率。

特殊符号

创建 ~/.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 ∝

直接输入代码以匹配相应的特殊符号。

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

剪贴板访问

您可以使用 Fcitx 输入剪贴板中的文本(以及简短的剪贴板历史记录和主选择)。默认触发键是 Ctrl-;。您可以在“剪贴板”附加组件配置页面中更改触发键以及其他选项。

注意: 这不是剪贴板管理器,它不会像剪贴板管理器应该做的那样保持选择或更改其内容。它只能用于从剪贴板输入。
警告: 某些客户端不支持多行输入,因此您可能会看到使用 fcitx-clipboard 粘贴的多行剪贴板内容为单行。这要么是正在使用的程序的错误或功能,要么不是 Fcitx 能够解决的问题。

fcitx-remote

fcitx-remote 是一个命令行工具,可用于控制 Fcitx 状态。它与 fcitx 软件包一起安装。

此处值得详细说明的一个选项是 fcitx-remote -s imname,它切换到由 imname 标识的输入法。可以通过执行 fcitx-diagnose 并在“## 输入法:”部分下查找来找到正在使用的输入法的正确 imname

输入特殊字符

参见 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 中使用输入法,这是因为旧的 Emacs 错误。您可以在 Emacs 启动之前将您的 LC_CTYPE 设置为其他内容,例如 zh_CN.UTF-8,以消除此问题。

请注意,相应的 locale 应在您的系统上生成

默认字体集将使用 `-*-*-*-r-normal--14-*-*-*-*-*-*-*` 作为基本字体(在 src/xfns.c 中),如果您没有匹配的字体(例如 terminus 或 75dpi 的字体,您可以查看 `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 变量以验证两个变量都已正确设置。)

Ctrl+空格键在 GTK 程序中无法工作

此问题有时会发生,尤其是在区域设置设置为英语时。请确保您的 GTK_IM_MODULE 设置正确。

另请参阅 FAQ

如果您已将 *_IM_MODULE 环境变量设置为 fcitx 但无法激活 fcitx,请检查您是否已安装相应的输入法模块。

某些程序只能使用 xim,如果您正在使用这些程序,请确保您的 XMODIFIERS 设置正确,并注意您可能遇到的问题。这些程序包括所有不使用 GTK 或 Qt 的程序(例如,直接使用 tk、motif 或 xlib 的程序)、Emacs、Opera、OpenOffice、LibreOffice、Skype。

如果您无法在 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.**

然后,您应该通过 GUI 配置工具将 PinyinShuangpin 输入法添加到已激活的输入法中。

fcitx 和 KDE

由于某些原因,KDE 无法正确处理键盘布局。例如,如果您从美国(英语)切换到 LT(立陶宛语),键盘上的所有数字都应产生立陶宛字母,但它们仍然产生数字作为输出。这可以通过以下步骤修复

  1. 如果 fcitx 在后台运行,请将其关闭。
  2. 禁用与 KDE 相关的内容
    1. 系统设置 > 输入设备 > 布局(选项卡)中,确保配置布局未选中。
    2. 系统设置 > 输入设备 > 高级(选项卡)中,确保配置键盘选项未选中。
  3. 启动 fcitx 以启动它。您可以关闭终端 - fcitx 仍将在后台运行。
  4. 设置您需要的布局(右键单击系统托盘图标,然后单击配置)。
  5. 右键单击系统托盘图标,然后单击退出

此时,您应该拥有可用的布局,应显示本机 KDE 布局切换图标,您可以通过鼠标滚轮或单击它来切换它们。

输入法意外切换到英文

例如,在 XMind 中,当用户按 Enter 创建节点时,输入法始终切换为英文,并且必须手动切换回中文。

要解决此问题,请打开 Fcitx GUI 配置工具(由 fcitx-configtool 提供),切换到全局配置选项卡,在下拉菜单窗口间共享状态中,选择按程序全部

xmodmap 设置被覆盖

Fcitx 控制键盘布局,因此您的 xmodmap 设置将被覆盖。自 4.2.7 起,如果 ~/.Xmodmap 存在,Fcitx 将尝试加载它。

有关如何保存 xmodmap 更改的更多详细信息,请参阅 FAQ

Fcitx 和 setxkbmap

如果您正在为另一种语言使用 setxkbmap,那么(如上所述)Fcitx 可能会覆盖它们,甚至阻止在某些应用程序(例如 QuteBrowser)中切换到该语言。

如果您想防止这种情况并独立于 Fcitx 管理您的 xmodmap 布局,请按照以下步骤操作

  1. 打开 Fcitx GUI 配置工具(由 fcitx-configtool 提供)
  2. 切换到附加组件选项卡
  3. 选择高级
  4. 搜索 xkb#
  5. 选择X 键盘集成
  6. 单击配置
  7. 取消选择允许覆盖系统 XKB 设置
  8. 单击确定

HiDPI 下 Fcitx 预编辑框太小

参见 HiDPI#Fcitx

参见