SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-30

Linux 如何切換 Colemak 鍵盤配置?

了解如何在 Linux 文字主控台、X11 與 Wayland 設定 Colemak,為何 SSH server 不需要配置,以及切換後 Vim 的 hjkl 與 Ctrl 快捷鍵會如何運作。

Colemak 配置在 Linux 的位置

Linux 中的 Colemak 並不是單一的全系統設定。鍵盤配置由當下讀取鍵盤輸入的元件套用,因此可能位於文字主控台、X11 server 或 Wayland compositor 其中之一。若設定在錯誤的層級,看起來就不會有任何變化。

另一個選項完全不經過作業系統。具備內建 firmware remapping 功能的鍵盤,例如執行 QMK 或 VIA 的鍵盤,會直接送出所需字母的按鍵碼。因此,插入任何機器後都能使用 Colemak,完全不需要額外設定,包括 server console 和不屬於你的機器。代價是筆記型電腦的內建鍵盤仍會使用 QWERTY。

本指南接下來會說明這 3 個軟體層、遠端 server 幾乎不需要其中任何一層的原因,以及切換後對 Vim 和 terminal 快捷鍵的影響。

確認系統現有內容

變更任何設定前,先執行以下指令。這些指令會顯示目前設定,以及 X keyboard database 提供的 Colemak 變體清單。

localectl status
setxkbmap -query
localectl list-x11-keymap-variants us | grep colemak

最後一個指令應顯示 colemak 和 colemak_dh。Colemak 已納入 xkeyboard-config 多年。Colemak-DH 在版本 2.34 中加入,因此只有較舊的版本會缺少它。截至 August 2026,Ubuntu 24.04 和 Debian 13 隨附的版本都比這個版本新。

如果 setxkbmap -query 回報無法開啟 display,表示你正在 Wayland 工作階段中,且由 compositor 管理鍵盤配置。這種情況在下方有專屬章節。

Colemak 或 Colemak-DH

Colemak 將 17 個按鍵移離 QWERTY 的位置,保留 10 個按鍵不變,其中包括 Z、X、C 和 V,因此復原、剪下、複製與貼上快速鍵仍位於左手預期的位置。這項相容性正是此鍵盤配置呈現目前樣貌的原因。

Colemak-DH 是 Colemak 的修改版本。它重新配置 D、B 和 G,並交換 H 與 M,因為原版 Colemak 讓手指需要伸入鍵盤中央欄位,才能分別輸入 D 和 H。官方模組讓每個字母繼續由在 Colemak 中使用的同一根手指輸入,因此 Colemak 使用者轉換至 DH 時只需適應少量變更,不必重新學習整個鍵盤配置。XKB 變體是 colemak_dh;具備左 Shift 旁額外按鍵的鍵盤則使用 colemak_dh_iso。

從 QWERTY 開始改用其他配置時,兩者都只需重新學習一次,因此請依舒適度選擇,之後就維持不變。第二次切換配置的成本約與第一次相同,因為需要重建的是與按鍵位置相關的肌肉記憶。如果你仍在考慮是否要離開 QWERTY,請先閱讀 Colemak、Dvorak 與 QWERTY 的比較,再花一個月重建肌肉記憶。

在 X11 中使用 setxkbmap 與 localectl 設定 Colemak

setxkbmap us -variant colemak
setxkbmap -query

現在 setxkbmap -query 應會回報 variant: colemak,在任何視窗中輸入文字也應會產生 Colemak 字母。這項變更只會持續到 X 工作階段結束,且不會寫入磁碟,因此適合用來安全地試用此配置一小時。

若要讓設定在重新開機後仍然保留:

sudo localectl set-x11-keymap us pc105 colemak
localectl status

引數順序依序是配置、型號,再來是變體。現在 localectl status 應會顯示 X11 Layout: us 與 X11 Variant: colemak。除非加入 --no-convert,否則 localectl 也會將此選擇轉換成最接近的主控台鍵盤配置,因此在許多系統上,這個單一指令也能同時套用到 tty。若使用 Debian 或 Ubuntu,請在之後檢查 /etc/default/keyboard,因為 console-setup 開機時會讀取該檔案。

在 Wayland 上設定 Colemak

Wayland 工作階段沒有可供設定的 X server。合成器會載入鍵盤配置,並將其提供給每個應用程式,因此鍵盤配置屬於合成器設定。這也是 setxkbmap 在此環境中看似失效的原因:它可能找不到 display,或只變更 XWayland,而原生 Wayland 應用程式會忽略這項變更。

在 GNOME 中,設定值是 gsettings key:

gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us+colemak')]"

設定會立即套用,不需要登出。字串 us+colemak 是以加號連接的配置與變體。

在 sway 中,將設定寫入 ~/.config/sway/config:

input type:keyboard {
    xkb_layout us
    xkb_variant colemak_dh
}

使用 swaymsg reload 重新載入。swaymsg -t get_inputs 會列出每個輸入裝置及其使用的配置。只有一個鍵盤行為異常時,應執行此命令進行檢查。

在 KDE Plasma 中,開啟 System Settings,依序選取 Keyboard、Layouts,然後新增 English (US) 並選擇 Colemak 變體。

在文字主控台設定 Colemak

主控台是透過 Ctrl+Alt+F3 進入的純文字 tty,並使用獨立的鍵盤配置。您在 X11 或 compositor 中設定的內容不會套用到主控台;如果您在純虛擬主控台上的終端機工作環境中工作,這點尤其重要。

在 Debian 和 Ubuntu 上,編輯 /etc/default/keyboard:

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT="colemak"
XKBOPTIONS=""

接著套用設定:

sudo setupcon

在主控台輸入文字以確認設定。console-setup 會使用 ckbcomp 將 XKB 描述轉換為主控台鍵盤配置,因此這些系統的主控台與 X 共用同一份描述。

在直接使用 kbd 鍵盤配置的發行版上,先查詢名稱:

localectl list-keymaps | grep -i -e colemak -e latin9
sudo localectl set-keymap en-latin9

kbd 套件提供的 Colemak 主控台配置名稱為 i386/colemak/en-latin9,因此通常應傳入 en-latin9,而不是 colemak。請傳入清單中存在的名稱,因為不存在的名稱會被拒絕。

sudo loadkeys en-latin9 會立即變更目前的主控台,sudo loadkeys us 則會還原設定。請將 loadkeys 視為測試,而非永久設定:它只會持續到重新開機;在 Debian 和 Ubuntu 上,開機時執行的 setupcon 會還原 /etc/default/keyboard 所指定的設定。

無頭 VPS 需要 Colemak 鍵盤配置嗎?

幾乎不需要,原因值得了解。SSH 傳送的是字元,而不是按鍵位置。終端機模擬器會接收按鍵動作,由本機鍵盤配置將其轉換為字元,只有該字元會沿著連線傳送。伺服器收到 n 時,無法知道產生它的是哪個實體按鍵。因此,您在筆記型電腦上設定的鍵盤配置會隨您進入每個 SSH 工作階段、tmux 及所有在遠端執行的編輯器,遠端機器完全不需要設定鍵盤。

在開始修改正式環境主機上的鍵盤檔案前,請記住這點。如果您管理 Linux 伺服器群組,鍵盤配置屬於您面前的機器,而不是整個伺服器群組,因此不應納入佈建流程。新 VPS 上的前 10 分鐘能完成更有用的工作。

有兩種例外情況需要事先規劃。第一種是直接連接到機器本身的主控台。供應商控制面板中的瀏覽器主控台通常會以鍵盤裝置的形式呈現給虛擬機器,因此按鍵動作會以掃描碼抵達,再由伺服器自己的主控台鍵盤對應決定要顯示的字元。這是伺服器端設定的鍵盤配置會生效的唯一位置;SSH 無法運作時,這也是您的救援途徑,因此主控台鍵盤對應若只完成一半,會形成實際風險。

序列主控台的行為不同,因為它傳送的是字元,並會套用您的本機鍵盤配置。第二種例外情況是共用機器。主控台鍵盤對應會套用到整個系統,因此在其他人也會登入的主機上設定 Colemak,會一併套用到他們身上,而他們不會知道原因。

Vim 的 hjkl 鍵會怎麼變

在 Colemak 中,h 不會移動。其他 3 個按鍵仍可移動。j 位於 QWERTY 的 Y 鍵位置下方,k 位於 QWERTY 的 N 鍵位置下方,l 位於 QWERTY 的 U 鍵位置下方,因此游標鍵會分散在 3 列,而不是分布在 4 根手指下方。

有 2 種可行作法,而且兩者都有實際使用者。

保留預設值,重新熟悉按鍵位置。設定中的其他部分都不會受影響,所有外掛程式仍可正常運作,其他人撰寫的 Vim 技巧也都能照原樣套用。

或者,重新對應右手原本放在 hjkl 位置下方的 4 個按鍵。在 Colemak 中,這 4 個實體按鍵會輸入 h、n、e 和 i。在 Colemak-DH 中,則會輸入 m、n、e 和 i,因為 DH 將 H 與 M 互換了。

noremap n j
noremap e k
noremap i l
noremap l i
noremap k n

n 現在向下移動,e 向上移動,i 向右移動,而 h 原本就是向左移動。最後 2 行將被取代的指令還原:l 會啟動插入模式,k 會重複上一次搜尋。大寫鍵也要套用相同處理,否則按下 Shift 加上游標鍵時可能會得到意外結果。

Vim 的 langmap 選項可以用較少行數完成類似工作:

set langmap=nj,ek,il,li,kn

每一組對應都表示:你輸入的字元,接著是 Vim 應執行動作的字元。這只套用於一般模式,因此插入模式仍會正常輸入 Colemak 文字。Vim 自己的說明文件記載了 2 項限制:langmap 不適用於 Ctrl 或 Alt 組合鍵,而且針對預設按鍵撰寫的外掛程式對應,在使用此選項時可能會出現異常。

無論選擇哪一種作法,都要一次決定。使用 1 個月後放棄重新對應,等於還要再花 1 個月重新適應。

終端機快速鍵的變化

終端機控制碼來自字元,而不是實體按鍵,因此所有 Ctrl 快速鍵都會隨鍵盤配置移動。Ctrl+C、Ctrl+Z、Ctrl+X 和 Ctrl+V 會維持原本位置,因為 Colemak 刻意將 Z、X、C 和 V 留在 QWERTY 的位置。

你每天使用的 4 個快速鍵會移動。Ctrl+D 用來結束輸入,現在位於 QWERTY 的 G 位置。Ctrl+R 用來搜尋歷史紀錄,位於 QWERTY 的 S 位置。Ctrl+E 用來移至行尾,位於 QWERTY 的 K 位置。Ctrl+U 用來清除整行,位於 QWERTY 的 I 位置。

tmux 會保留預設前綴鍵,因為 B 在 Colemak 中不會移動。在 Colemak-DH 中,B 會移至頂列,而前綴鍵也會跟著移動。如果你在 VPS 上維持長時間執行的 tmux 工作階段,這會是你最先注意到的變化。將前綴鍵重新綁定到慣用按鍵只需修改一行,這比重新訓練同一個反射動作 2 次容易。

桌面快速鍵遵循相同規則。Super+E 上的綁定會隨鍵盤配置移動,因為它是依字元定義。Super+F1 上的綁定則維持原位,因為功能鍵不會由鍵盤配置重新映射。

切換所需的成本

沒有人能替你精確估算需要多久。觸控打字依賴動作記憶。你不是在學習字母的位置,而是在重建將單字轉換成手指動作順序的反射。因此,唯一有效的訓練就是實際打字的時間。

根據使用者回報的情況——這些是自行記錄的練習日誌,不是受控測量結果——第一週的速度通常遠低於原本速度,而每天使用後,大約在 1 到 3 個月之間恢復原本的速度。個體差異很大,因此應把這些數字視為大致趨勢,而不是固定時程。

有兩種習慣會讓過程變慢。一天之中在 QWERTY 與 Colemak 之間切換,會讓兩套反射都不穩定。因此,多數完成切換的人會在主要電腦上完全改用 Colemak。若在忙碌的一週開始切換,你會在時間壓力下以不熟練的速度打字,這會訓練你低頭找按鍵。

請在真正需要恢復原設定之前,先準備好切換回去的方法。因為你想再次使用 QWERTY 的時刻,通常正是某個環節故障且有人正在等待的時刻。

如何快速切換回 QWERTY

在 X11 中,setxkbmap us 會立即還原 QWERTY。在主控台中,sudo loadkeys us 也有相同作用。若要撤銷持久設定,請執行 sudo localectl set-x11-keymap us。

使用切換方式,比在尚未能輸入的鍵盤配置中鍵入指令更方便:

setxkbmap -layout us,us -variant colemak, -option grp:win_space_toggle

這會將 Colemak 載入為第一個配置,將純 US 載入為第二個配置,並使用 Super+Space 在兩者之間切換。colemak, 結尾的逗號不是錯誤:它會讓第一個配置使用 colemak 變體,第二個配置不使用變體。在 GNOME 中,請於 Settings 新增這兩個輸入來源;Super+Space 已可用來切換。

有兩個密碼提示會在桌面工作階段之外執行,因此需要分別處理。登入 greeter 會在套用工作階段設定前啟動,因此請登出後測試,不要只依賴設定內容。如果磁碟已加密,密碼片語提示會從 initramfs 執行,而 initramfs 會使用自己的鍵盤配置副本。在 Debian 和 Ubuntu 中,變更 /etc/default/keyboard 後,請使用 sudo update-initramfs -u 重新建置 initramfs,然後重新開機一次進行測試;此時仍應保留其他方式登入該機器。

我可以讓一個程式使用 QWERTY 嗎?

鍵盤配置會在應用程式讀取按鍵之前套用。X server 或 compositor 會將 scancode 轉換成字元,再將字元傳給應用程式,因此應用程式無法要求使用其他鍵盤配置。它只能重新映射收到的內容。這就是 Vim 的修正必須放在 Vim 設定中的原因,也是沒有通用的個別視窗鍵盤配置切換功能可用的原因。

有兩種方法可行。第一種是依裝置設定。如果 QWERTY 輸入是透過獨立鍵盤進行,請在該裝置上設定鍵盤配置,不要修改整個系統:

xinput list
setxkbmap -device 12 -layout us

從 xinput list 取得 id,並依序在每個鍵盤上輸入以確認結果。sway 也接受從 swaymsg -t get_inputs 針對個別輸入識別碼套用相同設定,而比 type:keyboard 更具體的選取器會優先套用。

第二種方法是在應用程式內重新映射,就像 Vim 的 langmap 一樣。遊戲幾乎都有按鍵綁定畫面,在其中重新綁定移動按鍵,通常比從外部處理鍵盤配置省時。若應用程式沒有這類功能,請綁定上方的鍵盤配置切換,並在啟動應用程式前按下該按鍵。

FAQ

我需要在 VPS 上設定 Colemak 嗎?

如果您是透過 SSH 連線,則不需要。SSH 傳送的是字元,因此鍵盤配置會在任何內容送出前於您的筆記型電腦上解析,伺服器收到的位元組會與 QWERTY 使用者輸入的相同。例外是服務供應商控制面板中的瀏覽器主控台。它會將虛擬機器視為鍵盤連接,並使用伺服器自己的主控台鍵盤配置。SSH 失效時,該主控台是您的救援途徑,因此只有在確定設定正確時才變更,並在 SSH 仍可運作時進行測試。

我應該學習 Colemak 還是 Colemak-DH?

兩者都只需從 QWERTY 重新學習一次,因此應以使用舒適度為選擇依據,而不是考量轉換成本。Colemak-DH 會重新配置 D、B 和 G,並交換 H 與 M,因為標準 Colemak 需要使用食指伸向中間欄位來輸入 D 和 H。XKB 變體名稱是 colemak 和 colemak_dh;具有左 Shift 旁額外按鍵的鍵盤則使用 colemak_dh_iso。執行 localectl list-x11-keymap-variants us | grep colemak 可查看系統提供哪些變體。

在 Colemak 上,Vim 的 hjkl 按鍵會如何變化?

h 保持原位。j 會移到 QWERTY 的 Y 下方,k 會移到 QWERTY 的 N 下方,l 會移到 QWERTY 的 U 下方,因此游標按鍵會分布在三列。您可以重新學習它們的新位置,這樣所有外掛程式與教學內容都仍然適用;也可以重新對應右手下方的 4 個按鍵:Colemak 使用 h、n、e 和 i,Colemak-DH 使用 m、n、e 和 i。Vim 的 langmap 選項可在一般模式中達到相同效果,但不適用於 Ctrl 組合鍵,也可能與外掛程式對應衝突。

要多久才能恢復到原本的輸入速度?

預期需要數週而非數天,因為這是動作記憶,唯一的輸入是練習。使用者自行記錄的練習日誌通常顯示,第一週的速度遠低於原本速度的一半,並在每日使用 1 到 3 個月後恢復。若每天在 QWERTY 與 Colemak 之間交替,恢復時間會更長,因為兩種反射都無法穩定建立。

為什麼 setxkbmap 在我的桌面環境中沒有作用?

幾乎可以確定是因為工作階段使用 Wayland。在 Wayland 下,合成器負責管理鍵盤配置,並將配置套用至每個應用程式。因此,setxkbmap 可能找不到顯示器,或只變更 XWayland,而原生應用程式會忽略該變更。請改在合成器中設定配置:GNOME 使用 org.gnome.desktop.input-sources gsettings 金鑰,sway 使用設定檔中的 xkb_variant,KDE Plasma 則使用系統設定中的 Layouts 頁面。