解决debian13中文显示异常

现象

在 Debian 13 系统中,部分中文文本显示为方块、乱码或出现笔画裁剪、重叠,而另一些中文则正常显示。此问题在 GNOME 桌面的 GTK4 应用(如文本编辑器、Nautilus)中尤为突出。

原因

  1. 未安装中文字体,或安装的字体字符集覆盖不全。
  2. 字体回退(Font Fallback)机制失效,当西文字体缺失汉字字形时,未能自动调用已安装的中文字体。
  3. GTK4 在 Wayland 下的渲染缺陷,导致中文字形被错误裁剪或缩放。
  4. 系统区域设置(Locale)未使用 UTF-8 编码,或中文字体在非中文语言环境下回退链配置不完整。

解决方式

  • 中文系统环境
    将系统语言设为中文(zh_CN.UTF-8),使系统优先使用中文字体渲染,同时安装必要的中文字体并修正回退规则。

  • 英文系统环境
    保持系统语言为英文(en_US.UTF-8),强制配置全局中文字体回退,并针对 GTK4 应用添加环境变量修复渲染,确保中文在任何语言环境下正常显示。

操作步骤

  1. 安装中文字体(两种环境通用)

    sudo apt update
    sudo apt install fonts-wqy-zenhei fonts-wqy-microhei fonts-noto-cjk fonts-noto-cjk-extra
    fc-cache -fv
    
  2. 配置字体回退(两种环境通用)
    创建或编辑 /etc/fonts/local.conf,加入以下内容,将中文字体预先绑定到 sans-serif、serif、monospace 三个通用族:

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
    <fontconfig>
        <match target="pattern">
            <test name="family" qual="any"><string>sans-serif</string></test>
            <edit name="family" mode="prepend" binding="strong">
                <string>Noto Sans CJK SC</string>
                <string>WenQuanYi Micro Hei</string>
            </edit>
        </match>
        <match target="pattern">
            <test name="family" qual="any"><string>serif</string></test>
            <edit name="family" mode="prepend" binding="strong">
                <string>Noto Serif CJK SC</string>
            </edit>
        </match>
        <match target="pattern">
            <test name="family" qual="any"><string>monospace</string></test>
            <edit name="family" mode="prepend" binding="strong">
                <string>Noto Sans Mono CJK SC</string>
                <string>WenQuanYi Zen Hei Mono</string>
            </edit>
        </match>
    </fontconfig>
    

    保存后执行 sudo fc-cache -fv

  3. 设定语言环境

    • 若需中文环境:

      sudo dpkg-reconfigure locales
      

      在界面中勾选 zh_CN.UTF-8 并设为默认,或手动执行:

      sudo locale-gen zh_CN.UTF-8
      sudo update-locale LANG=zh_CN.UTF-8
      
    • 若需英文环境:
      确认 LANG=en_US.UTF-8 已设置(通过 locale 命令查看),若未生成则执行:

      sudo dpkg-reconfigure locales
      

      勾选 en_US.UTF-8 并设为默认。

  4. 修复 GTK4 中文渲染(英文环境强烈推荐,中文环境也可应用)
    创建文件 ~/.config/environment.d/gtk4-fix.conf,写入:

    GTK_USE_PORTAL=0
    

    注销并重新登录生效。

  5. 验证

    • 运行 fc-list :lang=zh 确认中文字体已安装。
    • 运行 fc-match sans-serif:lang=zh 检查回退结果。
    • 打开图形文本编辑器输入中文,确认无方块、无残缺。