Three pieces:

  • librime — the engine. Written in C++, library form. On Debian 13 / Ubuntu 26.04 it ships as librime1t64 plus the librime-data metapackage (which drops a stock default.yaml with schema_list: [luna_pinyin, cangjie5] at /usr/share/rime-data/default.yaml). That’s all you need for the engine itself.
  • fcitx5-rime — the binding into the fcitx5 IM framework. Pulls librime in as a dependency. On Ubuntu 26.04 it’s fcitx5-rime 5.1.13-1; on Debian 13 it’s the same package under a different version number. Source: github.com/fcitx/fcitx5-rime.
  • Optional: librime-plugin-lua — only if you want Lua filters (custom phrases, inline-English completion, the fancy features in rime-ice / rime-wanxiang). On Debian 13 this package exists as librime-plugin-lua; some older Ubuntu repos still call it librime-lua.

For Wubi specifically, you also need rime-wubi itself, which ships the schemas. The official repo (github.com/rime/rime-wubi) provides three schemas: pure wubi86.schema.yaml, traditional-output wubi_trad.schema.yaml, and the mixed-input wubi_pinyin.schema.yaml (五笔·拼音). None are in apt — they come from the Plum installer.

Step 1 — install (Debian 13 / Ubuntu 26.04)

Bash
sudo apt update
sudo apt install fcitx5 fcitx5-rime fcitx5-frontend-gtk3 fcitx5-frontend-gtk4 
                 fcitx5-frontend-qt5 fcitx5-frontend-qt6 fcitx5-configtool
# Optional: for Lua-based community schemas
sudo apt install librime-plugin-lua

Set the environment variables fcitx5 needs under GNOME Wayland or KDE Plasma 6 (otherwise only X11 apps pick it up):

Bash
sudo tee /etc/environment.d/fcitx5.conf > /dev/null << 'EOF'
GTK_IM_MODULE=fcitx5
QT_IM_MODULE=fcitx5
XMODIFIERS=@im=fcitx5
INPUT_METHOD=fcitx5
EOF

Autostart fcitx5 on login (GNOME Wayland won’t start it for you):

Bash
mkdir -p ~/.config/autostart
cp /usr/share/applications/org.fcitx.Fcitx5.desktop ~/.config/autostart/
# On GNOME, also enable the AppIndicator extension
gnome-extensions enable ubuntu-appindicators@ubuntu.com

Log out and back in. Run fcitx5-configtool, click +, search Rime, add it. Move it to the top of the active list. Save.

Now is the moment you run RIME is not configured — that’s expected. The framework is loaded, the engine is empty. Time to fill it.

Step 2 — install Plum

Plum is the one-liner installer for the schema library. It’s not in apt (and the project says it never will be); you curl-and-bash it.

Bash
sudo apt install git  # only if you don't have git
curl -fsSL https://raw.githubusercontent.com/rime/plum/master/rime-install | bash

Plum drops a plum/ directory in your home folder and a few helpers in ~/.local/bin. Verify:

Bash
which rime-install
rime-install --list-presets  # see the available preset tiers

Tier naming convention: :preset is the default curated set, :extra adds less-maintained schemas, :all is everything. For Wubi you want :preset plus the wubi schema itself.

Step 3 — install the Wubi schema and its dependency

The mixed-input wubi_pinyin.schema.yaml depends on pinyin_simp (rime-pinyin-simp on GitHub). Plum pulls dependencies automatically, but it doesn’t enable anything — that comes in step 5.

Bash
rime_frontend=fcitx5-rime bash rime-install wubi pinyin-simp
# Adds: wubi86.schema.yaml, wubi_trad.schema.yaml, wubi_pinyin.schema.yaml,
#       wubi86.dict.yaml (~2 MB), pinyin_simp.schema.yaml, pinyin_simp.dict.yaml
# Files land in ~/.local/share/fcitx5/rime/

If you also want a full-pinyin backup (smart Chinese with freq ranking, English-aware candidates):

Bash
bash rime-install luna-pinyin
# Adds: luna_pinyin.schema.yaml, luna_pinyin_simp.schema.yaml, luna_pinyin_fluency.schema.yaml

Optional extras worth knowing about (these need librime-plugin-lua):

Bash
bash rime-install iDvel/rime-ice            # 霧凇拼音: curated long-maintained vocab + 9 schemas
bash rime-install gaboolic/rime-frost:others/recipes/full  # 白霜拼音: 745M-char corpus rebuild, 2026 SOTA
bash rime-install amzxyz/rime-wanxiang      # 萬象拼音: 200M-scale .gram language model

Frost and Wanxiang both rebuild frequencies from scratch in 2025 and have the best open-source RIME dictionaries right now. Pick one if you’re starting fresh; pick ice if you want the most-configurable community setup; pick Luna if you want to stay close to defaults.

Step 4 — the mixing mechanism (what wubi_pinyin actually does)

Open the schema file plum just dropped:

Bash
less ~/.local/share/fcitx5/rime/wubi_pinyin.schema.yaml

The relevant block is:

Yaml
abc_segmentor:
  extra_tags:
    - reverse_lookup

reverse_lookup:
  dictionary: pinyin_simp
  prefix: "`"
  suffix: "'"
  tips: 〔拼音〕

recognizer:
  import_preset: default
  patterns:
    reverse_lookup: "`[a-z]*'?$"

Read this together:

  • The main translator (table_translator) uses wubi86 as the dictionary — every keystroke you type without any prefix is matched against the Wubi86 root table.
  • A second translator (reverse_lookup_translator) is registered with tag reverse_lookup. When the recognizer fires (pattern: "^[a-z]*’?$”— anything starting with a backtick and ending in an apostrophe, with only ASCII letters in between), the engine hands the buffer to thepinyin_simp` dictionary.
  • Both translators’ hits join the same candidate list. There’s no mode switch.
  • The disable_user_dict_for_patterns: "^z.*$" line means RIME won’t pollute your personal dictionary when you’re typing z-prefixed stuff (which in pure wubi86 is the single-character reverse-lookup helper — irrelevant when you’re already in wubi_pinyin).

In practice:

You type Engine does
wg Looks up wg in wubi86. Candidates: 我, 什, 拿, etc.
wg `ni' | Looks up wg in wubi86 AND `ni' in pinyin_simp. Candidates from both.
wgn (a non-existent code) No Wubi match. Falls through to pinyin_simp on the next recognizer fire (no backtick needed, because the buffer is invalid for Wubi; this is a happy accident of the speller).
`hainihaoniu | Single token, no apostrophe suffix. Recognizer doesn’t fire. Looks up whole string in wubi86, gets nothing. Hit Backspace and add the '.

The mistake almost everyone makes: thinking wubi_pinyin uses the z prefix the way wubi86 does. It doesn’t. z is irrelevant in wubi_pinyin — that’s an old wubi86 idiom for one-shot character reverse-lookup. The whole point of wubi_pinyin is that you don’t need that mode any more.

For Wubi86 混输 specifically (you want raw wubi_pinyin as your primary engine), this is it. If you want Wubi98 + pinyin mixed, fcitx5’s wbpy schema is the only Debian/Ubuntu option; see the previous article for that comparison.

Step 5 — enable what you installed

Create the user overlay. RIME merges everything by reading default.custom.yaml over the system default.yaml. Without it, your installed schemas are invisible to the engine.

Bash
mkdir -p ~/.local/share/fcitx5/rime

Write ~/.local/share/fcitx5/rime/default.custom.yaml. Put schemas in priority order — the first one is what RIME starts in:

Yaml
patch:
  schema_list:
    - schema: wubi_pinyin
    - schema: wubi86
    - schema: luna_pinyin
    - schema: double_pinyin_flypy
  menu/page_size: 9
  switcher/hotkeys:
    - Control+grave
    - Control+Shift+grave

The menu/page_size: 9 raises the visible-candidate count from the default 5 to 9. Control+grave is the standard schema-switcher hotkey.

Deploy. RIME only reads its YAML when prompted to rebuild:

Bash
# Either: GUI tray → Rime → 部署 (Deploy)
# Or CLI:
rime_deployer --build

If your new schema still doesn’t appear in Control+grave, double-check the file actually landed:

Bash
ls ~/.local/share/fcitx5/rime/
# Should show: default.custom.yaml, wubi_pinyin.schema.yaml, wubi86.dict.yaml, ...

Now type something. The candidate bar should populate with Wubi codes; typing `ni plus ' should pull up pinyin candidates inline.

Step 6 — the eleven customizations worth knowing

These go into default.custom.yaml (engine-wide) or <schema>.custom.yaml (per-schema overlay). Per-schema overrides take precedence over engine-wide when both define a key.

Add a custom phrase

RIME learns phrases by promoting candidates you pick. For shortcuts you type often, write to <schema>.userdb.txt:

Text
# ~/.local/share/fcitx5/rime/wubi_pinyin.userdb.txt
# Format: syllable<TAB>phrase<TAB>weight
nianhai 你好  100
ssch    随时随地    100

Then rime_deployer --build. The phrases appear at the top of the candidate list when you type the trigger.

Use Shift_L to commit code (instead of plain Shift toggle)

The default fcitx5-rime binds Shift_L to “toggle ascii mode” — which means pressing Shift mid-composition kills your buffer. Patch it:

Yaml
patch:
  ascii_composer:
    switch_key:
      Shift_L: commit_code
      Shift_R: commit_code
      Eisu_toggle: clear

Now Shift commits the buffer AND toggles ascii mode. You don’t lose what you typed.

More visible candidates

Yaml
patch:
  menu/page_size: 9        # default is 5; cap is 10
  menu/alternative_select_labels: ["1","2","3","4","5","6","7","8","9"]

Turn on inline English completion (rime-ice / rime-frost style)

This does not work for wubi_pinyin itself — Lua fusion with wubi is non-trivial. What works: install a community schema that has it baked in (rime-icemelt_eng, rime-frostmelt_eng); then add to your schema_list:

Yaml
  schema_list:
    - schema: rime_ice  # or frost_simp / wanxiang / etc.
    - schema: wubi_pinyin

rime_ice‘s melt_eng translator triggers off any prefix that contains the [a-z]+ shape inline with your pinyin — but wubi_pinyin‘s shape isn’t pinyin, so the trigger doesn’t fire on Wubi strokes. Treat the English fusion as a perk of the pinyin schemas only.

Quick schema switching during typing

Control+grave opens the schema/option menu. To jump directly to a specific schema, add key_binder to your default.custom.yaml:

Yaml
patch:
  key_binder:
    bindings:
      - {accept: "Control+1", select: ".next", when: always}
      - {accept: "Control+2", toggle: ascii_mode, when: always}

The select: ".next" cycles forward (wraps around); .prev cycles backward. You can bind any key chord to .next/.prev.

Toggle simplified ↔ traditional mid-stream

wubi_pinyin doesn’t expose per-schema simplification switch the way luna_pinyin_simp does. To get the same behavior, install rime-prelude‘s opencc config and override:

Yaml
patch:
  __include: opencc:/  # brings in the OpenCC simplifier
  switches:
    - name: simplification
      reset: 0

Then F4 (or Control+grave) shows a 汉字 / 漢字 toggle in the options menu.

Disable candidate paging on Space

Default behavior: Space commits candidate 1, Tab moves to next candidate. If you press Space once and want it to commit instead of starting over from the first page:

Yaml
patch:
  key_binder:
    bindings:
      - {accept: "space", send: Escape, when: composing}
      - {accept: "Return", send: Return, when: composing}

That cancels the composition when you press Space, then re-types as ASCII on the next app key event.

Set a custom trigger key for ASCII mode

Yaml
patch:
  ascii_composer:
    switch_key:
      Caps_Lock: commit_code
      Shift_L:   commit_code
      Shift_R:   commit_code

Caps_Lock toggles without committing — useful for long bursts of English in the middle of Chinese composition.

Sync your user dictionary across machines

RIME ships a built-in syncer. The config goes in installation.yaml (auto-generated; you don’t write it directly — rime_deployer --build creates it). To opt in:

Yaml
patch:
  sync_dir: /dropbox/rime-sync  # or any sync target
  sync_user_dir: same
  # Supported syncers: dropbox, nutstore, others
  # (Check `librime/build` for compiled-in syncers via ldd / librime.so)

You need the binary to be linked against the syncer plugin. Default fcitx5-rime builds typically have all the sync backends.

Manual install of a third-party schema (without Plum)

Sometimes Plum chokes on a recipe. Falling back to a manual install:

Bash
git clone --depth=1 https://github.com/iDvel/rime-ice.git
cp -r rime-ice/cn/full/* ~/.local/share/fcitx5/rime/
# Add only the .yaml files you want to schema_list
rime_deployer --build

cp -r is safe — RIME ignores duplicates, picks the last one written. Just don’t .git into the rime directory; the engine doesn’t care but you do (~/ shouldn’t get that dirty).

Reset everything

If a config goes sideways:

Bash
mv ~/.local/share/fcitx5/rime ~/.local/share/fcitx5/rime.bak.$(date +%s)
rime_deployer --build
# The engine reloads with system defaults only.

Then re-do step 5.

Step 7 — diagnose the common failure modes

Each of these has bitten someone you know.

“RIME is not configured” / no candidates

Cause: engine installed, but default.custom.yaml either doesn’t exist or has no schema_list. Fix: create the file (step 5) and deploy.

New schema doesn’t show in Control+grave

Cause: plum installed the .yaml files but you forgot rime_deployer --build (or the tray-menu equivalent). The files exist; the engine hasn’t read them. Fix: deploy.

Custom phrase disappears after restart

Cause: edited <schema>.userdb.txt, the file format was wrong, or the deploy didn’t happen. Fix: verify tab-separated syllable<TAB>phrase<TAB>weight, re-Deploy. If the file is empty after restart, check ~/.local/share/fcitx5/rime/build/ for cached binaries — a stale *.bin there overrides your dict.

Wubi+Pinyin mix “doesn’t work”

Cause: most commonly, you typed `ni without the trailing apostrophe. The recognizer pattern is `[a-z]*'?$ — the ' is required. Without it, the engine waits for more input and the spelling buffer keeps growing. Fix: type the apostrophe. Alternatively, install pinyin-simp cleanly: bash rime-install pinyin-simp and check ~/.local/share/fcitx5/rime/pinyin_simp.dict.yaml exists.

fcitx5 eats Shift and toggles ASCII layout

Cause: ascii_composer default. Fix: see “Use Shift_L to commit code” above. Restart fcitx5 after editing (fcitx5-ctl restart).

Wayland: nothing types, but the tray is alive

Cause: env vars not picked up by the app. Fix: systemctl --user restart fcitx5 from inside the affected Wayland session, and double-check /etc/environment.d/fcitx5.conf exists with the four lines above.

After a system update in early 2026: fcitx5-rime broke on Arch / CachyOS

CachyOS shipped an librime ABI bump that mismatched fcitx5-rime; the workaround (April 2026) was pinning librime to the LTS version and ensuring default.yaml‘s schema_list was explicit. On Debian/Ubuntu this hasn’t reproduced, but if you see “undefined symbol” errors from librime after an update, run apt policy librime1t64 and pin.

Where to go next

If you got this far and your default.custom.yaml actually has the schemas you want, you have a complete working stack. Two follow-ups worth their own articles:

  1. rime-ice / rime-frost / rime-wanxiang head-to-head — each one bundles a curated default.custom.yaml you can fork; comparing them in their default state would save a week of experimentation.
  2. Syncing user dictionaries across Linux + macOS + Windows — librime’s sync_dir with Dropbox is straightforward on paper but the directory naming (userdb.txt vs the schema’s own filename) trips people up.

Tell me in the comments which one you’d rather see next.


Sources verified July 2026: github.com/rime/rime-wubi/blob/master/wubi_pinyin.schema.yaml (master branch — prefix: `,suffix: ”’, dependencies[pinyin_simp]),packages.ubuntu.com/resolute/fcitx5-rime(5.1.13-1),github.com/rime/plumREADME,github.com/fcitx/fcitx5-rimeREADME,github.com/rime/librime` releases (1.16.1 in stable, 1.17.0 upstream).

Last modified: 2026年7月14日

Author

Comments

Write a Reply or Comment

Your email address will not be published.