SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-13

Linux 鍵盤配置:如何設定 Colemak 與 Colemak-DH

完整指南說明如何在 Linux 文字控制台、X11 與 Wayland 設定 Colemak。文中解析 SSH 遠端連線的配置邏輯,並探討切換後對 Vim 快捷鍵 hjkl 與 Ctrl 組合鍵的具體影響。

Linux 上的 Colemak 配置位置

Linux 上的 Colemak 並非單一的全系統設定。鍵盤配置取決於當下讀取鍵盤輸入的層級,因此它存在於以下三個位置之一:文字控制台 (text console)、X11 伺服器或 Wayland 合成器 (compositor)。若設定位置錯誤,將不會產生任何效果。

第四種選擇是完全繞過作業系統。若鍵盤韌體本身支援重新對應(例如執行 QMK 或 VIA 的鍵盤),它會直接發送你所設定的字母代碼。如此一來,無論將鍵盤插入哪台機器(包含伺服器控制台或非你所有的機器),都能直接輸入 Colemak,無需任何額外配置。缺點是筆記型電腦內建鍵盤仍會維持 QWERTY 配置。

本指南後續將涵蓋這三個軟體層級、說明為何遠端伺服器幾乎不需要這些設定,並探討此切換對 Vim 及終端機捷徑的影響。

檢查系統現有設定

在進行任何變更前,請先執行下列指令。這些指令會顯示目前的設定,以及 X 鍵盤資料庫中提供的 Colemak 變體清單。

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

最後一個指令應輸出 colemakcolemak_dh。Colemak 已納入 xkeyboard-config 多年。Colemak-DH 則是在 2.34 版本加入,因此只有極舊的版本才會缺少此選項。截至 2026 年 8 月,Ubuntu 24.04 與 Debian 13 皆已搭載更新的版本。

setxkbmap -query 顯示無法開啟顯示(cannot open a 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 轉換過來時,兩者都需要經歷一次重新學習的過程,因此請依據舒適度選擇即可,無需過度糾結。第二次更換配置的成本與第一次相當,因為你所重建的是與按鍵位置連結的肌肉記憶。

使用 setxkbmap 與 localectl 在 X11 設定 Colemak

setxkbmap us -variant colemak
setxkbmap -query

setxkbmap -query 現在應顯示 variant: colemak,且在任何視窗中輸入皆會產生 Colemak 鍵位。此變更僅持續至當前 X session 結束,不會寫入磁碟,因此這是測試該鍵盤配置最安全的方式。

若要讓設定在重新開機後維持:

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

參數順序依序為 layout、model 與 variant。localectl status 現在應顯示 X11 Layout: usX11 Variant: colemak。除非加入 --no-convert 參數,否則 localectl 會自動將此選擇轉換為最接近的 console keymap,因此在許多系統上,此單一指令亦可同時設定 tty。在 Debian 與 Ubuntu 上,請隨後檢查 /etc/default/keyboard,因為該檔案即為 console-setup 於開機時讀取的設定檔。

在 Wayland 上設定 Colemak

Wayland 工作階段沒有可供設定的 X server。由合成器(compositor)載入鍵盤對應並傳遞給各個應用程式,因此鍵盤配置屬於合成器的設定。這就是為什麼 setxkbmap 在此無法運作的原因:它不是找不到顯示器,就是僅能變更 XWayland,導致原生 Wayland 應用程式忽略該設定。

在 GNOME 上,此設定位於一個 gsettings 鍵值:

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 或視窗合成器中所做的設定無法影響此處,若你需要在 裸虛擬主控台上的終端機工作台 進行作業,這點相當重要。

在 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 的前十分鐘 有更多比這更重要的工作。

有兩個例外情況值得規劃。第一是直接連接到機器的控制台。雲端供應商面板中的瀏覽器控制台通常會以鍵盤形式呈現給虛擬機器,因此按鍵會以掃描碼(scancode)傳入,由伺服器本身的控制台鍵盤映射決定顯示何種字元。這是唯一會受伺服器端鍵盤配置影響的地方,同時也是 SSH 失效時的救援途徑,因此若該處的控制台鍵盤映射設定未完成,將會帶來實際風險。

序列埠控制台(serial console)的運作方式則不同,因為它傳輸的是字元,且會套用您本機的配置。第二個例外是多人共用的機器。控制台鍵盤映射是全系統性的,因此在他人也會登入的機器上設定 Colemak,會同時改變他們的輸入方式,且他們將無法察覺原因。

Vim 的 hjkl 按鍵會發生什麼事

在 Colemak 鍵盤配置上,h 無法移動游標,但其他三個按鍵可以。j 位於 QWERTY 的 Y 鍵下方,k 位於 QWERTY 的 N 鍵下方,而 l 則位於 QWERTY 的 U 鍵下方,因此游標鍵會分散在三列,而非集中在四根手指下方。

目前有兩種可行的解決方案,且兩者皆有實際使用者。

維持預設值並重新學習按鍵位置。這樣做不會破壞現有的設定,所有外掛程式皆能正常運作,且網路上任何關於 Vim 的教學文章對您而言都完全適用。

或者,將這四個按鍵重新對應到您右手下方原本 hjkl 的位置。在 Colemak 上,這些按鍵分別對應 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 本身就是向左移動。最後兩行指令用於恢復被您取代的功能:l 用於進入插入模式,k 用於重複上一次的搜尋。請記得對大寫字母進行相同的設定,否則 Shift 組合鍵的行為會讓您感到意外。

Vim 的 langmap 選項能以更少的行數達成類似效果:

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

每一對設定的讀法為:您輸入的字元,後接 Vim 應執行的動作。此設定僅適用於一般模式,因此插入模式仍能正常輸入 Colemak 字元。Vim 內建說明文件記載了兩項限制:langmap 不適用於 Ctrl 或 Alt 組合鍵,且針對預設按鍵編寫的外掛程式在啟用此功能時,行為可能會出現異常。

無論您選擇哪種方式,請務必堅持下去。若您在一個月後放棄重新對應,將會導致您必須再花一個月重新適應。

終端機快捷鍵會發生什麼變化

終端機控制碼源自於字元,而非實體按鍵,因此每個 Ctrl 快捷鍵都會隨鍵盤配置移動。Ctrl+C、Ctrl+Z、Ctrl+X 與 Ctrl+V 會維持其位置,這是因為 Colemak 特意將 Z、X、C 與 V 保留在 QWERTY 的位置上。

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

tmux 會保留其預設的前綴鍵,因為 B 鍵在 Colemak 中並未移動。在 Colemak-DH 配置中,B 鍵會移至頂排,前綴鍵也會隨之移動;如果您在 VPS 上長期執行 tmux session,這將是您最先注意到的事。將前綴鍵重新綁定到您習慣的按鍵只需一行設定,這比重複訓練相同的肌肉記憶要容易得多。

桌面快捷鍵遵循相同的規則。綁定在 Super+E 的快捷鍵會隨配置移動,因為它是依據字元定義的。綁定在 Super+F1 的快捷鍵則會維持原位,因為功能鍵不會被鍵盤配置重新對應。

轉換所需的時長

沒有人能給出具體的練習時數。盲打是肌肉記憶。你不是在學習字母的位置,而是在重建將單字轉化為手指動作的反射,因此唯一有效的投入就是打字練習的時間。

根據使用者的回報(這些多為個人練習紀錄,而非受控測量),第一週的速度通常不到原先的一半,而回到原有速度則需每日使用一到三個月不等。個體差異極大,請將這些數據視為參考趨勢,而非嚴格的時間表。

有兩個習慣會拖慢進度。在一天內交替使用 QWERTY 與 Colemak 會導致兩種反射都無法穩固,因此大多數成功轉換的人都會在主力機器上全面切換。在繁忙的一週開始練習,會導致你在時間壓力下打字錯誤,進而養成低頭看鍵盤的習慣。

在需要用到 QWERTY 之前先準備好退路,因為當你最需要切換回 QWERTY 時,通常正是系統故障且有人在等待處理的時候。

如何快速切換回 QWERTY

在 X11 中,setxkbmap us 可立即恢復為 QWERTY。在控制台(console)上,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 上,請於「設定」中加入這兩種輸入來源,系統預設即會以 Super+Space 進行切換。

有兩個密碼提示介面位於桌面工作階段之外,需額外處理。登入畫面(greeter)會在您的工作階段設定套用前啟動,因此請透過登出進行測試,而非直接信任設定。若磁碟已加密,密碼短語提示會從 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 使用者輸入的完全相同。唯一的例外是雲端服務商提供的瀏覽器控制台(Browser Console),它會直接模擬鍵盤輸入並使用伺服器本身的控制台鍵盤配置。該控制台是 SSH 失效時的救援管道,因此請務必在確認 SSH 運作正常的情況下進行測試,再決定是否變更設定。

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

兩者都需要從 QWERTY 重新學習,因此請根據舒適度而非遷移成本來選擇。Colemak-DH 重新配置了 D、B 與 G 鍵,並將 H 與 M 互換,這是因為標準 Colemak 需要用食指伸展至中間列來輸入 D 與 H。對應的 XKB 變體名稱為 colemakcolemak_dh,而 colemak_dh_iso 則適用於左 Shift 鍵旁有額外按鍵的鍵盤。執行 localectl list-x11-keymap-variants us | grep colemak 即可查看系統提供的選項。

使用 Colemak 時,Vim 的 hjkl 鍵會發生什麼變化?

h 的位置保持不變。j 會移至 QWERTY 的 Y 鍵下方,k 移至 QWERTY 的 N 鍵下方,l 移至 QWERTY 的 U 鍵下方,導致游標鍵分散在三行上。您可以選擇在新的位置重新適應,這樣所有外掛與教學都能維持有效;或者,您也可以將這四個鍵重新對應到右手下方:Colemak 為 h、n、e 與 i,Colemak-DH 則為 m、n、e 與 i。Vim 的 langmap 選項可在一般模式下達成相同效果,但它不適用於 Ctrl 組合鍵,且可能會導致外掛對應混亂。

需要多久才能恢復到原本的打字速度?

請預期需要數週而非數天,因為這涉及肌肉記憶,唯一的途徑就是練習。根據練習日誌顯示,第一週的速度通常不到原本的一半,每日練習一至三個月後即可恢復。若每天在 QWERTY 與 Colemak 之間切換,會拉長適應期,因為兩種反射機制都無法穩定建立。

為什麼在桌面上執行 setxkbmap 沒有反應?

這幾乎可以確定是因為您使用的是 Wayland。在 Wayland 下,合成器(Compositor)負責管理鍵盤配置並將其推送到各個應用程式,因此 setxkbmap 要麼無法找到顯示器,要麼僅能變更 XWayland 的設定,導致原生應用程式忽略該指令。請改在合成器中設定配置:GNOME 可使用 org.gnome.desktop.input-sources gsettings 鍵,sway 可修改 xkb_variant 設定檔,或在 KDE Plasma 的系統設定(System Settings)中的「配置(Layouts)」頁面進行調整。