news 2026/11/5 3:59:40

Ubuntu 安装 Windows 字体实录:微软雅黑/宋体/仿宋一次到位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 安装 Windows 字体实录:微软雅黑/宋体/仿宋一次到位

电脑装了win10/ubuntu 24.04双系统,Ubuntu主要用于开发,但日常还需要经常用到wps,linux自带的字体就不太够用了。所以从本机Win10 的C:\Windows\Fonts拷过来所有文件。这篇把筛选、安装、验证、踩坑一次写完,命令都能直接复制。环境是 Ubuntu 24.04 + Wayland,Debian 系通用。

一句话结论

把.ttf/.ttc装到/usr/local/share/fonts/下的一个子目录,跑一遍fc-cache -f就行。192 个.fon、几个 Windows 元数据文件直接跳过。嫌 sudo 麻烦可以放~/.local/share/fonts/,代价是snap 应用看不到。(因为我自己安装过字体,fonts文件夹比win10原版的文件数应该多一些)

项目数值
源文件555 个 / 582 MB
实际安装354 个(336 个 ttf + 18 个 ttc)
新增字体家族255 个
系统字体条目2286 → 2711
安装位置/usr/local/share/fonts/win10/

为什么不能一股脑全装

先把扩展名摊开看:

扩展名数量能不能用
.ttf230能
.TTF107能,但容易漏
.ttc18能(字体集合,一个文件多个字体)
.fon192不能
.CompositeFont4不能
.xml/.txt/.ini/.dat各 1不能

坑一:大写.TTF

我第一次写的是for f in *.ttf,跑完一数只有 229 个,心里还觉得挺顺。回头ls才发现里面躺着一堆ALGER.TTF、STKAITI.TTF、SIMLI.TTF这种全大写的文件名。

Linux 的 shell glob 区分大小写,*.ttf匹配不到*.TTF。一下就漏了 107 个,华文系列和一堆西文字体全在里头。

两种改法,任选:

shopt-snocaseglob# 让 *.ttf 同时匹配 .TTF# 或者find.-maxdepth1-iname'*.ttf'

坑二:mstmc.ttf是个坏文件

它混在 ttf 堆里,看名字像字体,4 KB 大小。file一看:

mstmc.ttf: data

不是字体,就是一段随机数据。装进去只会白占位置,直接在筛选阶段排除。

坑三:192 个.fon根本装不了

这些是 Windows 3.x 时代的位图字体,file的输出很直白:

8514fixe.fon: MS-DOS executable, NE for MS Windows 3.x (DLL or font)

NE 是可执行文件格式,不是字体文件。fontconfig 不认,Linux 下的应用也不会去加载。唯一的用处是让老 Windows 程序在低分辨率下显示界面文字,跟现在的需求完全无关。

顺带提一句,GlobalMonospace.CompositeFont这类文件也不是字体本体,是 Windows 的复合字体定义(XML),里面只是指向别的字体,一起跳过。

装哪儿:用户目录还是系统目录

两种都能让字体被识别,区别在覆盖面。

方案路径影响范围
用户级~/.local/share/fonts/当前用户、正常安装的应用
系统级/usr/local/share/fonts/所有用户、所有应用,含 snap / 系统服务 / Wine

如果机器上只跑原生应用,用户级完全够用,还不用 sudo。但这台机器装了 brave、chromium、firefox、thunderbird、notepad++、android-studio 一堆 snap 包,用户级装完它们照样找不到字体。

动手

1. 筛选并暂存

SRC=/path/to/FontsSTAGE=/tmp/win10-fontsmkdir-p"$STAGE"cd"$SRC"shopt-snullglob nocaseglobforfin*.ttf;do["${f,,}"="mstmc.ttf"]&&continuecp-a--"$f""$STAGE/"doneforfin*.ttc;docp-a--"$f""$STAGE/";done

${f,,}是 bash 的小写转换,用来忽略文件名大小写,防止MSTMC.TTF这种漏网。

2. 装之前先验一遍

别等装完才发现有坏文件,先用fc-scan过一遍:

cd"$STAGE"forfin*;do[-z"$(fc-scan--format'%{family}'--"$f"2>/dev/null)"]&&echo"坏文件:$f"done

354 个文件跑下来没有一个报错,一共识别出 425 个字体条目(.ttc一个文件里可能有好几个字体)。

3. 安装

sudoinstall-d-m755/usr/local/share/fonts/win10sudocp-a/tmp/win10-fonts/. /usr/local/share/fonts/win10/sudochown-Rroot:root /usr/local/share/fonts/win10sudochmod644/usr/local/share/fonts/win10/*sudofc-cache-f

fc-cache -f是强制重建缓存。不加-f的话它会比对时间戳,有时候新文件反而不进缓存,直接强制最省事。

4. 验证

fc-match"微软雅黑"fc-match"宋体"fc-match"仿宋_GB2312"fc-match"楷体"fc-match"Segoe UI"

正常输出长这样:

msyh.ttc: "微软雅黑" "Regular" simsun.ttc: "宋体" "常规" 仿宋_GB2312.ttf: "仿宋_GB2312" "Regular" simkai.ttf: "楷体" "Regular" segoeui.ttf: "Segoe UI" "Regular"

左边是文件,右边是匹配到的字体。想看得更清楚就加格式化参数,直接输出家族名和完整路径:

fc-match"微软雅黑"-f'%{family}|%{file}\n'# 微软雅黑,Microsoft YaHei|/usr/local/share/fonts/win10/msyh.ttcfc-list|grep-cwin10# 看这批字体贡献了多少条目# 425

一个.ttc文件里可能打包好几个字体,所以 354 个文件对应 425 个条目,这属于正常现象,不是重复安装。

重名字体怎么处理

系统里本来就装了msttcorefonts,里面有 Arial、Times New Roman、Courier New。这次又从 Win10 拷了一份同名的,装完就是两套并存。

不用手动删。fontconfig 会自己挑,而且实测挑的是新装的那份:

Arial -> /usr/local/share/fonts/win10/arial.ttf Times New Roman -> /usr/local/share/fonts/win10/times.ttf Courier New -> /usr/local/share/fonts/win10/cour.ttf

fc-cache全程没有报重复告警。如果你更想保留msttcorefonts的版本,把 win10 目录里那几个同名文件删掉再刷缓存就行。

几个实际会碰到的问题

装完了应用里还是找不到字体?

重启那个应用。字体缓存在启动时读,开着窗口不会自己刷新。终端也要重开。

snap 应用看不到?

确认装的是系统目录,不是~/.local/share/fonts。然后sudo fc-cache -f再试。

细明体查出来是 Noto Serif CJK?

这次源文件里只有mingliub.ttc,里面是細明體-ExtB/新細明體-ExtB,属于扩展 B 集,本来就没有基础版 MingLiU。用 Noto 兜底是正常的,不算装失败。

fc-cache不报错但某个字体就是查不到?

单独体检:

fc-scan--format'%{family}\n'-- /usr/local/share/fonts/win10/xxx.ttf

能输出家族名说明文件没问题,问题多半在应用侧(比如它按 PostScript 名而不是家族名去匹配)。

要卸载怎么办?

sudorm-rf/usr/local/share/fonts/win10sudofc-cache-f

干净利落,不留残留。

完整脚本

#!/bin/bash# 用法: sudo bash install-win10-fonts.shset-euopipefailSRC=/tmp/win10-fontsDEST=/usr/local/share/fonts/win10["$(id-u)"-ne0]&&{echo"请用 sudo 运行";exit1;}[-d"$SRC"]||{echo"暂存目录不存在:$SRC";exit1;}install-d-m755"$DEST"cp-a"$SRC"/."$DEST"/chownroot:root"$DEST"/*chmod644"$DEST"/*chmod755"$DEST"fc-cache-f"$DEST">/dev/null fc-cache-f>/dev/nullecho"文件数:$(find"$DEST"-maxdepth1-typef|wc-l)"fornamein"微软雅黑""宋体""仿宋_GB2312""楷体""Segoe UI""Calibri";doprintf'%-14s -> %s\n'"$name""$(fc-match"$name"-f'%{family}')"doneecho"完成,重启应用后生效。"

最后

这次装完新增 255 个字体家族,微软雅黑、宋体、黑体、楷体、仿宋/仿宋_GB2312、等线、华文全家桶、微软正黑体、Yu Gothic、Malgun Gothic 都在,西文的 Segoe UI、Calibri、Cambria、Consolas、Cascadia 也齐了。LibreOffice 打开带「宋体」「仿宋_GB2312」的文档不用再替换字体,WPS 和浏览器里也能正常选。

真正花时间的不是命令,是那 107 个大写.TTF和一个混进来的坏文件。装之前多跑一次fc-scan,能省掉后面「为什么这个字体没生效」的排查。

提醒:这些是微软的版权字体,自己机器上用没问题,别打包分发。本文由ai辅助完成,如果你有同样问题,可以把本文交给你的ai agent 工具,希望可以帮你节省时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 3:56:18

G1 与 ZGC 垃圾收集器

一、概述G1:面向服务端、可预测停顿、基于 Region 的分代收集器。ZGC:JDK 11 引入的低延迟收集器,基于 Region、颜色指针与读屏障,停顿时间不随堆增大而增长。选型:结合堆大小、停顿要求、吞吐要求综合判断。二、G1 收…

作者头像 李华
网站建设 2026/11/5 3:53:09

小白程序员也能学会大模型?这份循序渐进的学习路径请收藏!

学习AI大模型无需从复杂的数学公式和源码入手,建议遵循“基础打底→核心原理→应用实战→工程进阶”的路径。首先掌握Python及数据处理库,理解数学基础;其次学习机器学习、深度学习及Transformer架构等核心原理;接着通过提示词工程…

作者头像 李华
网站建设 2026/11/5 3:53:09

【Deep-OC-SORT 02】多轨迹算法Deep-OC-SORT-相对 OC-SORT 的改进点

Deep-OC-SORT OC-SORT 的"以观测为中心"骨架 五个叠加改进。本文逐项对照两版源码讲清每个改进改了什么、为什么、在代码哪里、怎么开关。骨架三机制:ORU——漏检时冻结滤波参数,找回后在最后两个真实观测间线性插值出虚拟轨迹逐帧重放&…

作者头像 李华
网站建设 2026/11/5 3:51:24

Python基础:第 07 篇 · 集合 set:去重与关系运算

文章目录专栏导读第 07 篇 集合 set:去重与关系运算本篇目标一、创建集合两大特性二、增删改查三、关系运算(集合的核心价值)判断关系四、实战场景场景 1:列表去重场景 2:找出两份名单的差异场景 3:共同标…

作者头像 李华