Gõ tiếng Việt trên Linux

20250504 #tech

Bài viết này mình sẽ nói về IBus, cách gõ tiếng Việt, cụ thể là telex, trên Linux.

IBus

Đầu tiên chúng ta cần cài đặt ibusibus-bamboo.

Cài đặt

Void Linux có sẵn hai gói này trong thư viện của họ, đây là một trong những lí do mình dùng Void! Mình sẽ dùng lệnh này để cài đặt chúng:

sudo xbps-install -S ibus ibus-bamboo

Khởi chạy

Để dùng IBus, bạn phải khởi chạy nó khi khởi động X11 hoặc Wayland với vai trò một trình chạy ngầm (daemon).

Trong sxrc của trình khởi chạy X11 mang tên sx, mình có một dòng sau:

ibus-daemon -xsRrd &

Lưu ý

Hoặc trong file .xinitrc nếu bạn dùng startx hay xinit

Dặn các phần mềm dùng IBus

Chúng ta cần phải thêm những dòng này vào .bash_profile (hoặc /etc/environment tùy ý bạn, nhớ bỏ chữ export đi nếu bạn bỏ vào /etc/environment):

export INPUT_METHOD=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS=@im=ibus

Sau khi đăng xuất, đăng nhập lại (khởi động lại máy nếu bạn thêm vào /etc/environment) mọi phần mềm của bạn sẽ nhận diện và dùng IBus làm phần mềm nhập liệu của chúng.


Chuyển đổi qua lại

Gói ibus-bamboo sẽ cung cấp nhiều lựa chọn nhập liệu. Chúng ta chỉ cần hai bộ chính là Bamboo (gõ tiếng Việt) và BambooUs (gõ tiếng Anh).

Một trong những lệnh cơ bản của IBus mà mình hay dùng nhất là:

Để thuận tiện cho việc chuyển đổi qua lại hai chế độ, mình đã viết một script gọi là inp.

Lưu ý

Đây không phải là bản đầy đủ của script mình dùng, mình đã xóa bỏ bớt một số tính năng có thể mọi người không dùng, bạn có thể tìm thấy bản đầy đủ tại repo dotfiles của mình.

#!/bin/bash
case $1 in
  current) [ $(ibus engine) = Bamboo ] && echo vi || echo en;;
  vi) ibus engine Bamboo;;
  en) ibus engine BambooUs;;
  *) ibus engine "$( [ "$(ibus engine)" = "Bamboo" ] && echo "BambooUs" || echo "Bamboo" )";;
esac

Script này cho ta bốn lựa chọn như sau:

Có thể bạn sẽ không thấy script này là cần thiết, nhưng vì mình còn dùng nó trong thanh trạng thái của dwm và nhiều phần mềm khác, kể cả vim trong bài viết tiếp theo. Để hiểu rõ hơn, đọc thử qua bản đầy đủ của nó tại đây nhé!


Khay biểu tượng

Một vài tùy chọn của IBus chỉ có thể tiếp cận khi ta click chuột vào biểu tượng trên khay biểu tượng (tray icon) chỗ góc màn hình của các desktop environment. Người dùng window manager như mình thường không có khu vực này.

Để có thể tiếp cận tray icon của IBus, chúng ta cần trayer, một khay biểu tượng cơ động. trayer có thể được cài đặt bằng lệnh sau trên Void Linux:

sudo xbps-install -S trayer-srg

Sau khi cài đặt, mỗi lần muốn thay đổi gì trong IBus hãy chạy lệnh trayer, biểu tượng của IBus sẽ hiện ra cho bạn bấm vào. Tinh chỉnh IBus xong thì cứ đóng trayer lại như mọi cửa sổ khác thôi!

Nhớ đảm bảo là tùy chọn Show icon on system tray đã được tick vào trong menu cài đặt ibus-setup nhé!


Phím tắt

Mình dùng sxhkd làm trình quản lý phím tắt. Do đó, để bật/tắt chế độ gõ tiếng Việt, mình thêm dòng này vào sxhkdrc:

alt + space
  inp

Cài đặt này cho phép mình dùng tổ hợp phím Alt+space để bật tắt gõ tiếng Việt bằng script inp mình nói đến ở trên.

Ghi chú

Trong giao diện cài đặt của IBus (lệnh ibus-setup) cũng có phần cài đặt phím tắt chuyển đổi, nhưng mình không dùng cài đặt đó vì vài lí do:

  1. Quản lý phím tắt bằng sxhkd chuyên dụng và dễ dàng hơn trong việc cài đặt sau này. Đảm bảo được là mọi phím tắt đều nằm một chỗ, có mâu thuẫn nhau là thấy ngay!
  2. Mình muốn dùng lệnh inp do mình viết để quản lý được chính xác tổ hợp phím đó sẽ làm gì.
  3. Mình không cần cài đặt phần "Input Method" trong giao diện IBus.

Gõ telex trong terminal

Đây là lí do mình chọn IBus thay vì Fcitx5. Trải nghiệm cá nhân mình thấy Fcitx5 trong terminal khá là bất ổn, khi được khi không và không trực quan như IBus.

Để gõ trong terminal được mượt mà, hãy click chuột trái vào biểu tượng IBus trên khay biểu tượng khi chế độ gõ tiếng Việt đang được bật (biểu tượng hình chữ V trắng trên nền đỏ).

Chế độ gõ mặc định -> ForwardKeyEvent I (không gạch chân)

Theo trải nghiệm của mình thì chế độ gõ này là ổn định nhất.


Kiểu gõ VNI

Mặc định IBus Bamboo sẽ chọn kiểu gõ Telex. Nếu bạn quen với kiểu gõ VNI hơn thì hãy click chuột trái vào biểu tượng IBus.

Kiểu gõ -> VNI


Kết lại

Đó là một số chia sẻ của mình về gõ tiếng Việt trên Linux và trong môi trường window manager không có một trình cài đặt nào như dwm.

Trải nghiệm gõ tiếng Việt trên Gnome hay KDE sẽ dễ dàng hơn một tí nhưng chắc rằng sẽ không đơn giản và linh hoạt (modular) như cách của mình. Mình có thể "tháo lắp" lệnh inp trên ở bất cứ đâu chẳng hạn như vim mode trên ứng dụng Obsidian, gán phím tắt đơn giản hơn,...

Bài viết tiếp theo mình sẽ chia sẻ cách mình linh hoạt chuyển qua lại giữa hai kiểu gõ trong Vim. Lúc đó chúng ta sẽ càng thấy sự linh hoạt là cần thiết tới đâu!


Bài viết liên quan