本文介绍了在 WSL(Ubuntu) 中安装中文字体的两种方法:一是直接使用 Windows 系统自带的中文字体,二是安装从网络下载的中文字体文件。文章详细讲解了从字体复制、安装到验证的完整过程,并对每个命令的作用进行了说明,适合 WSL 用户解决中文字体显示问题。

在 WSL(Ubuntu) 中安装和启用中文字体的两种方法

本文将详细介绍在 WSL(Ubuntu) 上使用中文字体的两种方法:

  1. 直接安装 Windows 系统自带的中文字体
  2. 安装从网络下载并保存在 Windows 本地目录的中文字体

背景与原理

WSL(Windows Subsystem for Linux)本质上是一个运行在 Windows 上的 Linux 子系统。它能够通过类似 /mnt/c/ 这样的路径来访问 Windows 的文件系统。例如,Windows 的 C:\Windows\Fonts 对应 WSL 中的 /mnt/c/Windows/Fonts。因此,我们可以将 Windows 中的字体文件复制到 WSL 的字体目录中(如 /usr/share/fonts//usr/local/share/fonts/),并使用 fc-cache 刷新缓存,即可在 Linux 环境下全局启用相应字体。

第一部分:在 WSL(Ubuntu) 中安装 Windows 自带的中文字体

1. 前置准备

  1. 确保 WSL(Ubuntu) 已安装所需工具:
    • sudo, cp, mkdir, fc-cache 等(Ubuntu 通常自带)
  2. 确保拥有管理员权限:
    • 在 WSL 中执行需要写入系统目录的操作时,需使用 sudo

2. 打开 WSL(Ubuntu) 终端

在 Windows 开始菜单或任务栏,找到并打开 “Ubuntu” 或 “WSL” 应用,进入 Linux 命令行界面。

3. (可选)更新软件包索引

1
sudo apt update

这条命令会更新系统的软件包列表,确保后续安装的软件是最新版本。

4. 确保已安装 fontconfig

1
sudo apt install fontconfig

fontconfig 是 Linux 系统中的字体管理工具,用于配置和管理系统字体。如果已安装,系统会提示已是最新版本。

5. 创建字体存放目录

1
sudo mkdir -p /usr/local/share/fonts/chinese
  • mkdir: 创建目录命令
  • -p: 如果父目录不存在则自动创建
  • /usr/local/share/fonts/chinese: 存放中文字体的目标目录

在 Linux 系统中,字体文件的存放位置有以下几个标准目录:

  1. /usr/share/fonts/

    • 系统级字体目录,所有用户可用
    • 通常由包管理器安装的字体会放在这里
    • 系统更新可能会修改此目录
  2. /usr/local/share/fonts/

    • 系统级字体目录,所有用户可用
    • 推荐用于管理员手动安装的字体
    • 系统更新不会修改此目录
    • 与系统自带字体分开管理,方便维护
  3. ~/.local/share/fonts/~/.fonts/

    • 用户级字体目录,仅当前用户可用
    • 适合个人用户安装自己需要的字体
    • 不影响其他用户

本教程选择 /usr/local/share/fonts/chinese 目录的原因:

  1. 作为系统级目录,所有用户都能使用这些中文字体
  2. 与系统自带字体分开存放,便于管理和备份
  3. 创建 chinese 子目录使结构更清晰,便于后续管理

字体文件格式:

  • .ttf: TrueType 字体,最常见的字体格式
  • .ttc: TrueType Collection,包含多个 TTF 字体的集合文件
  • .otf: OpenType 字体,更现代的字体格式

6. 进入 Windows 字体目录并查看可用字体

1
2
cd /mnt/c/Windows/Fonts
ls
  • cd: 切换目录到 Windows 的字体文件夹
  • ls: 列出目录中的所有文件,可以看到各种字体文件

7. 复制所需的中文字体到 WSL 的字体目录

方法1: 手动指定复制特定字体

1
2
3
sudo cp SimSun.ttc /usr/local/share/fonts/chinese/
sudo cp MSYH.TTC /usr/local/share/fonts/chinese/
sudo cp MSYHBD.TTC /usr/local/share/fonts/chinese/

方法2: 自动检测并复制中文字体

  1. 首先创建脚本文件:
1
2
# 使用 nano 或其他编辑器创建脚本文件
nano ~/copy-chinese-fonts.sh
  1. 将以下内容复制到脚本中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/bash

# 目标目录
TARGET_DIR="/usr/local/share/fonts/chinese"

# 确保目标目录存在
sudo mkdir -p "$TARGET_DIR"

# 计数器
found=0
copied=0

echo "开始扫描中文字体..."

# 遍历字体文件
for f in /mnt/c/Windows/Fonts/*.{ttf,ttc,otf,TTF,TTC,OTF}; do
[ -e "$f" ] || continue

if fc-scan --format='%{lang}\n' "$f" 2>/dev/null | grep -qi 'zh'; then
((found++))
echo "发现中文字体: $(basename "$f")"

if sudo cp -n "$f" "$TARGET_DIR/"; then
((copied++))
echo "✓ 复制成功"
else
echo "✗ 复制失败或文件已存在"
fi
fi
done

echo "扫描完成!"
echo "共发现 $found 个中文字体"
echo "成功复制 $copied 个字体到 $TARGET_DIR"

# 刷新字体缓存
echo "正在刷新字体缓存..."
sudo fc-cache -fv

echo "完成!"
  1. 保存文件并赋予执行权限:
1
chmod +x ~/copy-chinese-fonts.sh
  1. 运行脚本:
1
~/copy-chinese-fonts.sh

脚本执行过程:

  1. 创建中文字体存放目录(如果不存在)
  2. 初始化计数器,用于统计发现和复制的字体数量
  3. 遍历 Windows 字体目录中的所有字体文件
  4. 使用 fc-scan 分析每个字体文件是否支持中文
  5. 显示发现的中文字体名称并尝试复制
  6. 统计复制结果并显示成功/失败状态
  7. 最后刷新字体缓存并显示总结信息

运行时的输出示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
开始扫描中文字体...
发现中文字体: SimSun.ttc
✓ 复制成功
发现中文字体: MSYH.TTC
✓ 复制成功
发现中文字体: MSYHBD.TTC
✓ 复制成功
...
扫描完成!
共发现 12 个中文字体
成功复制 12 个字体到 /usr/local/share/fonts/chinese
正在刷新字体缓存...
完成!

注意事项:

  1. 脚本需要 sudo 权限才能复制文件到系统目录

  2. 首次运行可能需要几分钟时间,因为要分析每个字体文件

  3. -n 参数确保不会覆盖已存在的字体文件,避免重复安装

  4. 脚本会显示详细的进度信息,方便追踪安装过程

  5. 如果遇到权限问题,可以尝试:

    1
    sudo ~/copy-chinese-fonts.sh

验证安装结果:

1
2
3
4
5
6
# 检查所有已安装的中文字体
fc-list :lang=zh | cut -d: -f2 | sort -u

# 或者查看特定字体是否安装成功
fc-list | grep -i "simsun" # 查找宋体
fc-list | grep -i "msyh" # 查找微软雅黑

8. 刷新字体缓存

1
sudo fc-cache -fv
  • fc-cache: 刷新系统字体缓存的命令
  • -f: 强制刷新,即使似乎没有必要
  • -v: 显示详细过程信息

9. 验证字体是否安装成功

1
fc-list | grep -i simsun
  • fc-list: 列出系统中所有可用的字体
  • |: 管道符,将前一个命令的输出传递给后一个命令
  • grep -i simsun: 搜索包含 “simsun” 的行,-i 表示忽略大小写

第二部分:在 WSL(Ubuntu) 中安装从网络下载的中文字体文件

有的时候,我们需要安装一些从网络下载的中文字体文件,假设这些字体文件下载后被保存到 Windows 桌面的fonts文件夹中。

1. 前置准备

与第一部分相同,需要:

  • WSL(Ubuntu) 终端和 sudo 权限
  • fontconfig 已安装

2. 创建字体目录

1
sudo mkdir -p /usr/local/share/fonts/chinese

命令解释:

  • sudo: 使用管理员权限执行命令
  • mkdir -p: 创建目录,如果父目录不存在则一并创建
  • /usr/local/share/fonts/chinese: 存放中文字体的目标目录

3. 切换到 Windows 桌面目录

1
2
# 切换到 Windows 桌面目录
cd /mnt/c/Users/【你的Windows用户名】/Desktop/fonts

⚠️ 注意:需要将 【你的Windows用户名】 替换为你实际的 Windows 用户名。

例如,如果你的用户名是 john,那么命令就是:

1
cd /mnt/c/Users/john/Desktop/fonts

4. 拷贝字体文件到 WSL 字体目录

如果所有字体文件都在同一个目录下:

1
sudo cp *.{ttf,ttc,otf,TTF,TTC,OTF} /usr/local/share/fonts/chinese/ 2>/dev/null

命令解释:

  • sudo cp: 以管理员权限复制文件
  • *.{ttf,ttc,otf,TTF,TTC,OTF}: 匹配所有常见字体文件格式(包括大小写)
  • /usr/local/share/fonts/chinese/: 目标目录
  • 2>/dev/null: 忽略错误信息(如某些格式文件不存在时)

5. 刷新字体缓存

1
sudo fc-cache -fv

命令解释:

  • sudo: 使用管理员权限
  • fc-cache: 刷新字体缓存的命令
  • -f: 强制刷新所有字体
  • -v: 显示详细处理信息

6. 验证字体是否安装成功

1
2
3
4
5
# 列出所有中文字体
fc-list :lang=zh

# 或者搜索特定字体名称
fc-list | grep -i "【要搜索的字体名称】"

💡 提示:将 【要搜索的字体名称】 替换为你要查找的具体字体名,例如:

1
2
fc-list | grep -i "SimSun"    # 搜索宋体
fc-list | grep -i "微软雅黑" # 搜索微软雅黑

命令解释:

  • fc-list :lang=zh: 列出所有支持中文的字体
  • fc-list | grep -i "字体名称": 搜索特定字体
    • |: 管道符,将前一个命令的输出传给后一个命令
    • grep -i: 搜索文本,-i 表示忽略大小写
    • "字体名称": 要搜索的字体名称,如 “SimSun” 或 “微软雅黑”

注意事项:

  1. 确保字体文件夹的路径正确
  2. 替换脚本中的 <username> 为你的 Windows 用户名
  3. 如果字体文件有子目录,可以使用第一部分的自动检测脚本
  4. 建议在复制前检查字体文件的版权问题