跳至內容

Fcitx

出自 Arch Linux 中文维基

Fcitx,即小企鵝輸入法,是一個以 GPL 許可發布的輸入法平台,可以通過安裝引擎支持多種輸入法,支持簡入繁出,是在 Linux 作業系統中常用的中文輸入法。它的優點是:短小精悍、與各種程序的兼容性比較好。

警告:本頁面是關於上游倉庫已歸檔、不支持 Wayland 的 Fcitx 3.x-4.x 版本。推薦使用正被積極維護的、支持 Wayland 的 Fcitx5。在社區提問時,也請提前聲明您使用的版本。

安裝

安裝軟體包 fcitxAUR

輸入法引擎

Fcitx 內置的輸入法支持中文拼音和基於字符表的輸入(例如五筆)。根據語言的不同,可以選擇其他輸入法引擎。

中文

在 Fcitx 支持的拼音輸入法中,內置拼音響應速度最快。Fcitx 同樣支持流行的第三方拼音輸入法以提供更好的整句輸入效果。

日文

  • 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-qt4AURfcitx-qt5AURfcitx-qt6AUR。如果沒有安裝對應的模塊,一般還是可以在大部分程序中使用輸入法的。不過很可能出現從無法光標跟隨、無法顯示預編輯字符串、無法輸入甚至程序卡死等情況。

某些程序不使用 Qt 的輸入法模塊,這些程序包括:

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

其它

您還可以在 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 以實現自動啟動。

例如,你使用i3sway窗口管理器,可以在配置文件中添加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-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=xim
QT_IM_MODULE=xim

如果您在 ~/.xprofile~/.xinitrc 中修改這些變量,請添加 export

警告:使用 XIM 時,很可能會遇到一些 Fcitx 無法解決的問題,例如無法輸入、無法跟隨光標顯示候選框、重啟輸入法時應用程式卡死等。官方也不支持解決這些問題。這些問題同樣存在於其它輸入法框架中,因此請儘可能使用 GTK 和 Qt 輸入法模塊,而不是 XIM。

重新登錄後讓環境變量生效。

注意:
  • 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 模塊

配置

GUI 配置工具

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

如果您經常在 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 + ;,這是一個非常實用的小功能。您可以在剪貼板插件配置頁面中修改觸發快捷鍵以及其它選項。

注意:這並不是一個剪貼板管理器。它不會像剪貼板管理器那樣保存選擇內容或修改剪貼板內容。它只能用於從剪貼板輸入內容。
警告:某些客戶端不支持多行輸入,因此使用 fcitx-clipboard 粘貼多行剪貼板內容時,可能會發現多行內容被粘貼為單行。這可能是正在使用的程序的缺陷或特性,並非 Fcitx 能夠解決的問題。

特殊符號

創建 ~/.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 狀態的命令行工具,位於 fcitxAUR 安裝包中。

常見的應用包括用 fcitx-remote -s imname, 將輸入法切換到 imname。要獲得正確的 imname,執行 fcitx-diagnose 並查看 "## Input Methods:" 對應的輸出。

通過 Fcitx 輸入特殊字符

參見:Fcitx5#通過 Fcitx5 輸入特殊字符。該內容同樣適用於 Fcitx

故障排除

停用或修改 Extra key for trigger input method [sic]

此設置位於 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 服務),這將加速別人幫你找到問題所在。

Emacs

如果您的 LC_CTYPE 設置為英文,可能會由於 Emacs 的一個舊 bug 而無法在 Emacs 中使用輸入法。您可以在啟動 Emacs 前將 LC_CTYPE 設置為其它值,例如 zh_CN.UTF-8,以避免此問題。

請注意,系統中必須已經生成對應的 locale

默認字體集合會在 src/xfns.c 中使用 `-*-*-*-r-normal--14-*-*-*-*-*-*-*' 作為基礎字體。如果系統中沒有匹配的字體(例如 terminus 或 75dpi 字體,可以通過 `xlsfonts` 查看輸出),則無法啟用 XIM。根據 FAQ字體 頁面,可能需要安裝 xorg-fonts-misc-otbAUR,因為 xorg-fonts-misc 已不再提供所需的字體集合。

Emacs Daemon

如果您使用 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 變量,以確認這兩個變量是否正確設置。)

在 gnome-terminal 中 Ctrl + Space 無法調出輸入法

這個問題有時會發生,尤其是在 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'>}"

Ctrl + ; 調出 Fcitx 剪貼板

嚴格來說,這並不是一個 BUG。Fcitx 的 Ctrl + ; 快捷鍵會覆蓋許多用戶自定義的快捷鍵,尤其是 Emacs 用戶的快捷鍵。如果有需要,可以在配置界面中禁用剪貼板插件,或者修改其激活快捷鍵。

fcitx-sogoupinyin 卡死、無法聯想

如果您遇到以下問題:

  • 輸入類似「安裝」、「暗影」等以 "a" 開頭的詞語時,Fcitx 出現卡死。
  • 輸入並非以拼音 "a" 開頭的詞語時,卻出現「阿拉伯」、「阿里巴巴」等以 "a" 開頭的錯誤聯想詞。

可以通過刪除 ~/.config/fcitx/sogou 目錄下的所有內容來解決。

注意:此操作會清空用戶詞庫。

在某些程序中輸入法總是切換到美語鍵盤

例如,在 XMind 中,當按下 Enter 創建新節點時,輸入法會自動切換到美語鍵盤,需要再次按 Ctrl + Space 才能切回中文輸入法。

啟動 Fcitx 配置工具,在 Global Config 選項卡中的 Share State Among Window 選項裡選擇 PerProgramAll 即可解決。

Buildin Chinese Pinyin Default NOT ACTIVE

如果您的 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.**

此時,您應該通過圖形配置工具將 PinyinShuangpin 輸入法添加到已啟用的輸入法列表中。

fcitx 和 KDE

由於一些原因,KDE 對鍵盤布局的處理並不完善。例如,當您從 US(英語)切換到 LT(立陶宛語)時,鍵盤上的數字鍵本應輸出立陶宛語字母,但實際仍然輸出數字。

可以通過以下步驟解決:

  1. 如果 Fcitx 正在後台運行,請先關閉它。
  2. 禁用 KDE 相關設置:
    1. System Settings > Input Devices > Layouts(選項卡) 中,確保取消勾選 Configure layouts
    2. System Settings > Input Devices > Advanced(選項卡) 中,確保取消勾選 Configure keyboard options
  3. 啟動 Fcitx。此時可以關閉終端,Fcitx 仍會繼續在後台運行。
  4. 設置所需的鍵盤布局(右鍵點擊系統托盤圖標,然後選擇 Configure)。
  5. 右鍵點擊系統托盤圖標,然後選擇 Exit

完成後,鍵盤布局應該可以正常工作,KDE 原生的布局切換圖標也會出現,並且可以通過滑鼠滾輪或點擊進行切換。

輸入法意外切換到英文

例如,在 XMind 中,當用戶按下 Enter 創建節點時,輸入法總是會切換到英文,需要手動切回中文輸入法。

要解決此問題,請打開 Fcitx 圖形配置工具(由 fcitx-configtoolAUR 提供),切換到 Global Config 選項卡,在 Share State Among Window 下拉菜單中選擇 PerProgramAll

xmodmap 設置被覆蓋

Fcitx 會控制鍵盤布局,因此您的 xmodmap 設置可能會被覆蓋。

從 4.2.7 版本開始,Fcitx 會嘗試加載存在的 ~/.Xmodmap 文件。

有關如何保存 xmodmap 修改的更多信息,請參閱 FAQ

Fcitx 和 setxkbmap

如果您使用 setxkbmap 設置其它語言的鍵盤布局,那麼根據上述情況,Fcitx 可能會覆蓋這些設置,甚至導致某些應用程式(例如 QuteBrowser)無法切換到對應語言。

如果您希望避免這種情況,並獨立管理自己的 xmodmap 鍵盤布局,請按照以下步驟操作:

  1. 打開 Fcitx 圖形配置工具(由 fcitx-configtoolAUR 提供)。
  2. 切換到 Addon 選項卡。
  3. 選擇 Advanced
  4. 搜索 xkb
  5. 選擇 X Keyboards Integration
  6. 點擊 Configure
  7. 取消勾選 Allow to Override System XKB Settings
  8. 點擊 OK

HiDPI 下 Fcitx 預編輯框過小

參見 HiDPI#Fcitx

See also