linux安装中文字体必须将字体文件放入系统认可路径(如~/.local/share/fonts/或/usr/share/fonts/truetype/custom/),执行fc-cache -fv递归扫描并验证fc-list :lang=zh输出,否则即使复制字体到downloads等目录也无效。

fc-cache 不是“运行一次就完事”的命令,字体放错位置、权限不对、缓存没刷进目标目录,都会导致 fc-list :lang=zh 查不到字——哪怕你已经把 MSYH.TTF 拖进了 ~/Downloads。
字体文件必须放在系统认的路径里,不是随便一丢就行
Linux 只扫描几个固定路径,其他地方它压根不看。常见有效路径有:- 用户级(推荐,不用
sudo):~/.local/share/fonts/(注意不是过时的~/.fonts/,后者在新版本 fontconfig 中已不被默认扫描) - 系统级(所有用户可用):
/usr/share/fonts/truetype/custom/或/usr/share/fonts/opentype/(别往/usr/share/fonts/truetype/根下硬塞,容易和包管理器冲突)
mkdir -p ~/.local/share/fonts/zhcp ~/Downloads/SimHei.ttf ~/.local/share/fonts/zh/
别用桌面或 ~/Downloads 目录装字体,fc-cache 默认不会扫那里。
fc-cache -fv 要看到你放字体的路径才真生效
fc-cache 是个“静默跳过狂魔”:文件损坏、权限为 000、目录空、甚至文件名含中文(某些旧版 fontconfig),它都不报错,只默默跳过。
执行后必须盯住终端输出,确认有类似这样的行:
/home/yourname/.local/share/fonts/zh: caching, new cache contents: 1 fonts, 0 dirs
如果没出现你放字体的路径,说明缓存根本没扫到那里。常见原因:
- 目录权限不对:
ls -ld ~/.local/share/fonts/zh应显示至少drwxr-xr-x - 字体文件不可读:
ls -l ~/.local/share/fonts/zh/SimHei.ttf至少是-rw-r--r--(644) - 路径拼错了,比如写成
~/.local/share/font/少了个s
验证是否真装上了,别信“安装完成”提示
GUI 应用乱码、终端方块、浏览器问号,90% 是因为这步没做实。先查缓存里有没有中文字体:
fc-list :lang=zh | grep -i "simhei|wqy|noto"
再确认该路径确实在 fontconfig 扫描范围内:
fc-config -v | grep cachedir
输出里必须包含你放字体的完整路径,比如 /home/yourname/.local/share/fonts
如果 fc-list :lang=zh 无输出,但 fc-list | grep SimHei 却有,说明字体注册了但没标中文语言标签——这种字体在 Firefox、LibreOffice 里大概率 fallback 失败,得换带 lang=zh 的版本(如 fonts-wqy-zenhei 或 google-noto-sans-cjk-ttc-fonts)。
包管理器安装最省心,但得选对包名和源
手动复制字体适合个别需求,但日常用建议走包管理器——自动处理路径、权限、缓存,还随系统更新。Ubuntu/Debian(22.04+):
sudo apt update && sudo apt install fonts-wqy-zenhei fonts-noto-cjk
注意:ttf-wqy-zenhei已废弃;若apt search wqy搜不到,检查/etc/apt/sources.list是否启用了universe源。RHEL/CentOS/Fedora(8+):
sudo dnf install google-noto-sans-cjk-ttc-fonts
RHEL 9+ 改名叫google-noto-sans-cjk-fonts,别按老名字搜。
这些包安装后会自动触发 fc-cache,但你仍要跑一遍 fc-list :lang=zh 确认——有些发行版的 postinst 脚本在非交互式安装时会跳过刷新。
真正容易被忽略的是:字体装对了、缓存刷成功了、fc-list 也看到了,但终端或 GTK 应用还是方块。这时候问题往往不在字体本身,而在应用的字体 fallback 配置或 locale 设置,得另开一层查。











