如何在fydeos中为终端设置自定义字体

如何在fydeos中为终端设置自定义字体

这里以安装neovim中要用到的JetBrainsMono Nerd Font Mono字体为例

前置条件

  • FydeOS 已开启开发者模式。
  • 已禁用 RootFS 验证(Root 文件系统校验)。

第一阶段:解锁系统与挂载

为了修改系统文件,首先需要将根目录挂载为可读写模式。

  1. 进入 Shell 环境 (Ctrl + Alt + T, 输入 shell)。
  2. 获取 Root 权限并重新挂载:
sudo -i
mount -o remount,rw /


第二阶段:安装字体文件

我们将字体放入系统原生目录,以确保系统底层能识别。

  1. 移动字体文件

字体目录在/usr/share/fonts/下。
但是fc-cache的检查策略并不是检查所有目录,而是已有的几个目录。

因此直接创建目录将不被检查。你可以挑一个目录,并创建一个子目录,然后把字体文件都移动进去。

  1. 设置权限 (通常复制过去自动继承,但建议再次确认)
  • 文件权限:644 (-rw-r--r--)
  • 目录权限:755 (drwxr-xr-x)
  • 所有者:root:root
  1. 刷新字体缓存
    让 Linux 字体服务识别新文件:
fc-cache -fv

  1. 验证识别
fc-list | grep "JetBrains"

确保输出中包含了您的字体文件路径。


第三阶段:修改终端源码 (核心步骤)

由于 FydeOS 终端设置界面有白名单限制,且默认将未知的列表字体视为网络字体,我们需要修改源码。

1. 定位并解压配置文件

进入系统终端资源目录:

cd /usr/share/chromeos-assets/crosh_builtin/js/

# 备份原始文件
cp terminal_common.js.gz terminal_common.js.gz.bak

# 解压文件以便编辑
gunzip terminal_common.js.gz

2. 编辑 JS 代码

使用 Vim 编辑器打开:

vim terminal_common.js

我们需要修改 两个 数组。请在文件中查找并修改如下内容(建议加在数组开头):

修改点 A:加入白名单 (SUPPORTED_FONT_FAMILIES)

这是为了让字体出现在设置界面的下拉菜单中。

export const SUPPORTED_FONT_FAMILIES = [
  'JetBrainsMono Nerd Font Mono',  // <--- 添加这一行 (注意单引号和逗号)
  'Anonymous Pro',
  'Courier Prime',
  // ... 其他代码
];

修改点 B:标记为本地字体 (LOCAL_FONTS)

这是为了防止系统去 Google Fonts 下载该字体,从而解决“无法加载/灰显/请连接互联网”的报错。

const LOCAL_FONTS = [
  'JetBrainsMono Nerd Font Mono',  // <--- 添加这一行 (必须与上面名称完全一致)
  'Noto Sans Mono',
  'Cousine',
  // ... 其他代码
];

Vim 操作提示:按 i 进入编辑模式;编辑完成后按 Esc,输入 :wq 保存退出。

3. 重新压缩文件

将修改后的 JS 文件恢复为 gzip 格式,否则系统无法读取:

gzip terminal_common.js


第四阶段:应用与验证

  1. 重启设备 (推荐) 或注销当前账户,以清除 Chrome 缓存。
  2. 打开 终端 (Terminal)
  3. 进入设置 (Ctrl + Shift + P)。
  4. Text font family 下拉菜单中,您现在应该能看到 JetBrainsMono Nerd Font Mono
  5. 选中它,它应显示为黑色(可用状态),且终端图标和字体会立即生效。

:bulb: 常见问题与提示

  • Linux 子系统 (Crostini) 里的应用乱码?
    本指南仅修改了 FydeOS 宿主机终端窗口的字体。如果您在 Linux 容器里的应用(如 VS Code)也需要用这个字体,请务必在容器内再安装一次字体:
    mkdir -p ~/.local/share/fonts && cp /path/to/fonts/*.ttf ~/.local/share/fonts/ && fc-cache -fv
  • 系统更新后失效?
    是的,FydeOS 全量 OTA 更新会重置 /usr/share/chromeos-assets/。建议保留这份指南,更新后可能需要重新执行“第三阶段”。
  • 字体名称怎么填?
    必须严格对应 fc-list 输出的 Family Name。如果字体名中有空格,JS 数组里必须保留空格。

最终结果如下

1 个赞