fc-list无输出或字体极少,主因是字体缓存未初始化或fontconfig未安装;需先装fontconfig,再运行fc-cache -fv强制重建缓存,并检查字体权限与locale编码设置。

fc-list 命令没输出或只显示极少字体怎么办
多数情况下 fc-list 无输出,不是命令坏了,而是系统没完成字体缓存初始化。Ubuntu/Debian 系统装完新字体后常漏掉这步,CentOS/RHEL 则可能因 fontconfig 包未安装而直接报错 command not found。
- 先确认
fontconfig已安装:apt install fontconfig(Debian/Ubuntu)或yum install fontconfig(CentOS 7)、dnf install fontconfig(Fedora/CentOS 8+) - 安装完字体文件(如
/usr/share/fonts/truetype/myfont.ttf)后,必须运行fc-cache -fv强制重建缓存;-v能看到它扫描了哪些目录,-f强制覆盖旧缓存 - 若仍无输出,检查字体文件权限:非 root 用户执行
fc-list时,若字体在/usr/share/fonts下但属主为 root 且无读权限,也会静默跳过
如何用 fc-list 筛选特定语言或格式的字体
fc-list 默认输出所有匹配项,但真正有用的是按语言标签(lang)或字体格式(format)过滤——尤其处理中文字体、思源黑体或 Noto 系列时,不加筛选会混入大量 Latin-only 字体。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 查中文字体:
fc-list :lang=zh(注意冒号前有空格),它依赖字体内部的lang属性,不是文件名匹配 - 查 TrueType 字体:
fc-list | grep -i "true type"或更准地用fc-list :format="TrueType" - 只看字体名和风格(避免路径干扰):
fc-list : family style,输出形如WenQuanYi Micro Hei,Regular - 注意:
fc-list :lang=zh-cn和:lang=zh结果可能不同,部分字体只声明了zh,不写具体区域码
fc-list 输出乱码或字体名显示为方块
终端本身不支持 UTF-8、或 locale 配置缺失,会导致中文字段显示为 或空。这不是字体问题,是环境层解析失败。
- 先运行
locale,确认LANG和LC_CTYPE是类似zh_CN.UTF-8或en_US.UTF-8的值;若显示C或POSIX,说明未启用 UTF-8 - 临时修复:
export LANG=zh_CN.UTF-8(需对应系统已生成的 locale,可用locale -a | grep zh_CN查看) - 永久生效:编辑
/etc/default/locale(Debian/Ubuntu)或/etc/locale.conf(RHEL/Fedora),写入LANG="zh_CN.UTF-8" - 即使终端编码正确,某些老旧字体(如部分文泉驿字体)的 name table 编码异常,
fc-list仍可能输出乱码——这时只能靠fc-match实际测试渲染效果
为什么 fc-match 返回的字体和 fc-list 列出的不一致
fc-match 模拟的是应用(如 Firefox、LibreOffice)实际请求字体时的行为:它走整套 fontconfig 匹配规则(weight、slant、width、lang 优先级等),而 fc-list 只是静态枚举。同一字体族里,fc-match sans-serif 可能返回 Noto Sans CJK SC,但 fc-list 里却找不到这个确切名字——因为实际匹配到的是带完整 style 的变体,比如 Noto Sans CJK SC,Regular。
- 调试匹配逻辑:
fc-match -v 'sans-serif:lang=zh'显示完整匹配过程,包括 rejected fonts 和 score - 常见陷阱:字体文件虽存在,但
fontconfig规则(/etc/fonts/conf.d/下的 xml)禁用了某些 family 或重映射了别名,fc-list看得见,fc-match却绕过 - 验证是否真被应用识别:用
fc-match "SimSun"测试 Windows 字体,若返回DejaVu Serif,说明 SimSun 未被正确注册或 lang 标签缺失

















