antony@notes:~/misc$ cat "Ubuntu-XFCE-安裝繁體中文輸入法-設定左-Shift-切換中英文.md"
Ubuntu XFCE 安裝繁體中文輸入法 & 設定左 Shift 切換中英文
Ubuntu XFCE 安裝繁體中文輸入法 & 設定左 Shift 切換中英文
環境
- 作業系統:Ubuntu Desktop
- 桌面環境:XFCE
- 連線方式:透過 RDP 連入(xrdp)
- 輸入法框架:IBus
- 目標:使用 Chewing(新酷音)輸入繁體中文,並用單按左 Shift 切換中英文
本文件適用於已使用 IBus 框架的 XFCE 環境。如果你的桌面是 GNOME,設定方式會不同;GNOME Shell 不接受純 modifier 鍵當切換熱鍵。
步驟一:確認環境
1-1 確認桌面環境
echo $XDG_CURRENT_DESKTOP
echo $DESKTOP_SESSION預期輸出:
XFCE
xfce1-2 確認目前的輸入法框架
echo $GTK_IM_MODULE $QT_IM_MODULE $XMODIFIERS預期輸出:
ibus ibus @im=ibus1-3 確認 IBus daemon 正常運作
ps aux | grep ibus-daemon預期輸出(關鍵在 --xim 參數要存在):
bigred 5010 0.1 0.0 457360 8652 ? Ssl 20:33 0:00 /usr/bin/ibus-daemon --daemonize --xim步驟二:確認 / 安裝中文輸入法引擎
2-1 確認系統有 Chewing 引擎
ibus list-engine | grep -i -E "chewing|pinyin|bopomofo|rime|cangjie"預期輸出(看到 chewing - Chewing 即代表已安裝):
language: Pinyin
chewing - Chewing
language: Tatar, Crimean
xkb:ua:crh_f:crh - Crimean Tatar (Turkish F)
...2-2 若沒有 Chewing,執行以下指令安裝
sudo apt update
sudo apt install ibus-chewing
ibus restart步驟三:確認輸入法清單包含 English 與 Chewing
gsettings get org.freedesktop.ibus.general preload-engines預期輸出:
['xkb:us::eng', 'chewing']如果清單不對,用以下指令設定:
gsettings set org.freedesktop.ibus.general preload-engines "['xkb:us::eng', 'chewing']"步驟四:設定環境變數(關鍵步驟)⭐
這是讓設定能穩定生效的關鍵。即使目前 echo $GTK_IM_MODULE 顯示為 ibus,也要把它寫入 ~/.xprofile,確保 XFCE session 啟動時一定會載入。
4-1 檢查目前狀態
cat ~/.xprofile 2>/dev/null
cat ~/.profile 2>/dev/null | grep -E "GTK_IM_MODULE|QT_IM_MODULE|XMODIFIERS"如果兩個指令都沒輸出,代表環境變數沒寫在使用者層級的設定檔。雖然系統可能有臨時注入,但不夠穩定,要明確寫入。
4-2 寫入 ~/.xprofile
cat > ~/.xprofile << 'EOF'
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
EOF4-3 確認檔案內容
cat ~/.xprofile預期輸出:
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus步驟五:設定左 Shift 為切換熱鍵
5-1 開啟 IBus 設定
ibus-setup5-2 設定 Next input method 為 Shift_L
在 General 分頁:
- 找到 Keyboard Shortcuts 區塊的 Next input method 欄位
- 點右側的
...按鈕開啟設定視窗 - 刪除清單裡所有現有的快捷鍵(例如
<Shift>space) - 在 Key code 欄位手動輸入:
Shift_L - Modifiers 區的所有勾選都不要勾(Shift / Ctrl / Alt / Super 全部不勾)
- 點 Add,再點 OK
設定完成後主畫面的 Next input method 欄位應顯示為:
Shift_L注意:Modifiers 一個都不能勾。如果勾了
<Shift>變成 modifier 用,或是寫成組合鍵(例如<Control>Shift_L),都會導致切換行為異常。
5-3 重啟 IBus
ibus restart步驟六:測試
開啟任一支援文字輸入的應用程式(文字編輯器、瀏覽器網址列等),按下左 Shift 鍵,應該會看到:
- 右上角(或工作列上)的 IBus 圖示在
EN與中文圖示之間切換 - 切到中文模式後,可正常用注音輸入繁體中文
- Shift + 字母鍵(如 Shift+a) 仍然正常輸出大寫字母,不會誤觸切換
完整指令速查
整個流程可以濃縮成以下幾步:
# 1. 確認環境
echo $XDG_CURRENT_DESKTOP # 應為 XFCE
echo $GTK_IM_MODULE $QT_IM_MODULE $XMODIFIERS # 應為 ibus ibus @im=ibus
ps aux | grep ibus-daemon # 確認有 --xim
# 2. 確認引擎
ibus list-engine | grep -i chewing # 應看到 chewing - Chewing
gsettings get org.freedesktop.ibus.general preload-engines # 應為 ['xkb:us::eng', 'chewing']
# 3. 寫入環境變數(關鍵)
cat > ~/.xprofile << 'EOF'
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
EOF
# 4. 開設定 → Next input method 設成 Shift_L (Modifiers 全不勾)
ibus-setup
# 5. 重啟 IBus
ibus restart故障排除
| 症狀 | 可能原因 | 解法 |
|---|---|---|
| 按 Shift 完全沒反應 | 環境變數未生效 | 確認 ~/.xprofile 已寫入,登出再登入 RDP session |
| 按任何鍵都會觸發切換 | Modifiers 勾選了 <Shift>,或 IBus 把 Shift_L 當 modifier 處理 | 重新進 ibus-setup,確認 Modifiers 完全沒勾 |
| 切換到中文後切不回英文 | 快捷鍵設成 <Control>Shift_L 等 modifier 組合,IBus 對這類組合切換不穩定 | 改回單獨 Shift_L,或改用 <Shift>space、<Super>space |
| 螢幕中央跳出選單但右上角不變 | IBus 與桌面環境通訊不同步 | 重啟 IBus(ibus restart),必要時重新登入 session |
| Shift+字母 變成切換而不是大寫 | 同上(modifier 處理錯誤) | 重新檢查 ibus-setup 的設定 |
備註:為什麼 XFCE 可以這樣設,GNOME 不行
- GNOME Shell 會強制攔截輸入法熱鍵,並要求快捷鍵至少包含一個非 modifier 鍵,因此單按 Shift 在 GNOME 上做不到。
- XFCE 不會攔截熱鍵,IBus 可以完整接管,所以單按 Shift_L 切換才有機會穩定運作。
- 如果一定要在 GNOME 上實現單按 Shift 切換,需要改用 Fcitx5 框架(它自己接管熱鍵處理,可繞過 GNOME 的限制)。