01 · ĐÚNG THỨ TỰ
FIFO, single-flight
Key mới vẫn được nhận khi một rewrite đang chạy, nhưng luôn nằm chờ trong queue. Không có hai key cùng sửa nội dung một lúc.
Fcitx5 · Wayland-first · Bamboo core
Areca là addon Fcitx5 viết bằng C++20. Mọi phím được xử lý tuần tự, Bamboo lo phần tiếng Việt, còn Areca chọn cách rewrite phù hợp với từng ô nhập liệu.
Dự án đang trong giai đoạn thử nghiệm
PHÍM ĐẦU VÀO
BAMBOO + ARECA
Được xây cho input trên Linux
Areca tách engine tiếng Việt, scheduler và backend rewrite thành những phần độc lập để dễ kiểm tra, cấu hình và thay thế.
01 · ĐÚNG THỨ TỰ
Key mới vẫn được nhận khi một rewrite đang chạy, nhưng luôn nằm chờ trong queue. Không có hai key cùng sửa nội dung một lúc.
02 · REWRITE THÍCH ỨNG
Tự động chọn SurroundingText, Shift+Left uinput, Native Libei/XTest hoặc Forward Backspace; hỗ trợ gán và đổi backend nhanh theo app.
03 · BAMBOO CORE
Tận dụng trực tiếp bamboo-core cho Telex, VNI, kiểm tra chính tả, quy tắc đặt dấu và nhiều bảng mã Unicode.
04 · BA CHẾ ĐỘ
Cùng bài toán, khác điểm xuất phát
Không có một cách tích hợp phù hợp tuyệt đối với mọi môi trường. Areca chọn ở lại trong hệ sinh thái Fcitx5, dùng Bamboo cho phần tiếng Việt và tự thích ứng cách rewrite theo từng ô nhập liệu.
Đây là so sánh về triết lý kỹ thuật, không phải bảng xếp hạng dự án.
State composition nằm trong bộ gõ và bám sát giao thức input method, nhờ đó luồng xử lý thường đơn giản, dễ dự đoán.
Chữ đang soạn được hiển thị dưới dạng preedit; cảm giác nhập và cách app trình bày có thể khác với việc gõ trực tiếp vào văn bản.
Cho phép đổi chiến lược tương thích khi một ứng dụng hoạt động tốt hơn với Preedit, SurroundingText hoặc cách rewrite khác.
Người dùng cần nhớ mode phù hợp cho từng app; trong cùng một app, vùng soạn thảo, terminal và ô tìm kiếm vẫn có thể hành xử khác nhau.
Dự án có toàn quyền thiết kế vòng đời, giao diện và cách chuyển key mà không bị giới hạn hoàn toàn bởi một framework có sẵn.
Đổi lại, lớp tích hợp phải tự theo kịp desktop, compositor, toolkit và nhiều giao thức input khác nhau trên Linux.
Giữ Fcitx5 làm nền tảng, tự động đánh giá từng input context, đồng thời hỗ trợ phím tắt chọn nhanh và gán cố định backend cho từng ứng dụng.
Mặc định vận hành tự động không cần can thiệp; khi cần tương thích đặc thù, người dùng có thể chuyển đổi tức thì giữa Surrounding, Shift+Left, Native và ForwardKey.
Tận dụng lifecycle, cấu hình và frontend đã có của hệ sinh thái Linux.
Quyết định backend gắn với input context, không áp một phán đoán cho toàn bộ app.
Areca nhận phần phức tạp để người dùng ít phải đổi mode khi chuyển nơi nhập.
Fallback dùng Fcitx5 forwardKey(), không cần socket, daemon hay quyền truy cập thiết bị riêng.
Một pipeline liền mạch giúp giảm thành phần phải cài đặt và quản lý. Người dùng tránh được bước cấp quyền uinput vốn có thể khác nhau giữa các distro, đặc biệt trong lần cài đầu tiên.
Luồng xử lý
Không sleep main thread. Delay dùng event loop của Fcitx5.
Không chen ngang rewrite. Pipeline chỉ pump key kế tiếp sau khi hoàn tất.
Timing có thể cấu hình. Tinh chỉnh riêng cho Wayland và từng backend.
Bắt đầu
Chạy một lệnh để tự kiểm tra hệ điều hành, tải đúng gói từ release mới nhất và cài đặt Areca. Installer sẽ hỏi trước khi cấp quyền uinput hoặc khởi động lại máy.
Mở terminal và chạy lệnh sau. Installer sẽ tự chọn gói phù hợp với hệ điều hành và phiên bản hiện tại.
curl -fsSL https://raw.githubusercontent.com/xhkzeroone/ArecaIME/main/install.sh | bash
Cần có curl và sudo. Hệ điều hành chưa có gói release sẽ được báo lỗi rõ ràng.
Cài đặt bản dựng sẵn từ AUR qua paru hoặc yay:
paru -S fcitx5-areca-bin
# hoặc
yay -S fcitx5-areca-bin
Hoặc cài đặt bản git build từ mã nguồn mới nhất:
paru -S fcitx5-areca-git
# hoặc
yay -S fcitx5-areca-git
Hoặc tải thủ công gói .pkg.tar.zst từ
release mới nhất rồi cài bằng pacman:
sudo pacman -U ./fcitx5-areca-*.pkg.tar.zst
Tải file fedora-latest.x86_64.rpm từ
release mới nhất.
Mở terminal tại thư mục chứa gói rồi chạy:
sudo dnf install ./fcitx5-areca-*.rpm
Dùng được trên Arch/CachyOS, Debian/Ubuntu và Fedora. Script tự cài dependency, build, test rồi cài addon.
git clone --recurse-submodules \
https://github.com/xhkzeroone/ArecaIME.git
cd ArecaIME
./scripts/install.sh
Cài riêng cho user: ./scripts/install.sh --user
Sau khi cài: mở fcitx5-configtool, tìm
Areca (Bamboo) và thêm vào danh sách input method.
Khắc phục lỗi uinput
Areca dùng /dev/uinput cho backend Backspace và
Shift+Select. Installer thường đã thiết lập sẵn; nếu Areca báo
không thể khởi tạo uinput, hãy chạy lần lượt các lệnh sau.
sudo modprobe uinput
echo uinput | sudo tee /etc/modules-load.d/areca-uinput.conf
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo usermod -aG input "$USER"
Sau lệnh usermod, hãy đăng xuất rồi đăng nhập lại.
Nhóm input có quyền truy cập thiết bị đầu vào ở mức
thấp; có thể bỏ qua bước này và để Areca dùng backend dự phòng.
lsmod | grep '^uinput'
ls -l /dev/uinput
test -w /dev/uinput && echo "uinput: OK" || echo "uinput: chưa có quyền ghi"
fcitx5 -rd
Xem thêm hướng dẫn và cách cài thủ công trong README trên GitHub.
Thiết lập Fcitx5
Areca cần Fcitx5, công cụ cấu hình và cách khởi động phù hợp với phiên desktop. Sau khi thay đổi biến môi trường, hãy đăng xuất rồi đăng nhập lại.
Cài Fcitx5 trước khi cài Areca
# Ubuntu / Debian
sudo apt install fcitx5 fcitx5-config-qt fcitx5-frontend-all
# Arch Linux / CachyOS
sudo pacman -S fcitx5-im
# Fedora
sudo dnf install fcitx5 fcitx5-autostart fcitx5-configtool fcitx5-gtk fcitx5-qt
Chọn Fcitx 5 tại System Settings → Keyboard → Virtual Keyboard. Tạo ~/.config/environment.d/fcitx.conf:
XMODIFIERS=@im=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
SDL_IM_MODULE=fcitx
Cấu hình tương thích này hỗ trợ cả app Wayland, XWayland và GTK/Qt cũ. Không thêm autostart thứ hai.
Tạo ~/.config/environment.d/fcitx.conf:
XMODIFIERS=@im=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
SDL_IM_MODULE=fcitx
Chép org.fcitx.Fcitx5.desktop từ /usr/share/applications vào ~/.config/autostart/.
Dùng đủ module để tương thích cả ứng dụng Wayland, XWayland, GTK, Qt và SDL.
Thêm vào ~/.config/hypr/hyprland.conf:
env = XMODIFIERS,@im=fcitx
env = GTK_IM_MODULE,fcitx
env = QT_IM_MODULE,fcitx
env = SDL_IM_MODULE,fcitx
exec-once = fcitx5 -d
Nếu UWSM/XDG autostart đã chạy Fcitx5 thì bỏ dòng exec-once.
Thêm vào ~/.config/niri/config.kdl:
environment {
XMODIFIERS "@im=fcitx"
GTK_IM_MODULE "fcitx"
QT_IM_MODULE "fcitx"
SDL_IM_MODULE "fcitx"
}
spawn-at-startup "fcitx5" "-d"
Không thêm spawn-at-startup nếu phiên systemd đã dùng XDG autostart.
Đặt trong ~/.config/environment.d/fcitx.conf:
XMODIFIERS=@im=fcitx
GTK_IM_MODULE=fcitx
QT_IM_MODULE=fcitx
SDL_IM_MODULE=fcitx
Thêm exec fcitx5 -d hoặc lệnh khởi động tương đương vào cấu hình compositor.
Thêm vào ~/.xprofile:
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export SDL_IM_MODULE=fcitx
fcitx5 -d
Bỏ dòng cuối nếu desktop đã tự khởi động Fcitx5.
Cuối cùng mở fcitx5-configtool, bỏ chọn
Only Show Current Language, tìm Areca (Bamboo) và
thêm vào danh sách. Nếu gặp lỗi, chạy fcitx5-diagnose
và kiểm tra máy chỉ có một tiến trình Fcitx5.
Lời cảm ơn
Phần chuyển đổi Telex và các quy tắc tiếng Việt đến từ
Bamboo Engine / bamboo-core
của Lương Thành Lâm. Xin cảm ơn tác giả Bamboo, Trung Ngo
(bogo.js) và Trần Kỳ Nam (GoTiengViet).
Areca và bamboo-core đều được phát hành theo giấy phép MIT.