Đổi sang Colemak trên Linux: console, X11 và Wayland
Hướng dẫn bật Colemak trên console Linux, X11 và Wayland; giải thích vì sao SSH server không cần layout, cùng ảnh hưởng đến Vim hjkl và phím Ctrl.
Vị trí của layout Colemak trên Linux
Colemak trên Linux không phải là một thiết lập áp dụng trên toàn hệ thống. Layout được áp dụng bởi thành phần đang đọc bàn phím tại thời điểm đó, nên nó nằm ở một trong ba nơi: text console, X11 server hoặc Wayland compositor. Đặt trong sai lớp thì sẽ không có thay đổi nào xảy ra.
Có một tùy chọn thứ tư, bỏ qua hoàn toàn hệ điều hành. Bàn phím remap bằng firmware riêng, chẳng hạn một board chạy QMK hoặc VIA, sẽ gửi mã của các chữ cái bạn muốn. Vì vậy, mọi máy bạn cắm bàn phím vào đều gõ theo Colemak mà không cần cấu hình, kể cả server console và máy bạn không sở hữu. Đổi lại, bàn phím laptop của bạn vẫn gõ QWERTY.
Phần còn lại của hướng dẫn này trình bày ba lớp phần mềm, lý do remote server gần như không bao giờ cần các lớp đó, và việc chuyển layout ảnh hưởng thế nào đến Vim cũng như các phím tắt trong terminal.
Kiểm tra những gì hệ thống đã có
Chạy các lệnh này trước khi thay đổi bất cứ thứ gì. Chúng in ra thiết lập hiện tại và danh sách các biến thể Colemak mà cơ sở dữ liệu bàn phím X của bạn cung cấp.
localectl status
setxkbmap -query
localectl list-x11-keymap-variants us | grep colemakLệnh cuối cùng phải in ra colemak và colemak_dh. Colemak đã có trong xkeyboard-config từ nhiều năm nay. Colemak-DH được bổ sung ở version 2.34, vì vậy chỉ các bản phát hành cũ mới thiếu biến thể này. Tính đến tháng 8 năm 2026, Ubuntu 24.04 và Debian 13 đều đi kèm version mới hơn version đó.
Nếu setxkbmap -query báo lỗi không thể mở display, bạn đang ở trong một phiên Wayland và compositor đang quản lý layout. Trường hợp đó có section riêng bên dưới.
Colemak hoặc Colemak-DH
Colemak di chuyển 17 phím khỏi vị trí QWERTY và giữ nguyên 10 phím, trong đó có Z, X, C và V, nên các phím tắt undo, cut, copy và paste vẫn nằm ở vị trí tay trái quen dùng. Khả năng tương thích đó là lý do duy nhất khiến layout này có bố cục như vậy.
Colemak-DH là một biến thể của Colemak. Nó di chuyển D, B và G, đồng thời đổi chỗ H với M, vì Colemak nguyên bản yêu cầu dùng ngón trỏ với ra giữa bàn phím khi gõ cả D và H. Bản mod chính thức vẫn giữ mỗi chữ cái trên cùng ngón tay như trong Colemak, nên người gõ Colemak chuyển sang DH chỉ phải làm quen với một thay đổi nhỏ thay vì học layout mới. Biến thể XKB là colemak_dh, còn colemak_dh_iso dùng cho các bàn phím có thêm phím bên cạnh Shift trái.
Nếu chuyển từ QWERTY, cả hai đều yêu cầu học lại một lần, nên hãy chọn layout thoải mái hơn rồi dừng ở đó. Chuyển layout lần thứ hai tốn công gần bằng lần đầu, vì thứ bạn phải xây dựng lại là trí nhớ vận động gắn với vị trí các phím.
Thiết lập Colemak trong X11 bằng setxkbmap và localectl
setxkbmap us -variant colemak
setxkbmap -querysetxkbmap -query giờ phải hiển thị variant: colemak, và việc gõ trong bất kỳ cửa sổ nào cũng phải tạo ra các ký tự Colemak. Thay đổi này có hiệu lực trong thời gian X session đang chạy và không ghi gì vào disk, nên đây là cách an toàn để thử layout trong một giờ.
Để giữ thiết lập này sau khi reboot:
sudo localectl set-x11-keymap us pc105 colemak
localectl statusThứ tự đối số là layout, rồi model, rồi variant. localectl status giờ phải hiển thị X11 Layout: us và X11 Variant: colemak. localectl cũng chuyển lựa chọn này thành console keymap gần nhất, trừ khi bạn thêm --no-convert, nên trên nhiều hệ thống, một lệnh này cũng áp dụng cho tty. Trên Debian và Ubuntu, hãy kiểm tra /etc/default/keyboard sau đó, vì file này được console-setup đọc khi boot.
Đặt Colemak trên Wayland
Một phiên Wayland không có X server để cấu hình. Compositor nạp keymap rồi cung cấp keymap đó cho từng ứng dụng, nên layout là thiết lập của compositor. Vì vậy, setxkbmap có vẻ không hoạt động trên Wayland: lệnh này có thể không tìm thấy display, hoặc chỉ thay đổi XWayland, còn các ứng dụng Wayland native sẽ bỏ qua thay đổi đó.
Trên GNOME, thiết lập này là một gsettings key:
gsettings set org.gnome.desktop.input-sources sources "[('xkb', 'us+colemak')]"Thiết lập có hiệu lực ngay, không cần logout. Chuỗi us+colemak là layout và variant được nối bằng dấu cộng.
Trên sway, thêm thiết lập này vào ~/.config/sway/config:
input type:keyboard {
xkb_layout us
xkb_variant colemak_dh
}Reload bằng swaymsg reload. swaymsg -t get_inputs liệt kê mọi thiết bị input cùng layout mà thiết bị đó đang dùng. Đây là lệnh cần chạy khi chỉ một bàn phím gặp lỗi.
Trên KDE Plasma, mở System Settings, chọn Keyboard, chọn Layouts, rồi thêm English (US) với variant Colemak.
Đặt Colemak trên console văn bản
Console là tty dạng văn bản thuần mà bạn truy cập bằng Ctrl+Alt+F3, và nó có keymap riêng. Các thiết lập trong X11 hoặc compositor không áp dụng cho console, điều này quan trọng nếu bạn làm việc trên workbench terminal trên virtual console không có desktop.
Trên Debian và Ubuntu, chỉnh sửa /etc/default/keyboard:
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT="colemak"
XKBOPTIONS=""Sau đó áp dụng:
sudo setupconGõ thử trên console để xác nhận. console-setup chuyển mô tả XKB đó thành keymap cho console bằng ckbcomp, vì vậy trên các hệ thống này console và X dùng chung một mô tả.
Trên các distribution dùng trực tiếp kbd keymap, trước tiên hãy lấy tên:
localectl list-keymaps | grep -i -e colemak -e latin9
sudo localectl set-keymap en-latin9Gói kbd cung cấp console map Colemak dưới dạng i386/colemak/en-latin9, vì vậy tên bạn truyền thường là en-latin9 chứ không phải colemak. Hãy truyền một tên có trong danh sách, vì tên không tồn tại sẽ bị từ chối.
sudo loadkeys en-latin9 thay đổi console hiện tại ngay lập tức, còn sudo loadkeys us khôi phục lại. Hãy coi loadkeys là thao tác kiểm thử thay vì cấu hình: thiết lập này chỉ tồn tại đến khi reboot, và trên Debian và Ubuntu, lần chạy setupcon lúc boot sẽ khôi phục giá trị /etc/default/keyboard chỉ định.
Máy chủ VPS không có giao diện đồ họa có cần layout Colemak không?
Hầu như không bao giờ. Lý do của việc này đáng để hiểu rõ. SSH truyền ký tự, không truyền vị trí phím. Terminal emulator nhận thao tác nhấn phím, layout trên máy cục bộ chuyển thao tác đó thành một ký tự, rồi chỉ ký tự này được truyền qua kết nối. Máy chủ nhận n và không có cách nào biết ký tự đó được tạo từ phím vật lý nào. Vì vậy, layout bạn đặt trên laptop sẽ được dùng trong mọi phiên SSH, trong tmux và trong mọi editor bạn chạy từ xa. Máy từ xa hoàn toàn không cần cấu hình keyboard.
Hãy nhớ điều này trước khi bắt đầu chỉnh sửa các file keyboard trên máy production. Nếu bạn quản lý một cụm máy chủ Linux, layout thuộc về máy đang ở trước mặt bạn, không thuộc về cả cụm máy chủ, nên không cần đưa nó vào quy trình provisioning. Mười phút đầu tiên trên một VPS mới mang lại nhiều việc hữu ích hơn.
Có 2 ngoại lệ cần chuẩn bị. Ngoại lệ đầu tiên là console gắn trực tiếp với máy. Browser console trong panel của nhà cung cấp thường hiển thị với virtual machine dưới dạng keyboard. Vì vậy, thao tác nhấn phím được gửi dưới dạng scancode, rồi console keymap của máy chủ quyết định ký tự nào xuất hiện. Đây là nơi duy nhất layout đặt trên máy chủ có hiệu lực. Đây cũng là đường cứu hộ khi SSH ngừng hoạt động, nên một console keymap cấu hình dở dang có thể gây rủi ro thực sự.
Serial console hoạt động khác, vì nó truyền ký tự và layout trên máy cục bộ được áp dụng. Ngoại lệ thứ 2 là máy dùng chung. Console keymap có phạm vi toàn hệ thống. Vì vậy, đặt Colemak trên một máy mà người khác cũng đăng nhập sẽ thay đổi layout của họ, và họ sẽ không biết lý do.
Điều gì xảy ra với các phím hjkl của Vim
Trên Colemak, h không di chuyển. Ba phím còn lại vẫn hoạt động. j nằm ở vị trí Y trên QWERTY, k nằm ở vị trí N trên QWERTY, còn l nằm ở vị trí U trên QWERTY. Vì vậy, các phím điều hướng trải trên ba hàng thay vì nằm dưới bốn ngón tay.
Có hai cách khả thi, và cả hai đều có người dùng thực tế.
Giữ nguyên mặc định rồi học lại vị trí. Không có phần nào khác trong thiết lập bị ảnh hưởng, mọi plugin vẫn hoạt động, và mọi mẹo Vim do người khác viết vẫn áp dụng cho bạn đúng như tài liệu.
Hoặc remap bốn phím nằm dưới bàn tay phải, tại vị trí trước đây của hjkl. Trên Colemak, bốn phím vật lý đó tạo ra h, n, e và i. Trên Colemak-DH, chúng tạo ra m, n, e và i, vì DH đã hoán đổi H với M.
noremap n j
noremap e k
noremap i l
noremap l i
noremap k nn giờ di chuyển xuống, e di chuyển lên, i di chuyển sang phải, còn h vốn đã di chuyển sang trái. Hai dòng cuối khôi phục các lệnh bị thay thế: l bắt đầu insert mode, còn k lặp lại lần tìm kiếm gần nhất. Hãy xử lý tương tự cho các phím viết hoa, nếu không Shift cộng với phím điều hướng sẽ cho kết quả ngoài dự kiến.
Tùy chọn langmap của Vim cũng thực hiện việc tương tự với ít dòng hơn:
set langmap=nj,ek,il,li,knMỗi cặp được hiểu là ký tự bạn gõ, tiếp theo là ký tự mà Vim phải xử lý. Thiết lập này chỉ áp dụng cho normal mode, nên insert mode vẫn nhập văn bản Colemak bình thường. Vim ghi rõ hai giới hạn trong help riêng: langmap không áp dụng cho tổ hợp Ctrl hoặc Alt, và các mapping của plugin viết dựa trên phím mặc định có thể hoạt động bất thường khi dùng tùy chọn này.
Dù chọn cách nào, hãy chọn một lần và dùng nhất quán. Một remap bị bỏ sau một tháng sẽ khiến bạn mất thêm một tháng nữa.
Các phím tắt trong terminal thay đổi như thế nào
Mã điều khiển của terminal được tạo từ ký tự, không phải từ phím vật lý, nên mọi phím tắt Ctrl đều di chuyển theo layout. Ctrl+C, Ctrl+Z, Ctrl+X và Ctrl+V vẫn giữ nguyên vị trí, vì Colemak cố ý giữ Z, X, C và V ở vị trí tương ứng trên QWERTY.
Bốn phím tắt bạn dùng hằng ngày sẽ thay đổi vị trí. Ctrl+D, dùng để kết thúc input, giờ nằm ở vị trí QWERTY của G. Ctrl+R, dùng để tìm trong history, nằm ở vị trí QWERTY của S. Ctrl+E, dùng để di chuyển đến cuối dòng, nằm ở vị trí QWERTY của K. Ctrl+U, dùng để xóa dòng, nằm ở vị trí QWERTY của I.
tmux vẫn giữ prefix mặc định, vì B không đổi vị trí trong Colemak. Trên Colemak-DH, B chuyển lên hàng trên và prefix cũng chuyển theo. Đây là điều đầu tiên bạn sẽ nhận thấy nếu vẫn giữ một phiên tmux chạy lâu trên VPS. Đổi prefix sang phím bạn thích chỉ cần chỉnh một dòng. Cách này dễ hơn việc phải luyện lại cùng một phản xạ hai lần.
Phím tắt trên desktop cũng tuân theo quy tắc tương tự. Binding trên Super+E sẽ di chuyển theo layout, vì nó được xác định bằng ký tự. Binding trên Super+F1 vẫn giữ nguyên vị trí, vì phím chức năng không bị layout remap.
Chi phí chuyển đổi về thời gian
Không ai có thể đưa ra một con số chính xác cho đôi tay của bạn. Gõ phím mười ngón dựa trên trí nhớ vận động. Bạn không học vị trí các chữ cái; bạn đang xây dựng lại phản xạ biến một từ thành chuỗi ngón tay. Vì vậy, yếu tố duy nhất thực sự giúp ích là thời gian dành cho việc gõ phím.
Theo những gì người dùng báo cáo — đây là nhật ký luyện tập tự ghi chép, không phải kết quả đo có kiểm soát — trong tuần đầu, tốc độ thường thấp hơn nhiều so với một nửa tốc độ cũ. Sau đó, họ thường quay lại tốc độ cũ trong khoảng từ một đến ba tháng sử dụng hằng ngày. Mức chênh lệch giữa từng người khá lớn, nên hãy xem các mốc này là xu hướng chung, không phải lịch trình cố định.
Hai thói quen sẽ làm quá trình chậm hơn. Việc luân phiên giữa QWERTY và Colemak trong ngày khiến cả hai phản xạ đều yếu. Vì vậy, đa số người hoàn tất quá trình chuyển đổi đều dùng hoàn toàn layout mới trên máy chính. Bắt đầu trong một tuần bận rộn khiến bạn phải gõ kém chính xác khi chịu áp lực thời gian. Điều này lại rèn cho bạn thói quen nhìn xuống các phím.
Hãy thiết lập sẵn cách quay lại layout cũ trước khi cần đến nó. Vì lúc bạn muốn dùng lại QWERTY cũng thường là lúc có thứ gì đó bị hỏng và đang có người chờ bạn xử lý.
Cách chuyển nhanh về QWERTY
Trong X11, setxkbmap us khôi phục QWERTY ngay lập tức. Trên console, sudo loadkeys us cũng làm tương tự. Để hoàn tác thiết lập persistent, chạy sudo localectl set-x11-keymap us.
Dùng phím chuyển đổi tốt hơn một command mà bạn phải nhập bằng layout hiện tại chưa thể gõ được:
setxkbmap -layout us,us -variant colemak, -option grp:win_space_toggleLệnh này nạp Colemak làm layout đầu tiên và US mặc định làm layout thứ hai. Super+Space chuyển đổi giữa hai layout. Dấu phẩy ở cuối colemak, không phải lỗi đánh máy: nó gán variant colemak cho layout đầu tiên và không gán variant cho layout thứ hai. Trên GNOME, thêm cả hai input source trong Settings. Super+Space đã được cấu hình sẵn để chuyển đổi giữa chúng.
Hai prompt nhập password nằm ngoài desktop session và cần được xử lý riêng. Màn hình login khởi động trước khi các thiết lập của session được áp dụng. Vì vậy, hãy đăng xuất để kiểm tra, thay vì chỉ tin vào thiết lập. Nếu ổ đĩa được mã hóa, prompt nhập passphrase chạy từ initramfs. initramfs có bản sao keymap riêng. Trên Debian và Ubuntu, hãy rebuild initramfs bằng sudo update-initramfs -u sau khi thay đổi /etc/default/keyboard. Sau đó reboot một lần để kiểm tra, khi bạn vẫn còn cách khác để truy cập vào máy.
Tôi có thể giữ một chương trình dùng QWERTY không?
Layout được áp dụng trước khi ứng dụng nhận phím. X server hoặc compositor chuyển scancode thành ký tự rồi gửi ký tự đó cho ứng dụng. Vì vậy, ứng dụng không thể yêu cầu một layout khác. Ứng dụng chỉ có thể remap dữ liệu nhận được. Đây là lý do cách sửa cho Vim nằm trong config của Vim, đồng thời không có cơ chế chuyển layout chung theo từng cửa sổ để sử dụng.
Có 2 cách hoạt động. Cách đầu tiên là áp dụng theo thiết bị. Nếu bạn gõ QWERTY trên một keyboard riêng, hãy đặt layout cho thiết bị đó thay vì đặt cho toàn hệ thống:
xinput list
setxkbmap -device 12 -layout usLấy id từ xinput list, rồi xác nhận bằng cách lần lượt gõ trên từng keyboard. sway chấp nhận các thiết lập tương tự theo input identifier từ swaymsg -t get_inputs, và selector cụ thể hơn sẽ được ưu tiên hơn type:keyboard.
Cách thứ hai là remap ngay trong ứng dụng, giống như langmap của Vim. Game gần như luôn có màn hình gán phím. Gán lại các phím di chuyển ở đó sẽ nhanh hơn việc cố xử lý layout từ bên ngoài. Với ứng dụng không hỗ trợ cách này, hãy bind phím chuyển layout ở trên rồi nhấn phím đó trước khi khởi chạy ứng dụng.
FAQ
Tôi có cần đặt Colemak trên VPS không?
Không, nếu bạn truy cập VPS qua SSH. SSH truyền các ký tự, nên layout được xử lý trên laptop trước khi gửi; server nhận được cùng các byte như khi người dùng gõ bằng QWERTY. Ngoại lệ là browser console trong panel của nhà cung cấp, vì nó kết nối với virtual machine dưới dạng bàn phím và dùng keymap console riêng của server. Console đó là đường cứu hộ khi SSH bị lỗi, nên chỉ thay đổi khi bạn chắc chắn và hãy kiểm tra trong lúc SSH vẫn hoạt động.
Tôi nên học Colemak hay Colemak-DH?
Cả hai đều yêu cầu học lại từ QWERTY, nên hãy chọn theo mức độ thoải mái thay vì chi phí chuyển đổi. Colemak-DH di chuyển D, B và G, đồng thời hoán đổi H với M, vì Colemak gốc yêu cầu ngón trỏ với vào cột giữa khi gõ D và H. Tên biến thể XKB là colemak và colemak_dh, còn colemak_dh_iso dành cho keyboard có thêm phím bên cạnh shift trái. Chạy localectl list-x11-keymap-variants us | grep colemak để xem system của bạn hỗ trợ những layout nào.
Các phím hjkl của Vim thay đổi thế nào trên Colemak?
h vẫn ở nguyên vị trí. j nằm dưới Y của QWERTY, k nằm dưới N của QWERTY, còn l nằm dưới U của QWERTY, nên các phím di chuyển con trỏ trải trên ba hàng. Bạn có thể học lại vị trí mới của chúng; cách này giữ nguyên tính tương thích với mọi plugin và tutorial. Hoặc bạn có thể remap bốn phím dưới tay phải: h, n, e và i trên Colemak; m, n, e và i trên Colemak-DH. Tùy chọn langmap của Vim cũng thực hiện việc này trong normal mode, nhưng không áp dụng cho các tổ hợp Ctrl và có thể gây nhầm lẫn với các mapping của plugin.
Bao lâu thì tôi có thể gõ lại với tốc độ cũ?
Hãy tính bằng vài tuần thay vì vài ngày, vì đây là kỹ năng vận động và cách duy nhất để cải thiện là luyện tập. Các log luyện tập do người dùng tự ghi thường cho thấy tốc độ trong tuần đầu thấp hơn nhiều so với một nửa tốc độ cũ, rồi trở lại mức cũ sau một đến ba tháng sử dụng hằng ngày. Việc luân phiên QWERTY và Colemak mỗi ngày sẽ kéo dài thời gian này, vì không layout nào có đủ thời gian để hình thành phản xạ ổn định.
Vì sao setxkbmap không có tác dụng trên desktop của tôi?
Gần như chắc chắn vì session đang chạy Wayland. Trên Wayland, compositor quản lý keymap và đẩy keymap đó đến từng ứng dụng, nên setxkbmap có thể không tìm thấy display hoặc chỉ thay đổi XWayland; các ứng dụng native sẽ bỏ qua thay đổi này. Hãy đặt layout trong compositor: dùng key gsettings org.gnome.desktop.input-sources trên GNOME, xkb_variant trong cấu hình sway, hoặc trang Layouts trong System Settings của KDE Plasma.