Skip to content

CJK not rendered: variable-font Noto CJK collections not enumerated by Trivalent (static fonts work) #817

Description

@reimo22

Trivalent version: 150.0.7871.128 (Official Build)
secureblue image: kinoite-nvidia-open-hardened:latest, version 44.20260719.0

Troubleshooted and written up with Claude; commands run and output verified by me.

Summary

Trivalent does not render CJK text on pages that rely on system font fallback. Latin renders normally and embedded webfonts render, but any glyph needing fallback to the system's Noto CJK fonts shows as tofu (.notdef boxes). Every other application on the system renders CJK correctly and fc-match resolves the CJK fonts fine, so this is specific to Trivalent's font handling.

The system's CJK fonts are Fedora's variable-font builds (google-noto-sans-cjk-vf-fonts, NotoSansCJK-VF.ttc). Trivalent does not appear to enumerate these variable-font .ttc collections, in either the font picker or the character-fallback path. Installing a static (non-variable) Noto CJK font resolves the problem completely and immediately.

What the user sees

CJK renders as empty boxes while Latin renders normally (DuckDuckGo search for a CJK term):

Image

Evidence

The fallback resolves to a Latin font with no CJK coverage. DevTools > Computed > Rendered Fonts on tofu text shows Liberation Sans, 30 glyphs, i.e. no CJK fallback occurs:

Image

The system side is healthy, this is not a missing-font problem. fc-match sans-serif:lang=zh-tw returns Noto Sans CJK TC, and fc-list shows the VF CJK families installed:

Image

chrome://settings/fonts lists static families (Liberation, Cantarell, static Noto Sans/Serif) but not the variable Noto CJK collections, showing the enumeration gap directly:

Image

Steps to reproduce

  1. On a stock secureblue image (variable-font Noto CJK installed by default), open any page with CJK content that relies on generic sans-serif fallback, e.g. a DuckDuckGo search for a CJK term, or https://www.104.com.tw.
  2. CJK characters render as empty boxes; Latin renders normally.
  3. Reproduces in a clean profile (trivalent --user-data-dir=/tmp/triv-cjk-test), so it is not profile-related.

Workaround (if you just want CJK working now)

Download a static (non-variable) Noto CJK family, e.g. Noto Sans TC/SC/JP/KR from Google Fonts, and install only the static/*.ttf files (not the *-VariableFont*.ttf):

# adjust the source path to wherever you unzipped the download
mkdir -p ~/.local/share/fonts/NotoSansCJK-static
cp ~/Downloads/Noto_Sans_TC/static/*.ttf ~/.local/share/fonts/NotoSansCJK-static/
fc-cache -f
restorecon -Rv ~/.local/share/fonts
pkill -i trivalent   # fully quit, then relaunch

Repeat with Noto Sans SC / JP / KR if you also need Simplified Chinese, Japanese, or Korean, since the single-language static families don't cover the full CJK range the unified collection does.

Likely cause

The static fonts install fixes both the picker and fallback, which points to Trivalent's build not handling variable-font .ttc CJK collections, while fontconfig handles them fine. Related upstream context: NixOS nixpkgs #156131 (VF Noto CJK tofu in some apps) and Chromium issue 41495702 (CJK fallback on Fedora).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Fields

    Priority

    None yet

    Effort

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions