Linux 终端默认字体的修改,需要区分图形界面终端模拟器与纯文本控制台分别设置:前者通常通过终端偏好设置选择合适的等宽字体,并在必要时刷新 fontconfig 缓存;后者则需要编辑 /etc/default/console-setup 并执行 setupcon。两种终端的工作机制不同,字体配置也彼此独立,不能混为一谈。

很多人在搜索“Linux 怎么修改终端默认字体”时,容易以为只要改一个配置文件就能全部生效。实际上,首先要分清你使用的是「图形界面中的终端模拟器」(如 GNOME Terminal、xfce4-terminal),还是「纯文本控制台」(按 Ctrl+Alt+F1~F6 进入的黑屏字符界面)。这两类 Linux 终端采用的底层实现完全不同,如果不区分场景直接操作,往往会出现字体修改无效的问题。
怎么改图形界面终端模拟器的字体
这是大多数 Linux 用户日常使用的终端类型,例如 Ubuntu 默认的 GNOME Terminal,以及 XFCE 桌面中的 xfce4-terminal。它基于 X/Wayland 图形协议运行,字体显示通常由 GTK/Qt 和 fontconfig 共同管理。
- 可直接打开终端设置菜单:右键 → Preferences → Profile → Text → 勾选
Custom font,然后从列表中选择合适的等宽字体,例如Monospace、JetBrains Mono、Fira Code等 - 终端字体必须使用等宽字体(monospace),否则像
ls输出对齐会错位,vim中光标位置也可能偏移;如果把 TTF/OTF 字体安装到~/.local/share/fonts/,还需要执行fc-cache -fv,这样新字体才会出现在下拉列表中 - 尽量不要选带“Regular”或“Light”后缀、但终端又需要显示粗体效果的字体,否则
ls中目录名加粗时可能发虚或糊在一起;更建议优先选择自带Medium或SemiBold变体的终端字体 - 修改后通常不需要重启 Linux 系统,但已经打开的旧终端窗口往往要关闭后重新打开才会应用新字体;另外,新窗口默认继承当前 profile,并不是所有 profile 都会自动同步更新
怎么改 Ctrl+Alt+F1~F6 的纯文本控制台字体
这一类终端不依赖 X/Wayland,而是使用内核级 console 字体,常见格式为 .psf 或 .psfu。通过 setfont 命令修改字体只会对当前 tty 临时生效,系统重启后设置就会丢失。
- 如果想让 Linux 控制台字体永久生效,需要修改
/etc/default/console-setup:例如设置FONTFACE="TerminusBold"、FONTSIZE="16x32",随后运行sudo setupcon或sudo dpkg-reconfigure console-setup(适用于 Debian/Ubuntu 系发行版) - 使用
ls /usr/share/consolefonts/可以查看系统内可用的控制台字体,文件名里通常带有尺寸信息(如lat9w-16.psf.gz中的16代表高度);一般不建议选择大于32的字体,否则在低分辨率屏幕上可能显示不完整 - 部分 Linux 发行版(例如 Arch)默认并未安装
console-setup,这时需要手动安装kbd包,并确认systemd的console-setup.service服务已经启用 - 通过
showconsolefont可以检查当前加载的控制台字形,不过它输出的是二进制图样,可读性较差;要确认最终显示效果,还是建议切换到tty1(Ctrl+Alt+F1)实际查看
为什么改了还是显示方块或乱码
这类情况在中文 Linux 环境中很常见,根本原因通常是字体缺失或编码不匹配,而不只是简单的“字体没改成功”。
- 先检查 locale 设置:执行
locale,确认LANG包含zh_CN.UTF-8或其他 UTF-8 编码;否则即使安装了中文字体,系统也可能只回退到 ASCII 字符集,导致中文无法正常显示 - 纯文本控制台原生并不支持 TrueType 字体,中文显示通常需要依赖
unifont这类 bitmap 位图字体(例如uni32.psf.gz),并且还需要在/etc/vconsole.conf中写入FONT=uni32(适用于 systemd 系统) - 如果是图形终端中的中文乱码,通常是因为没有安装
fonts-wqy-microhei、fonts-noto-cjk等常见开源中文字体包;可以通过fc-list :lang=zh查看当前系统已注册的中文字体 - 像 GNOME Terminal 这类终端有时会缓存字体映射,修改设置后若仍未正常生效,可以执行
gsettings reset org.gnome.Terminal.Legacy.Settings custom-font来清理旧的字体配置
一个最容易被忽略、但也是最关键的点在于:Linux 图形终端字体设置和纯文本控制台字体设置是完全隔离的,修改其中一个不会影响另一个。另外,控制台字体大小通常以像素高度表示(如 16x32),而图形终端字体大小一般使用 pt 或 px,两者单位不同,数值也不能直接照搬。
