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

Colemak Mod-DH 與標準 Colemak 怎麼選?

Colemak Mod-DH 將 D、H 移到食指下方,並調整 G、B、V、M。了解六個字母的變更、適合換用的情況,以及 Linux 如何啟用 colemak_dh。

Colemak Mod-DH 的變更內容

Colemak Mod-DH 是標準 Colemak,只移動 6 個字母。D 和 H 從中央兩欄下移到食指下方,G、B、V 和 M 則填入它們留下的按鍵位置。其他按鍵,包括最先學習的主列按鍵,都完全維持標準 Colemak 的位置。

這個變體的名稱就是它的變更內容。在標準 Colemak 中,D 位於標示為 G 的按鍵上,而 H 位於標示為 H 的按鍵上。這兩個按鍵位於鍵盤的中央欄。食指必須將整隻手向側邊移動,才能按到這些位置。因此,Mod-DH 專案將這些位置視為原本良好配置中的弱點,並將這兩個字母都下移一列。

如果你仍在學習鍵盤配置,請直接採用 Mod-DH,不必再比較其他配置。如果你已經能不假思索地使用標準 Colemak 輸入,接下來幾週的輸入速度會變慢,但可換來速度測試無法呈現的舒適度提升。本指南會先說明確切的變更,接著介紹 Linux 端的設定:要要求使用的變體名稱,以及系統沒有提供該變體時的處理方式。

兩種配置並列

標準 Colemak,僅顯示字母:

q w f p g   j l u y ;
a r s t d   h n e i o
z x c v b   k m , . /

Colemak Mod-DH,僅顯示字母:

q w f p b   j l u y ;
a r s t g   m n e i o
z x c d v   k h , . /

共有 6 個字母不同。將其視為左手的 4 次移動,以及右手的 1 次交換,會比較容易理解。左手部分:D 從基準列移到底列;G 從頂列移到 D 離開後的中央欄;B 向上移到 G 原本所在的頂列;V 向右滑動 1 個按鍵,移入 B 離開的位置。右手部分:H 與 M 交換位置,使 H 位於食指下方,而 M 位於中央欄。

請將這些圖視為每列 10 欄,這也是矩陣式(ortholinear)鍵盤的配置方式。在一般交錯排列的鍵盤上,Mod-DH 的左下角還有第 2 種配置,後文會進一步說明。

為什麼在標準 Colemak 中,D 會造成這麼大的問題?

你的食指分別放在兩個基準鍵上:左手標示為 F 的按鍵,在兩種配置中都會輸入 T;右手標示為 J 的按鍵,在兩種配置中都會輸入 N。每根食指也負責旁邊的整欄按鍵,即標示為 G 和 H 的按鍵。手掌若不移動,就無法同時涵蓋這兩欄,因為手指長度不足。因此,手掌必須向側邊移動,其他 3 根手指也會隨之離開基準鍵。這種側向移動是觸控打字中成本最高的動作,也是 Mod-DH 要消除的動作。

標準 Colemak 將 D 放在標示為 G 的按鍵上,並將 H 放在標示為 H 的按鍵上,因此中央兩欄的按鍵都承載常用字母。Mod-DH 則依照上方圖示的配置,將 D 放在標示為 V 的按鍵上,並將 H 放在標示為 M 的按鍵上。在具有錯位排列的鍵盤上,這兩個按鍵各自位於其食指基準鍵右側約半個按鍵寬度的位置,因此手指可在自己的欄位內向下彎曲,手掌不必移動。改由中央兩欄承載的字母,左側是 G,右側是 M。

整個論點是否成立,取決於各字母的輸入頻率。

ChartTypical published English letter frequency, for the six letters Mod-DH moves
The data behind this chart
[
  {
    "label": "H",
    "frequency_pct": 6.1
  },
  {
    "label": "D",
    "frequency_pct": 4.3
  },
  {
    "label": "M",
    "frequency_pct": 2.4
  },
  {
    "label": "G",
    "frequency_pct": 2.0
  },
  {
    "label": "B",
    "frequency_pct": 1.5
  },
  {
    "label": "V",
    "frequency_pct": 1.0
  }
]

以下是一般英文文本常見的已發表統計數據;依據統計語料庫不同,各數值可能上下變動零點幾個百分點,但排名穩定。你輸入的字母中,H 佔 6.1%,D 佔 4.3%,M 佔 2.4%,G 佔 2.0%,V 則佔 1.0%。Mod-DH 並未消除側向伸展,而是將這個動作用在罕見字母上,而不是常用字母上;為此需要輸入 6 個字母動作。

哪些內容維持不變?

  • 左側的主列按鍵 A R S T,以及右側的 N E I O 都不會移動。這 8 個按鍵承擔了最多的打字輸入,也是你最先學會的 Colemak 部分。
  • 最上列除了 1 個按鍵外都相同:左側是 Q W F P,右側是 J L U Y 及分號。
  • 右手側的標點符號按鍵不會移動。
  • 數字列與修飾鍵都維持不變。
  • 綁定 WASD 的遊戲在兩種配置中的行為相同,因為這 4 個實體按鍵在兩者中承載的字母相同。

有一項內容無法在變更後保留。標準 Colemak 會將 Z、X、C 和 V 保留在 QWERTY 的按鍵位置,因此 Ctrl+Z、Ctrl+X、Ctrl+C 和 Ctrl+V 仍位於你從第一次使用電腦起就一直操作的手指下方。Mod-DH 需要使用左下列放置 D,因此這組快捷鍵必須讓位。

目前有 2 種這個角落的配置,且上方圖示只是其中 1 種。一般配置會將 Z、X 和 C 保留在標示為 Z、X 和 C 的按鍵上,並將 V 向右移 1 格,放到標示為 B 的按鍵上。Angle mod 則將整組按鍵向左移 1 格,讓左手食指彎向 D,而不是向右下方伸出去按它。ISO 鍵盤在左 Shift 與 Z 之間多 1 個按鍵,Angle mod 會使用該按鍵。ANSI 鍵盤沒有這個按鍵,因此 ANSI 版本必須重新配置 Z;這可以接受,因為 Z 是英文中最少使用的字母。

這就是套件變體名稱會標示鍵盤類型的原因。請選擇與眼前鍵盤相符的版本,然後按下標示為 Z 的按鍵。輸出的字元會告訴你使用的是哪種配置,以及哪些編輯快捷鍵已經移動。

是否應從標準 Colemak 切換?

  • 你仍在學習,或仍使用 QWERTY:請採用 Mod-DH。它不會比標準 Colemak 更難學,而且之後不必再考慮這個問題。如果你尚未決定是否使用 Colemak,那是前一個問題;請參閱Colemak 與 Dvorak、QWERTY 的比較以作決定。
  • 你已能流暢使用標準 Colemak:效益確實存在,但幅度很小,代價則是數週。只要變更 6 個字母,就足以打斷自動化打字;其中最重要的 2 個字母位於食指負責的按鍵上,而這些字母在大量英文單字中都會出現。實際切換過的人表示,前幾天打字速度會慢得令人難受,通常要幾週才會恢復原本的速度。
  • 你已經有可程式化鍵盤:這是成本最低的情況。變更只需重新建置 1 次韌體,還原也只需再建置 1 次。試用 1 個月,再保留你偏好的配置。
  • 你一天大多時間輸入其他語言:上述頻率數據是以英文為準。在接受這項論點前,請先確認自己的語言,因為 D、H、G 和 M 在不同語言中的重要性並不相同。
  • 你的手會痛:鍵盤配置只是多項因素之一,其他因素還包括桌面高度、椅子、鍵盤與你每天坐在那裡的時間。不要期待只交換字母,就能修正其餘設定所造成的問題。

如何在 Linux 上輸入 Colemak Mod-DH?

先查詢系統目前已有的項目。截至 2026 年 8 月,Mod-DH 變體已包含在 xkeyboard-config 中;這是所有桌面 Linux 使用的鍵盤資料庫。

localectl list-x11-keymap-variants us | grep colemak

目前的系統會列出 colemak 以及 Mod-DH 項目。colemak_dh 是 ANSI 版本,colemak_dh_iso 是 ISO 版本,colemak_dh_ortho 適用於矩陣式鍵盤,colemak_dh_widecolemak_dh_wide_iso 則是寬版,會將右手位置向外移動一欄。UK 配置也提供 Mod-DH 變體;如果使用 UK 鍵盤,請對 gb 執行相同的命令。如果 grep 沒有輸出任何內容,表示你的 xkeyboard-config 版本早於這些變體;下一節即適用於這種情況。

先在 X 工作階段中測試,再決定是否正式使用。

setxkbmap -layout us -variant colemak_dh
setxkbmap -query

setxkbmap -query 會顯示目前生效的配置與變體,讓你確認變更已套用。輸入幾句話,然後使用 setxkbmap -layout us 還原。如果系統不存在該變體,命令會以 Error loading new keyboard description 失敗,鍵盤配置則維持原狀。

請注意,該命令不會執行以下事項。它只影響目前執行中的 X 工作階段,登出後設定就會消失;在 Wayland 下也不會生效,因為鍵盤配置由 compositor 管理。讓配置永久生效需要依照各桌面環境分別處理,相關步驟已整理在 在 console、X11 與 Wayland 中永久設定 Colemak。其中每個步驟都適用於此變體。該指南凡是要求輸入 colemak 的地方,請改為輸入 colemak_dh

如果系統沒有 colemak_dh 變體,該怎麼辦?

有 3 種方式可以取得這個配置,但它們失效的位置不同。

自訂 xkb 變體。 將按鍵定義寫入 symbols 檔案並註冊變體,之後即可像使用套件提供的變體一樣,以名稱啟用。這使用相同的機制,因此行為一致,也同時適用於 X11 和 Wayland 工作階段。代價是需要維護:你在 /usr/share/X11/xkb 下編輯的檔案隸屬於 xkeyboard-config 套件,升級時可能會被取代,而且每台需要使用的機器都必須重新安裝。

使用者空間重新映射工具。 keyd 透過 evdev(核心輸入層)讀取鍵盤,再透過 uinput(核心的輸入注入裝置)寫回重新映射後的按鍵。交換會在任何顯示伺服器看到按鍵之前完成,因此同一個檔案可同時適用於 X 工作階段、Wayland 工作階段及純文字主控台。將配置寫入 /etc/keyd/default.conf

[ids]
*

[main]
e = f
r = p
t = b
y = j
u = l
i = u
o = y
s = r
d = s
f = t
h = m
j = n
k = e
l = i
v = d
b = v
n = k
m = h

每一行表示,左側指定的實體按鍵現在會送出右側指定的按鍵。未變更的按鍵不必列出。分號鍵會在兩個方向互換,以上刻意省略該設定:執行 keyd list-keys 取得你的組建所使用的名稱,再加入那兩行設定。載入配置並確認是否生效:

sudo systemctl enable --now keyd
sudo keyd reload
keyd monitor

keyd monitor 會列出 keyd 所看到的每個按鍵,可用來找出按鍵被重新映射兩次的情況。啟用 keyd 前,先將系統配置切回一般的 US QWERTY,因為 keyd 的輸出仍會由目前設定的配置解讀,而連續套用兩次重新映射後,產生的字母可能完全不符合任何配置。

鍵盤韌體。 QMK、ZMK 和 Vial 將配置寫入鍵盤本身。鍵盤會直接送出所需的字母,主機不會知道曾經進行重新映射。使用 QMK 時,流程是建置後刷入韌體:

qmk setup
qmk list-keyboards
qmk compile -kb planck/rev6 -km default
qmk flash -kb planck/rev6 -km default

上方的鍵盤和 keymap 名稱僅為範例。將 planck/rev6 替換為 qmk list-keyboards 為你的鍵盤輸出的名稱,並將 default 替換為存放 Mod-DH 配置之 keymap 目錄的名稱。

如果鍵盤韌體支援,Vial 和 VIA 也能透過 USB 使用圖形化編輯器完成相同操作,因此不需要編譯器即可移動按鍵。

哪種方法能在文字主控台上運作?

只有韌體會隨時跟著你。xkb 變體只屬於單一機器上的單一工作階段。keyd 只屬於單一機器,且需要該機器上的 root 權限。鍵盤屬於你:將它插入救援 shell、UEFI 設定畫面、剛安裝完成的系統或序列主控台,它都會輸入 Mod-DH,因為另一端不需要知道任何設定。

這對遠端工作的重要性低於一般預期,但對本機主控台則更重要。透過 SSH 連入 VPS 時,伺服器根本看不到你的配置:終端機會將按鍵轉換成字元並傳送出去,因此遠端機器的鍵盤配置無關緊要。真正會受到影響的是你坐在前方操作的主控台,例如開機失敗後的救援 shell,或是 你在備用 TTY 上保留的固定工作環境。Linux 虛擬主控台有自己的鍵盤配置系統,與 xkb 分開;桌面環境的設定不會套用到虛擬主控台。

在 Debian 和 Ubuntu 上,主控台鍵盤配置會由 ckbcomp 根據 xkb 資料產生,因此主控台可以使用相同的變體名稱:

ckbcomp us colemak_dh | sudo loadkeys -

這項設定會持續到下次重新開機。若要保留設定,請在 /etc/default/keyboard 中設定 XKBLAYOUTXKBVARIANT,然後執行 sudo setupcon。在沒有 console-setup 的發行版上,你只能使用隨 kbd 提供的鍵盤配置,而這些配置大多是 QWERTY:在假設存在 Colemak-DH 配置前,先使用 localectl list-keymaps | grep -i colemak 檢查。如果不存在,keyd 是較簡短的做法,因為同一個檔案可以同時涵蓋主控台和圖形工作階段。

切換後會出現哪些問題?

兩層重新映射。 使用 Mod-DH 燒錄的鍵盤,加上主機設定為 colemak_dh,不會產生任何一種配置的正確字母,因為兩份映射會疊加。按下標示為 S 的按鍵:鍵盤送出 R,主機配置將其視為 R 鍵,最後輸出 P。只在一個位置執行映射。

鍵盤不適用的底部列。 在 ISO 鍵盤上選擇 colemak_dh,或在 ANSI 鍵盤上選擇 colemak_dh_iso,會使左下方附近的字母位置錯誤。切換後先按下標示為 Z 的按鍵,因為兩種配置的差異就在那個角落。

登入畫面。 GDM 和 SDDM 各自維護鍵盤設定,因此工作階段使用的配置可能已不是 QWERTY,但密碼提示仍使用 QWERTY。keyd 和韌體可避免這個問題,因為登入畫面顯示前,兩者都已生效。

Caps Lock。 Colemak 公開的配置也會將 Caps Lock 改為 Backspace,但不同實作對是否納入這項變更並不一致。切換後立即確認該按鍵。若在輸入句子途中才發現,會很不方便。

速度暫時下降。 預期前兩天的速度會差到讓你考慮改回原配置。這是正常現象,任何人變更鍵盤配置時都會經歷相同情況。

FAQ

如果我已經使用標準 Colemak,是否值得改用 Colemak Mod-DH?

如果你打字已經完全不需思考,通常不值得。共有 6 個字母會變更,其中 2 個是常用的食指按鍵,這足以打亂你花費數月建立的反射動作。改用 Mod-DH 的使用者表示,前幾天打字速度會非常慢,通常要幾週才會恢復原本的速度。它帶來的主要是舒適度,而不是速度:D 和 H 不再需要讓手部橫向移動。如果你的食指會感到不適,或你使用可編程鍵盤、能以一次刷寫快速還原,便可以考慮切換。

Colemak Mod-DH 會破壞 Ctrl+Z、Ctrl+X、Ctrl+C 和 Ctrl+V 嗎?

它會變更這組快捷鍵中的部分按鍵,但標準 Colemak 不會。標準 Colemak 將 Z、X、C 和 V 保留在 QWERTY 的按鍵位置,因此 4 個快捷鍵都仍在手部預期的位置。Mod-DH 需要使用左下列來放置 D,因此必須移動某個按鍵。在一般排列中,Z、X 和 C 保持原位,而 V 向右移動 1 個按鍵。在 angle mod 排列中,整組按鍵向左移動 1 個位置,並重新安排 Z。切換後按下標示為 Z 的按鍵,即可確認你的實作所提供的排列。

如何確認我的 Linux 系統是否有 colemak_dh 變體?

執行 localectl list-x11-keymap-variants us | grep colemak。其中列出的任何項目都可以依名稱選取。在 X 工作階段中使用 setxkbmap -layout us -variant colemak_dh 測試,並以 setxkbmap -query 確認。如果缺少該變體,setxkbmap 會輸出 Error loading new keyboard description,且鍵盤配置不會變更。此時可以使用自訂 xkb variant、keyd remapper 或鍵盤韌體。

Colemak Mod-DH 能在 Linux 文字主控台中運作嗎?

不能單獨運作。虛擬主控台使用自己的 keymap,由 loadkeys 載入,不會讀取桌面環境的 xkb 設定。在 Debian 和 Ubuntu 上,ckbcomp us colemak_dh | sudo loadkeys - 會將 xkb variant 轉換為目前開機階段使用的主控台 keymap;在 /etc/default/keyboard 中設定 XKBVARIANT,再執行 sudo setupcon,即可讓設定在重新開機後保留。keyd 可在任何發行版的主控台中運作,因為它會在 kernel input layer 重新映射按鍵。韌體也能在主控台中運作,而且不需要在機器上安裝任何軟體。

我應該為鍵盤選擇哪個 Mod-DH 變體?

請依照實體鍵盤配置選擇。colemak_dh 適用於 ANSI 鍵盤,也就是具有寬而平的 Enter 鍵及較長左 Shift 鍵的鍵盤。colemak_dh_iso 適用於 ISO 鍵盤,其 Enter 鍵較高,且左 Shift 與 Z 之間多 1 個按鍵。colemak_dh_ortho 適用於具有直列矩陣的鍵盤。寬版變體會讓右手向外移動 1 欄,只有在你確定需要這種配置時才適合使用。如果左下方附近的字母輸入結果不正確,表示你選錯了變體。

#colemak#keyboard-layouts#ergonomics#linux-desktop#xkb