Cách chuyển sang Colemak trên Linux
Thiết lập Colemak đúng lớp trên console, X11 hoặc Wayland; hiểu vì sao SSH không cần layout và Vim hjkl cùng phím Ctrl sẽ thay đổi ra sao.
Colemak nằm ở đâu 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 lớp đang đọc bàn phím tại thời điểm đó áp dụng, 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ó gì xảy ra.
Có một lựa chọn thứ tư không cần đế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õ 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 3 lớp phần mềm, lý do remote server hầu như không bao giờ cần chúng, và tác động của việc chuyển layout đế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 kỳ 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 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 trong version 2.34, nên 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 phát hành version mới hơn version đó.
Nếu setxkbmap -query báo lỗi không thể mở display, bạn đang ở trong phiên Wayland và compositor đang quản lý layout. Trường hợp này 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í mà tay trái của bạn đã quen. Khả năng tương thích đó là toàn bộ lý do bố cục này được thiết kế 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 gõ cả D và H bằng cách duỗi một ngón trỏ vào cột giữa của bàn phím. Mod chính thức giữ mỗi chữ cái trên cùng ngón tay đã dùng trong Colemak, nên người gõ Colemak chuyển sang DH chỉ gặp một thay đổi nhỏ thay vì phải học một bố cục mới. Biến thể XKB là colemak_dh, còn colemak_dh_iso dành cho bàn phím có thêm phím bên cạnh Shift trái.
Nếu bạn 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 bố cục thoải mái hơn rồi dừng ở đó. Chuyển bố cục lần thứ hai tốn công gần tương đương lần đầu, vì thứ bạn đang xây dựng lại là trí nhớ vận động gắn với vị trí các phím. Nếu bạn vẫn chưa quyết định có rời QWERTY hay không, hãy xem so sánh Colemak, Dvorak và QWERTY trước khi dành một tháng để xây dựng lại trí nhớ vận động đó.
Thiết lập Colemak trong X11 bằng setxkbmap và localectl
setxkbmap us -variant colemak
setxkbmap -querysetxkbmap -query hiện phải hiển thị variant: colemak, và khi gõ trong bất kỳ cửa sổ nào, hệ thống phải tạo ra các ký tự Colemak. Thay đổi này chỉ có hiệu lực trong suốt phiên X và không ghi gì vào ổ đĩa. Vì vậy, đây là cách an toàn để thử layout trong một giờ.
Để giữ thay đổi này sau khi reboot:
sudo localectl set-x11-keymap us pc105 colemak
localectl statusThứ tự đối số là layout, model, rồi variant. localectl status hiện 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. Vì vậy, 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ì console-setup đọc file này 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à một thiết lập của compositor. Vì vậy, setxkbmap thường không hoạt động đú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 nằm trong 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 với nhau bằng dấu cộng.
Trên sway, đặt thiết lập này trong ~/.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 input device cùng layout mà từng thiết bị đang dùng. Hãy chạy lệnh này khi chỉ một keyboard hoạt động không đúng.
Trên KDE Plasma, mở System Settings, sau đó chọn Keyboard, Layouts, rồi thêm English (US) với variant Colemak.
Đặt Colemak cho console văn bản
Console là tty dạng văn bản mà bạn truy cập bằng Ctrl+Alt+F3 và 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 một terminal workbench trong virtual console thuần.
Trên Debian và Ubuntu, hãy sửa /etc/default/keyboard:
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT="colemak"
XKBOPTIONS=""Sau đó áp dụng thay đổi:
sudo setupconGõ thử trong console để xác nhận. console-setup chuyển mô tả XKB đó thành keymap cho console bằng ckbcomp, nên 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-latin9package kbd cung cấp console map của Colemak với tên i386/colemak/en-latin9. Vì vậy, tên bạn truyền vào 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 xem loadkeys là thao tác thử nghiệm thay vì cấu hình cố định: thiết lập này chỉ tồn tại đến khi reboot. Trên Debian và Ubuntu, lần chạy setupcon khi boot sẽ khôi phục giá trị mà /etc/default/keyboard chỉ định.
Một VPS headless có cần layout Colemak không?
Hầu như không bao giờ, và bạn nên hiểu rõ lý do. 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 local 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. Server nhận n và không có cách nào biết ký tự đó được tạo ra từ phím vật lý nào. Vì vậy, layout bạn đặt trên laptop sẽ theo bạn vào mọi phiên SSH, vào tmux và mọi editor bạn chạy từ xa; máy remote 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 server production. Nếu bạn quản lý một cụm server Linux, layout thuộc về máy ở trước mặt bạn, không thuộc về cả cụm server, 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 việc này.
Có 2 ngoại lệ cần tính trước. Ngoại lệ đầu tiên là console gắn trực tiếp với máy. Browser console trong panel của provider thường hiển thị với virtual machine dưới dạng một keyboard, nên thao tác nhấn phím được gửi đến dưới dạng scancode và console keymap của server quyết định ký tự nào xuất hiện. Đây là nơi duy nhất layout đặt trên server 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 ở đó là rủi ro thực tế.
Serial console hoạt động khác vì nó truyền ký tự và layout local của bạn có hiệu lực. Ngoại lệ thứ hai là máy dùng chung. Console keymap có phạm vi toàn system, nên khi đặt Colemak trên một máy mà người khác cũng đăng nhập, bạn sẽ thay đổi layout của họ, trong khi họ sẽ không biết lý do.
Vim xử lý các phím hjkl như thế nào
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 của QWERTY, k nằm ở vị trí N của QWERTY, còn l nằm ở vị trí U của QWERTY. Vì vậy, các phím di chuyển con trỏ nằm trên 3 hàng thay vì nằm dưới 4 ngón tay.
Có 2 cách xử lý phù hợp. Cả hai đều có người dùng thực tế.
Giữ nguyên cấu hình mặc định và học lại vị trí phím. 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. Mọi hướng dẫn Vim do người khác viết vẫn áp dụng cho bạn đúng như nội dung gốc.
Hoặc remap 4 phím nằm dưới bàn tay phải, tại vị trí trước đây của hjkl. Trên Colemak, 4 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 đã đổi vị trí 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 insert mode, còn k lặp lại lần tìm kiếm gần nhất. Hãy áp dụng cách tương tự cho các phím viết hoa. Nếu không, tổ hợp Shift với phím di chuyển có thể cho kết quả bất ngờ.
Tùy chọn langmap của Vim cũng làm 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 cần xử lý. Cấu hình 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. Tài liệu help của Vim nêu rõ 2 giới hạn: langmap không áp dụng cho tổ hợp Ctrl hoặc Alt, và các mapping của plugin được viết theo 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 1 tháng sẽ khiến bạn mất thêm 1 tháng để làm quen lại.
Điều gì xảy ra với các phím tắt trong terminal
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 chủ động 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í G trên QWERTY. Ctrl+R, dùng để tìm trong history, nằm ở vị trí S trên QWERTY. Ctrl+E, dùng để đi đến cuối dòng, nằm ở vị trí K trên QWERTY. Ctrl+U, dùng để xóa dòng, nằm ở vị trí I trên QWERTY.
tmux vẫn giữ prefix mặc định, vì B không di chuyển trong Colemak. Trên Colemak-DH, B chuyển lên hàng phím trên cùng và prefix cũng di 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 một phím bạn thích chỉ cần sửa 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.
Các phím tắt trên desktop cũng tuân theo quy tắc này. Một binding trên Super+E sẽ di chuyển theo layout, vì nó được xác định bởi ký tự. Một binding trên Super+F1 vẫn giữ nguyên vị trí, vì layout không remap các phím chức năng.
Bạn phải trả giá bao lâu cho việc chuyển layout
Không ai có thể đưa ra một con số áp dụng cho tất cả mọi người. Gõ 10 ngón dựa trên trí nhớ vận động. Bạn không học vị trí của các chữ cái, mà xây dựng lại phản xạ biến một từ thành chuỗi động tác của các ngón tay. Vì vậy, yếu tố duy nhất giúp bạn tiến bộ là thời gian thực sự dành cho việc gõ.
Theo những gì người dùng tự báo cáo, đây là các log luyện tập cá nhân chứ không phải kết quả đo có kiểm soát, tốc độ trong tuần đầu thường thấp hơn nhiều so với một nửa tốc độ cũ. Bạn thường lấy lại tốc độ cũ sau khoảng 1 đến 3 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 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 chuyển layout thành công sẽ dùng hoàn toàn layout mới trên máy chính. Nếu bắt đầu trong một tuần bận rộn, bạn sẽ phải gõ chậm và sai dưới áp lực thời gian. Điều này khiến bạn hình thành thói quen nhìn xuống bàn phím.
Hãy chuẩn bị sẵn cách quay lại layout cũ trước khi cần. Khi bạn muốn dùng QWERTY trở lại cũng chính là lúc có thứ gì đó bị hỏng và có người đang chờ bạn xử lý.
Cách chuyển nhanh lại QWERTY
Trong X11, setxkbmap us khôi phục QWERTY ngay lập tức. Trên console, sudo loadkeys us thực hiện việc 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 việc phải gõ một command bằng layout mà bạn chưa thể gõ:
setxkbmap -layout us,us -variant colemak, -option grp:win_space_toggleThiết lập này nạp Colemak làm layout đầu tiên và US thuần 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ó sẵn để chuyển đổi giữa chúng.
Có 2 prompt nhập password nằm ngoài desktop session và cần được xử lý riêng. Login greeter 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 hiện tại. Nếu disk đượ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 1 lần để kiểm tra khi bạn vẫn còn một cách khác để truy cập 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 chuyển ký tự đó cho ứng dụng, nên ứ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. Vì vậy, cách sửa cho Vim nằm trong config của Vim, và không có một tùy chọn chuyển layout chung theo từng cửa sổ để sử dụng.
Có 2 cách hiệu quả. Cách thứ nhất là áp dụng theo từng 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 cũng chấp nhận các thiết lập tương tự cho từng 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, như langmap của Vim. Game gần như luôn có màn hình gán phím, và đổi binding cho các phím di chuyển ở đó sẽ nhanh hơn việc xử lý layout từ bên ngoài. Với ứng dụng không có tùy chọn này, hãy bind phím chuyển layout ở trên và 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 đi và server nhận cùng các byte như khi người dùng QWERTY gõ. Ngoại lệ là browser console trong panel của nhà cung cấp, vì console này kết nối với máy ảo như một bàn phím và dùng keymap console của chính server. Console là đường cứu hộ khi SSH 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 cảm giác sử dụng thay vì chi phí chuyển đổi. Colemak-DH chuyển vị trí D, B và G, đồng thời đổi chỗ H với M, vì Colemak gốc yêu cầu ngón trỏ với tới giữa hàng phím để gõ D và H. Tên biến thể XKB là colemak và colemak_dh, còn colemak_dh_iso dùng cho bàn phím có thêm phím cạnh phím Shift trái. Chạy localectl list-x11-keymap-variants us | grep colemak để xem hệ thống cung cấp những layout nào.
Các phím hjkl của Vim hoạt động 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 và l nằm dưới U của QWERTY, nên các phím điều khiển con trỏ trải trên 3 hàng. Bạn có thể học lại chúng ở vị trí mới. Cách này giữ nguyên tính hợp lệ của mọi plugin và tutorial. Hoặc bạn có thể remap 4 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 làm việc tương tự trong normal mode, nhưng không áp dụng cho các tổ hợp Ctrl và có thể gây nhầm với mapping của plugin.
Bao lâu thì tôi gõ lại được tốc độ cũ?
Hãy tính theo tuần thay vì ngày, vì đây là trí nhớ vận động và cách luyện duy nhất là thực hành. 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 quay lại mức cũ sau 1 đến 3 tháng sử dụng hằng ngày. Việc đổi qua lại giữa QWERTY và Colemak mỗi ngày sẽ kéo dài thời gian này, vì không phản xạ nào có đủ thời gian ổ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 dùng Wayland. Trên Wayland, compositor quản lý keymap và đẩy keymap đó đến từng ứng dụng. Vì vậy, setxkbmap có thể không tìm thấy display hoặc chỉ thay đổi XWayland, còn các ứng dụng native thì 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.