工程師思路系列 事出必有因 現場實錄

一個 Ctrl+Space,卡了一整晚

antiX 26 × fcitx5 × 新酷音:從懷疑人生到徹底搞懂

我有一台 Acer Aspire 4745G,第一代 i5,4GB RAM,說老不老,說新不新。 它的任務是跟我跑現場——去客戶公司做網路勘查,掃設備、抓封包、出報告。

為了讓這台老筆電跑得動勘查工具,我裝了 antiX 26——一個極度輕量的 Linux 發行版。 裝完之後一切都好,只剩一件事:打不了中文

「這有什麼難的?」——我當時這樣想

在 Windows 上裝中文輸入法是五分鐘的事。Linux 嘛,查一下文件,跑幾行指令,應該也差不多吧。

結果我低估了這件事。

先裝 fcitx5,按照網路教學一步一步來,裝完重開機——Ctrl+Space,沒反應。 換 fcitx4,一樣。換 ibus,還是一樣。 三套輸入法框架,全部裝了又刪,刪了又裝,環境變數在系統裡留下一堆殘骸互相打架。

讓 Google Search AI 幫我試了四種不同版本,全都失敗。

「是不是 antiX 根本就不支援中文輸入?」
「還是我哪個步驟做錯了?」
「還是這台機器有什麼特殊問題?」

這種時候最消耗心力——不是累,是不知道問題出在哪裡,所以不知道從哪裡修。

換個工具,換個思路

後來我換了方法:不再自己亂試,而是讓 Claude Fable 5 協助我做系統性的診斷。

做法很直接——先寫一支診斷腳本,把系統狀態全部挖出來: 目前裝了哪些輸入法套件、環境變數是什麼值、Display Manager 是哪個、 PAM 設定長什麼樣、之前安裝失敗的 dpkg log 留了什麼痕跡。 然後把報告整份丟給 AI,讓它幫我拆解。

分析結果讓我有點意外——問題不是一個,是四個。四個不同子系統的設計決策, 剛好全部疊在一起,讓每一個「正確步驟」都失效。

為什麼「正確的步驟」會全部失效?

要解釋這件事,得先說 Linux 桌面的輸入法是怎麼運作的。 下面這張圖標出了這次排障中,每一個失效點的位置:

slimski 登入
PAM pam_env.so
✗ 不讀 /etc/environment
im-launch avail_auto
✗ 21_ibus < 23_fcitx5,選錯
desktop-session startup
✗ export 不傳遞(fork)
IceWM + 應用程式
失效點 1:startup 的 export 不傳遞
antiX 的 startup 是 fork 執行,不是 source,export 只活在自己的子 shell 裡。
失效點 2:slimski 不讀 /etc/environment
PAM 設定缺少 read_env=1,這個在其他發行版百試百靈的做法,在 antiX 上完全無效。
失效點 3:im-launch 按數字選框架,ibus 排第 21,fcitx5 排第 23
ibus 套件已 purge,但只要 libibus 函式庫還在,它就永遠排在前面被選中。
修復關鍵:GTK3 settings.ini
優先級高於所有環境變數,直接繞過整條污染路徑。

最有趣的一條線索

排障過程中有一個讓我印象很深的推理過程。

驗證環境變數的時候,看到這樣的結果:

GTK_IM_MODULE=ibus
XMODIFIERS=@im=ibus
QT_IM_MODULE=ibus
SDL_IM_MODULE=fcitx  ← 這個不一樣

前三個是 ibus,但 SDL 是 fcitx。 翻開 21_ibus.rc 的原始碼,裡面有一行明確的註解: ibus 刻意不設定 SDL_IM_MODULE

這個「例外」反過來告訴我們:覆蓋掉 GTK/QT/XMODIFIERS 的兇手, 正是 im-launch 的 ibus fallback——不是 startup,不是 shell rc, 而是一個本來應該「自動選最好的」機制,在特定條件下選錯了。

這就是為什麼這種問題很難靠「再試一次」解決——每一層看起來都正確, 問題藏在各層之間的縫隙裡。需要的不是更多嘗試,而是把整條路徑都攤開來看。

最後怎麼修好的

修復腳本共十個步驟,其中最關鍵的三個:

P7

dbus-update-activation-environment

把正確的 fcitx 變數注入 D-Bus session,讓終端機和 browser 的 Ctrl+Space 恢復正常。

P8 ★

~/.config/gtk-3.0/settings.ini 加入 gtk-im-module=fcitx

GTK3 的設定檔優先級高於所有環境變數。geany、所有 GTK3 app 的 Ctrl+Space 一次修好。不需要跟環境變數爭,直接繞過整條污染路徑。

P9

~/.gtkrc-2.0 加入 gtk-im-module=”fcitx”

GTK2 app(leafpad、roxterm)另有獨立設定路徑,同樣需要一行強制指定。

現在的狀態

這台老筆電現在可以正常打中文了。geany、leafpad、Firefox、終端機, Ctrl+Space 全部正常切換新酷音。整件事從開始排查到解決,花了一個晚上。

終端機 Ctrl+Space
Firefox Ctrl+Space
geany Ctrl+Space
leafpad Ctrl+Space
滑鼠點擊切換

這件事讓我想到的

這次讓我感觸比較深的,不是技術本身,而是排障的方式

在這之前,我的做法是「查到一個解法就試」,試了不行再查下一個。 這種方式在問題單純的時候沒問題,但遇到多層交互的故障, 愈試愈亂,因為每次嘗試都可能在系統裡留下新的殘留。

換成「先完整診斷、再系統性修復」之後,整個過程清晰很多。 而且最後產出的腳本是可以複用的——下次再裝 antiX,十分鐘搞定, 不用再走一遍這條路。

這台筆電的任務是去客戶現場做勘查。現場不能有「等我回去查一下」的狀況。 所以每一個工具都要可靠,包括輸入法。 花一個晚上把這件事搞清楚,值得。

完整的 Root Cause Analysis 報告、修復腳本(含全新安裝版), 都附在本文後面供下載。有在用 antiX、MX Linux 或其他輕量 Debian 的朋友, 如果也卡在中文輸入法,歡迎直接取用。

作者: Mr. τ 風雲網通系統有限公司(PCPiLOT)
antiX 26 fcitx5 新酷音 現場工程 Root Cause Analysis
Last modified: 2026-07-02

Author

Comments

Write a Reply or Comment

Your email address will not be published.