Bàn Phím

“Nước Nam ta mai sau này hay dở cũng ở chữ Quốc Ngữ!”

~ Nguyễn Văn Vĩnh ~

« English »

cập nhật: 2022-08-02
(lỗi chính tả)

Tôi dành đa số thời gian cho việc viết nên theo tự nhiên thiết lập cái bàn phím của mình là việc tôi bắt buộc phải chú tâm đến. Tháng 6 năm 2021 tôi chuyển sang dùng GNU/Linux. Cuộc đời tôi thật sự thay đổi sau sự kiện này. Một trong những việc đầu tiên tôi làm là tìm cách gõ tiếng Việt.

Có ba hướng tiếp cận GNU/Linux để gõ tiếng Việt:

  1. Dùng VIM để gõ tất cả mọi thứ.
  2. Dùng phần mềm dạng như ibus-unikey - mới hơn.
  3. Thiết lập bàn phím tiếng Việt trong X11. - già hơn.

Tôi nghĩ VIM là ứng dụng vĩ đại nhất mà con người từng tạo ra. Nhưng Cách(0) cần phải thiết lập khá nhiều bước và thật sự không tiện chút nào để nhảy từ ứng dụng này sang ứng dụng khác chỉ để gõ được tiếng Việt. Dù cách này có tốc độ khá tốt, VIM thật sự không phải là công cụ để giải quyết vấn đề này. Sau một thời gian nhảy như một cóc tăng động thì tôi quyết định tìm phương án tốt hơn.

Cách(2) dựa trên X Window System - hệ thống cửa sổ X.

Tôi chọn Cách(1) trước vì nó quen thuộc hơn.

Cách(1) cho phép người dùng gõ được các ngôn ngữ có ký tự tượng hình dễ dàng hơn như tiếng Hoa, tiếng Hàn, tiếng Nhật…. Ưu điểm lớn nhất của việc sử dụng cách này là bạn không cần phải học gõ tiếng Việt lại. Thêm nữa cách này bấm ít nút hơn vì phần mềm hỗ trợ gõ dấu tự động khá nhiều.

Bây giờ, thì tôi đã chuyển sang dùng Cách(2) vì những lý do sau đây:

  1. Tôi chỉ có nhu cầu gõ tiếng Việt và tiếng Anh.
  2. Với Cách(1), tôi phải đổi định dạng bàn phím mỗi lần muốn gõ thứ ngôn ngữ kia.
  3. Khi dùng Cách(1) tôi vẫn phải thiết lập thêm cho VIM dể gõ tiếng Việt. Thêm nữa, mỗi khi muốn nhảy đến một ký tự không có dấu tiếng Việt trong VIM, tôi phải đợi bộ đệm dừng nhận lệnh trước khi con trỏ nhảy đến chữ tôi muốn.
  4. Cài thêm phần mềm chỉ để gõ chữ đối với tôi hơi vô lý khi X11 đã có sẵn tính năng để gõ được tất cả ký tự UTF-8.
  5. Tôi thích tự gõ từng chữ hơn vì với Cách(1) đố bạn gõ được: địảởâu¿
  6. Những ký tự đặc biệt luôn ở ngay dưới đầu ngón tay ví dụ: £2⁸÷⅜₿×₫6⁵−8°+∞≠Ø35mm𝅘𝅥♪♫…😜
  7. Thiết lập bàn phím cho X11 linh hoạt, nhẹ và nhanh hơn.
  8. Tôi không ngại học.

Tất cả chúng ta đều phải học cách cầm bút ở những năm đầu đời. Chúng ta học cầm bút đầu tiên tôi nghĩ không phải vì số tuổi quá nhỏ để có thể ấn nút trên bàn phím. Lý do chính tôi nghĩ là vì cần phải hiểu khái niệm về chữ viết trước khi tìm hiểu đến công cụ cải thiện tốc độ. Vậy nên sẽ tốt hơn nếu tôi chia sẻ những gì tôi biết để bạn có góc nhìn toàn diện hơn khi bấm nút trên bàn phím điện tử…

Lưu ý: Chỉ nên dùng MỘT trong hai cách nếu không muốn phát điên.

~*~


Mục Lục

~*~

cập nhật: 2022-06-09
(đổi tên)

~*~


Kiến Thức Nền

~*~

cập nhật: 2023-02-12
(tải hình địa phương)

Bạn đang đọc trang mạng này trên thiết bị điện tử. Tôi cũng đang viết trang mạng này trên máy tính. Chữ là công cụ lâu đời nhất mà con người phát minh để có thể truyền đạt thông tin cho nhau vượt qua khỏi giới hạn thời gian. Máy in chữ đã gỡ bỏ cả giới hạn không gian từ khoảng năm 1440. Kỹ thuật số đã tăng tốc độ chuyền chữ từ nguồn đến ngọn lên mức tối đa từ khoảng năm 1960.

Quả Cầu Chữ của Hansen¹

Trước khi máy đánh chữ phổ thông ra đời cho đại chúng khoảng những năm 1860 thì công cụ để viết chữ chỉ có giấy, bút và mực. Máy tính cá nhân mới chỉ được phổ biến vào những năm 1990. Bàn phím ảo trên thiết bị cảm ứng cũng chỉ mới phổ biến từ những năm 2010. Và thời đại này, đa số bàn phím đều có định dạng ‘QWERTY’.

Cách sắp đặt những nút có mặt chữ cái tiếng Anh theo định dạng ‘QWERTY’ này bắt nguồn từ máy đánh chữ của Sholes & Gilden ra đời năm 1874. Những nút còn lại trên bàn phím máy tính với ký tự in được thuộc bảng ký tự ‘American Standard Code for Information Interchange’ dịch là ‘Chuẩn Mã Trao Đổi Thông Tin Hoa Kỳ’, viết tắt là ASCII.

Chúng ta đã quen sử dụng bàn phím định dạng chuẩn Mỹ này vì đây là thiết bị thông dụng và phổ biến nhất được bày bán trên thị trường không chỉ tại Việt Nam mà toàn thế giới. Không ai chắc lý do nhưng tôi đoán một phần là vì toàn bộ phần mềm công nghệ kỹ thuật số đều dựa trên ASCII.

Hệ điều hành GNU/Linux sử dụng X11 làm hầu đồ hoạ. Giao thức này không chỉ phổ biến trên Linux mà còn trên nhiều hệ điều hành họ *NIX* khác. Sở dĩ có số ‘11’ trong tên ‘X11’ là vì đây là phiên bản thứ 11 trình làng từ tháng 9 năm 1987.

X11 là giao thức để hầu đồ hoạ. Nghĩa là nó chỉ cung cấp cơ cấu cho các phần mềm đồ hoạ khác để vẽ trên màn hình LED, và chuyền lệnh về từ bàn phím và chuột máy tính. Nói cách khác, X11 là cầu nối giữa:

[thiết bị nhận tín hiệu] →X11→ [ứng dụng] →X11→ [thiết bị trả tín hiệu]

~*~

Quả Cầu Chữ của Hansen¹: https://commons.wikimedia.org/wiki/File:Malling_Hansen,1867,_D%C3%A4nemark.jpg


Phần Cứng

~*~

cập nhật: 2022-08-02
(câu chữ)

Khi bạn mở bất kể một phần mềm đồ họa nào nhận lệnh từ bàn phím ví dụ như giao diện dòng lệnh giả lập (terminal emulator) và bấm nút trên bàn phím phần cứng, tín hiệu điện này sẽ đi từ bàn phím phần cứng về nhân Linux rồi chuyền sang X11 để giải mã theo bảng ký tự đã thiết lập. Mã này sau đó mới được gửi về đến phần mềm cần hiển thị chữ trên màn hình ví dụ như giao diện dòng lệnh bạn đang mở.

Chúng ta sẽ dùng trương trình showkey để tìm hiểu về cơ cấu hoạt động của bàn phím máy tính trên Linux.

Mỗi nút trên bàn phím phần cứng có mã tín hiệu riêng. Nếu bạn tò mò muốn biết tín hiệu mà phần nhân Linux nhận vào từ nút mình bấm, chạy lệnh này:


    sudo showkey --scancodes    

Trương trình sẽ thoát sau 10 giây không bấm nút.

Cái số bạn nhìn thấy trên màn hình là số hệ 16 hay gọi là thập lục phân. Cái số này đại diện cho tín hiệu điện từ bàn phím phần cứng.

Trừ khi bạn là kỹ sư phần mềm tầng thấp thì đa số không ai muốn đọc cái số kì quái này cả nên Linux chuyển cái số này sang keycode - mã bàn phím. Bạn có thể xem Linux chuyển tín hiệu này sang mã bàn phím gì với lệnh dưới đây:


    sudo showkey --keycodes    

Đợi 10 giây để thoát.

Cái mã này là thứ mà X11 nhận từ nhân Linux.

~*~


Phần Mềm

~*~

cập nhật: 2022-06-09
(lỗi chính tả)
Ký Tự

Để viết chữ hoa, ta kết hợp phím [Shift] - dịch nghĩa là ‘nâng’ - cùng với chữ mà ta muốn viết hoa. Việc này sẽ thay đổi tín hiệu ngay từ phần cứng và do đó mà phần mềm chúng ta sử dụng sẽ nhận tổ hợp mã khác và từ đó biểu hiện chữ viết hoa.

Tương tự như phím [Shift], các phím [Esc], [Pause/Break], [ScrollLock], [Window], [Ctrl], [Alt],… cũng hoạt động theo cơ chế này.

Để xem phần mềm trả về ký tự gì, chạy lại showkey với tuỳ chọn --ascii hoặc viết tắt -a.


    sudo showkey --ascii    

Thoát bằng cách bấm [Ctrl]+[d].

Với lệnh trên, bạn có thể thấy rằng ký tự bạn bấm trên bàn phím phần cứng thật sự gửi tín hiệu đến phần mềm tương đương với bảng mã ASCII. Ví dụ gõ chữ ‘T’ sẽ gửi mã là ‘84’.

Loại bàn phím của phần cứng thông dụng nhất được sản xuất dựa trên ASCII và chỉ gõ được tiếng Anh - không có tiếng Việt hay tiếng Latin….

Vậy nên giải pháp để viết được ký tự khác ngoài tiếng Anh là chuyển tín hiệu từ ASCII sang dùng bảng ký tự Unicodes. Chính xác hơn là UTF-8 - bảng ký tự bao gồm tất cả các ký tự mà con người sử dụng.

Đây thực chất là công việc chính của X11 đối với cái bàn phím.

Ứng dụng chúng ta sử dụng ở đây là showkey -a nên nó trả về chữ in được. Nhưng với khái niệm trên, hy vọng bạn nhận ra được là bạn có thể thiết lập X11 gửi ra bất cứ mã gì từ tín hiệu nhận từ phần cứng. Nghĩa là kể cả bàn phím bạn mua có định dạng ‘QWERTY’, bạn vẫn có thể đổi nó sang định dạng ‘AZERTY’ hoặc bất cứ thứ gì bạn thích khi bạn dùng Linux và X11.

Bạn có thể chạy lại trương trình showkey sau khi cài đặt bảng ký tự để kiểm chứng và tìm hiểu thêm.

Tầng Ký Tự

Nếu ta cho chữ viết thường là tầng 1 thì chữ viết hoa sẽ là tầng 2.

X11 không chỉ có 2 tầng chữ mà 5+1 tầng. Tôi không sử dụng hết đến cả tầng 4 nhưng bạn có thể tuỳ chỉnh thêm theo nhu cầu sau khi cài đặt bảng ký tự mới.


    ┌─────┐
    │ 2 4 │   2 = Shift,  4 = Level3 + Shift   
    │ 1 3 │   1 = Normal, 3 = Level3 (AltGr)
    └─────┘

Theo mặc định thì phím [Alt] bên phải dùng để nâng lên tầng ba tương tự như phím [Shift] nâng lên tầng hai. Phím này có tên gọi riêng đó là [AltGr] - viết tắt cho chữ “Alternative Group” có thể dịch là “Nhóm Khác”. Tầng bốn dùng bằng cách nhấn phím [Shift] và [AltGrp] cùng một lúc.

Tầng 5 bạn sẽ phải tự tìm hiểu.

X11 còn thêm một tầng nữa gọi là “Compose” dịch là “Sáng tác”. Số lượng ký tự có thể gõ được với chừng này tầng chữ cho phép bạn mò mẫm suốt năm ngày tháng mãi không hết.

Phím Chết

Chữ Quốc Ngữ tiếng Việt dựa theo chữ Latin. Hình dưới đây không phải là bảng chữ cái đương thời nhưng nó bao gồm đủ chữ cái cho cả tiếng Anh và tiếng Việt - hoàn hảo với vấn đề của người muốn gõ cả hai thứ tiếng trên cùng một bàn phím.

Bảng chữ cái tiếng Việt (1984-03-05)

Để gõ được những chữ Latin có dấu (không chỉ riêng tiếng Việt), người ta nghĩ ra cách giả lập phím chết trên phần mềm trong X11 tương tự như phím chết để gõ dấu trên máy đánh chữ. Tên gọi phím chết này bắt nguồn từ tờ giấy trên máy đánh chữ không di chuyển khi ký tự được gõ.

Dưới đây là tất cả ký tự|dấu|phím chết dùng trong tiếng Việt:

Phím chết khác (có trong thiết kế của tôi):

Để gõ chữ Việt dùng những phím chết trên, bạn cần phải gõ phím chết trước khi gõ chữ nền.

Ví dụ, để gõ chữ ‘ý’ nhấn [AltGrp]+[s] trước rồi mới nhấn [y].

Tương tự, để gõ chữ ‘ấ’ nhấn [AltGrp]+[s] trước rồi mới nhấn [AltGrp]+[a].

Thiết Kế

Tôi thiết kế trên định dạng (phần cứng) ‘QWERTY’ với tiêu chí là giữ nguyên ký tự ASCII (dùng cho lập trình); nhưng vẫn gõ được cả ký tự văn bản tiếng Anh, và tiếng Việt mà không cần phải thay đổi định dạng (phần mềm) trong suốt quá trình sử dụng.

Đối với tiếng Việt, theo tôi thì tầng 3 là tầng hợp lý để dùng cho việc đánh dấu nên tôi để các phím chết cho tiếng Việt ở tầng này.

Vì có thể thiết lập những phím chết này ở bất kì đâu trên bàn phím, ngoài việc đặt vị trí những phím chết ở những chỗ quen thuộc theo kiểu gõ Telex , tôi bố trí thêm những phím này bên phải bàn phím để tiện đánh dấu được bằng cả hai tay. Dưới đây là hình biểu thị ký tự cho cả 4 tầng.

~*~


Cài Đặt

~*~

cập nhật: 2022-06-09
(thêm bảo lưu)

Tôi sẽ hướng dẫn cài đặt trên Debian. Nếu bạn dùng distro khác thì hãy dùng công cụ cài đặt tương đương. Tài khoản bạn dùng để cài đặt sẽ cần phải có quyền chạy sudo.

Đầu tiên để tránh trục trặc giữa hai phương thức gõ tiếng Việt, ta nên đảm bảo là hệ thống không chạy phần mềm ibus-unikey. Tốt nhất là bạn gỡ nó ra trước:


    sudo apt purge ibus* im-config    

Sau đó khởi động lại máy cho chắc ăn.

Bảng ký tự tôi thiết kế nằm ở đây.

Bạn có thể tải tệp này về máy bằng cách chạy lệnh dưới nếu máy của bạn đã có wget. Nếu chưa có thì chạy sudo apt install wget trước.


    wget https://soft.trung.fun/ban-phim/src/vn.tr -O /nơi/bạn/lưu/vn.tr    

Lưu ý: /nơi/bạn/lưu/ là tuỳ bạn chọn chứ đừng chép y nguyên dòng lệnh trên.

Khi bạn đăng nhập vào máy tính, X11 sẽ tải bảng ký tự trong thư mục:

/usr/share/X11/xkb/symbols/

Bạn có thể chạy ls để liệt kê các tệp trong thư mục này.

Chúng ta sẽ dùng tệp tên vn trong thư mục trên nên trước tiên bạn nên bảo lưu tệp gốc để đề phòng khi gặp sự cố:


    sudo cp /usr/share/X11/xkb/symbols/vn /usr/share/X11/xkb/symbols/vn.orig    

Sau đó chép tệp mới tải về vào thay:


    sudo mv /nơi/bạn/lưu/vn.tr /usr/share/X11/xkb/symbols/vn    

Bây giờ chúng ta sẽ thiết lập để X11 tải bảng ký tự mới cài. Một lần nữa, bảo lưu trước cho chắc ăn.


    sudo cp /etc/default/keyboard /etc/default/keyboard.orig    

Tôi dùng VIM và bạn cũng nên học dùng VIM:


    sudo vim /etc/default/keyboard    

Sửa nội dung tệp này thành như sau:


    XKBLAYOUT="vn"
    BACKSPACE="guess"
    XKBMODEL="pc104"
    XKBVARIANT=""
    XKBOPTIONS="caps:swapescape"    

Với nội dung trên dòng XKBLAYOUT, X11 sẽ đọc tệp:

/usr/share/X11/xkb/symbols/vn

Tôi dùng bàn phím chuẩn 104 nút nên dòng XKBMODEL tôi để là "pc104". Nếu bạn dùng bàn phím với định dạng phần cứng khác thì sửa phần này theo bàn phím của bạn.

Dòng XKBOPTIONS tôi thiết lập đổi nút [Caps Lock] và nút [Escape] cho nhau để tiện dùng với VIM. Bạn có thể điều chỉnh dòng này theo sở thích của mình. (Xem phần nâng cấp phía dưới.)

Cuối cùng, bạn chỉ cần thoát X11 và đăng nhập lại là có thể gõ được tiếng Việt.

~*~


Nâng Cấp

~*~

cập nhật: 2022-06-13
(đường dẫn)

Khi sử dụng Linux hoặc bất kì hệ điều hành họ *NIX* nào khác, bạn luôn có thể tự nâng cao kiến thức bằng cách đọc trang hướng dẫn sử dụng ngay tại máy của mình. Đầu tiên là X11:


    man X    

Bạn nên tham khảo trang hướng dẫn thiết lập tệp /etc/default/keyboard:


    man keyboard    

Debian cũng có trang hướng dẫn thiết lập bàn phím rất dễ hiểu: https://wiki.debian.org/Keyboard

Như đã nói phía trên, bạn có rất nhiều sự lựa chọn để thiết lập bàn phím của mình. Chạy dòng lệnh này để xem tất cả những lựa chọn có thể thiết lập cho bàn phím dùng X11:


    man xkeyboard-config    

Bạn có thể tham khảo các ký tự UTF-8 khác để điều chỉnh bảng ký tự cho hợp hơn với nhu cầu sử dụng của mình trong tệp:

/usr/share/X11/locale/en_US.UTF-8/Compose

Và từ trang: https://www.unicode.org/charts/

Lưu ý: ứng dụng hoặc|và font bạn dùng sẽ quyết định ký tự UTF-8 được biểu hiện.

Thiết kế của tôi chịu ảnh hưởng từ hướng tiếp cận của Marcin Woliński người thiết kế bàn phím cho tiếng Ba-Lan.

Biểu thị và bàn phím nền|gốc ở trên tôi cũng lấy từ tệp:

/usr/share/X11/xkb/symbols/latin

Hơn hết tôi đang đứng trên vai của Nguyễn Văn Vĩnh , người được cho là đã sáng lập ra kiểu gõ Quốc Ngữ Điện Tín hay có tên gọi khác là Telex.

~*~