Ngó Sen

A Vietnamese input method for fcitx5 on Linux. It needs no special permissions, and has no underlined preedit: one typing mode, Gõ Sen, for most apps.

Ngó Sen means “lotus stem”. Bugs can be reported in Issues. The rest of this site is in Vietnamese.

Install

curl -fsSL https://raw.githubusercontent.com/ngosen/ngosen/main/install.sh | bash

The script picks the prebuilt package for your distribution from the latest GitHub release, asks before it downloads the package, checks the file against SHA256SUMS and installs it with your package manager. Your configuration is kept. Its prompts are in Vietnamese: answer c to continue. The source is install.sh.

On GNOME, on KDE Plasma (Wayland), and on X11 desktops that pick the input method with im-config such as Xfce, Cinnamon and MATE, the script also makes fcitx5 the input method for your account, adds Ngó Sen to the input method list and sets Ctrl+Shift to switch Vietnamese on, unless you already chose another key. Log out and back in, then press Ctrl+Shift. On GNOME it also hides the fcitx5 launchers you do not need, and adds the Input Method Panel extension when there is no system tray, as on Fedora. These steps apply to the account that runs the script; add --no-setup to install the package only. On KDE Plasma it selects fcitx5 as KDE's virtual keyboard (System Settings, Virtual Keyboard), so Qt apps such as Kate and Dolphin can type too.

On other desktops, or after installing a package by hand:

  1. Restart fcitx5 with fcitx5 -rd. Do this again after every update. On KDE Wayland, log out and back in instead: KDE starts fcitx5 itself, and the command cannot replace it.
  2. Open “Fcitx5 Configuration” and add the input method named Ngó Sen.
  3. On KDE Wayland, select “Fcitx 5” under System Settings, Virtual Keyboard.
  4. In the Ngó Sen settings window, on the Gõ chữ page, press Gõ Sen in the Chế độ gõ row.

Since 1.2 the settings window follows the desktop's look, light or dark, KDE or GNOME. Every change is saved at once, with an Undo button (Hoàn tác).

The Ngó Sen settings window on CachyOS (GNOME) with the Breeze style, Gõ chữ page, with the Gõ Sen mode selected.

On Ubuntu 26.04 the script turns on an extension that works around a GNOME bug that drops the backspaces the input method sends. After installing a package by hand, log out and back in, then run gnome-extensions enable forward-keys@ngosen.github.io once.

To uninstall, run the script with --uninstall. On GNOME it also undoes what the script changed, so GNOME uses IBus again after you log back in. On Xfce, Cinnamon and MATE it resets the input method to the system default; fcitx5 stays installed and may still start, typing English only. On KDE it leaves fcitx5 as the virtual keyboard, since another input method may use it; choose None under System Settings, Virtual Keyboard to drop it.

curl -fsSL https://raw.githubusercontent.com/ngosen/ngosen/main/install.sh | bash -s -- --uninstall

To try unreleased changes, install the test build, built automatically whenever the next branch changes:

curl -fsSL https://raw.githubusercontent.com/ngosen/ngosen/next/install.sh | NGOSEN_RELEASE_URL=https://github.com/ngosen/ngosen/releases/download/next-build bash

Where it has been tested

Packages exist for these distributions on x86_64. A package that builds is not a package that works, so each one is labelled by how far it was tested, as listed in the notes of release 1.4.1-1.

Distribution Tested level
Fedora 44 Main setup
Arch, CachyOS Tested
Ubuntu 26.04 Tested
Ubuntu 24.04 Tested
Debian 13 Tested
Fedora 43 Builds only
openSUSE Tumbleweed Builds only
Ubuntu 22.04 Builds only
Debian 12 Builds only

“Main setup” means the maintainer types on that system every day, on KDE Plasma Wayland. “Tested” means a handful of apps were tried in a virtual machine: CachyOS with Hyprland, Ubuntu 26.04 with GNOME Wayland, Linux Mint 22 for Ubuntu 24.04 and MX 25 for Debian 13; the two Ubuntu tests used a build from source. “Builds only” means the package builds and passes the test suite at build time; nobody has typed with it there. These levels come from testing release 0.5; the spreadsheet fixes in 1.0 were tested in a CachyOS virtual machine (KDE Wayland) with LibreOffice Calc, WPS Office and Google Sheets in Firefox. Release 1.1 renames the installed files; the update from 1.0.0-1 was tested in a Linux Mint 22 virtual machine (Cinnamon, X11): the settings were copied over, the input method stayed in the list and typed the right text. Release 1.2 replaces the settings window: saving and undo through a real fcitx5 were tested in Linux Mint 22 (Cinnamon, X11), CachyOS (KDE Wayland) and Ubuntu 26.04 (GNOME Wayland) virtual machines, and 1.2 typed the right text in GNOME Text Editor on CachyOS. The fix for swapped letters in gnome-terminal was tested with a simulated D-Bus client and by typing in gnome-terminal by hand: no letters were swapped. Release 1.2.1 only drops the Applications page (Ứng dụng) from the settings window; the input method is unchanged. The four-page window was opened in a CachyOS virtual machine (KDE Wayland), in light and dark. Release 1.2.2 fixes the label next to the cursor and lost tone marks in the Edge address bar; the Edge bug was reproduced in a test rebuilt from a key log on Fedora 44 (KDE Wayland), then typed again by hand in Edge after the fix. Release 1.3.0 adds the option for Backspace to remove only the tone mark, typed by hand on Fedora 44 (KDE Wayland) with a build from the next branch. The new tray icons were checked in Linux Mint 22.3 (Cinnamon) and MX Linux 25.3 (Xfce) virtual machines. The Debian 13 package was installed in MX Linux 25.3, where Telex vieejt typed việt in a GTK terminal, and updating there from 1.0.0-1 and running fcitx5 -rd kept Ngó Sen in the input method list. Release 1.4.0 mostly changes the one-line installer. It was run in Ubuntu 26.04 (GNOME Wayland), CachyOS (GNOME 51), Linux Mint (Cinnamon, X11) and MX Linux 25 (Xfce, X11) virtual machines with a build from the next branch: after logging back in, Ctrl+Shift and then Telex tieengs vieetj typed tiếng việt in a GTK3 text field, 3 times out of 3 on each machine. Uninstalling was tested in Ubuntu 26.04 (IBus came back) and MX Linux 25. Release 1.4.1 only changes the installer; the input method is the same as in 1.4.0. The KDE setup was run in a CachyOS virtual machine (Plasma 6.7 Wayland) on an account with no input method configured: after logging back in, Ctrl+Shift and then Telex tieengs vieetj typed tiếng việt 3 times out of 3 in a Qt6 text field and 3 times out of 3 in a GTK3 one; before the fix the Qt6 field got raw keystrokes. With the 1.4.0 package, Chrome 155, VS Code, Discord, Firefox and GNOME Text Editor (Flatpak) typed correctly in an Ubuntu 26.04 (GNOME Wayland) virtual machine; Chrome forced through XWayland was wrong 5 times out of 30.

NixOS uses the repository's flake instead of the one-line installer; the snippet is in the README. CI builds it, runs the tests and loads the addon into fcitx5 on Xvfb, but nobody has tried it on a real NixOS machine yet, nor on Wayland, GNOME or aarch64.

Known issues

Not fixed: SDL games not running on X11 ignore forwarded keys and get text without tone marks, and the snap build of VS Code types raw Telex; the workaround routes it through XIM, where about one sentence in ten gets a wrong tone mark. Telex is the method used and tested daily; VNI and the other methods work but have not been tested closely.

Ngó Sen targets fcitx5 only. The IBus build and a build running directly on Sway and Hyprland without fcitx5 were dropped; Sway and Hyprland still work through fcitx5. The IBus code stays on the feat/ibus-engine branch. Source, releases and the changelog are at github.com/ngosen/ngosen.