Linux终端字体需分图形界面终端模拟器和纯文本控制台分别配置:前者通过终端偏好设置选等宽字体并刷新fontconfig,后者需修改/etc/default/console-setup并运行setupcon,两者机制不同、配置隔离。

Linux 终端字体这件事,并不是改一个配置项就能一把梭地统一搞定。先得分清楚,你面对的到底是「图形界面里的终端模拟器」(比如 GNOME Terminal、xfce4-terminal),还是「纯文本控制台」(也就是按 Ctrl+Alt+F1~F6 切进去看到的那个黑屏界面)。这两类终端走的底层机制完全不是一回事,如果混在一起改,结果往往就是折腾半天也不生效。
怎么改图形界面终端模拟器的字体
这是绝大多数用户实际在用的「终端」,比如 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变体的字体 - 改完不用重启系统,但旧终端窗口要关掉重开才生效;新窗口默认用当前 profile,不是所有 profile 都同步改
怎么改 Ctrl+Alt+F1~F6 的纯文本控制台字体
这个不走 X/Wayland,用的是内核级 console 字体(.psf/.psfu 格式),setfont 命令只对当前 tty 临时生效,重启就丢。
- 永久生效得改
/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的——小分辨率屏幕会显示不全- 某些发行版(如 Arch)默认没装
console-setup,得手动装kbd包,再确保systemd服务console-setup.service已启用 showconsolefont可验证当前加载的字体字形,但输出是二进制图样,肉眼难读;真正效果得切到tty1(Ctrl+Alt+F1)看
为什么改了还是显示方块或乱码
常见于中文环境,本质是字体缺失 + 编码未匹配,不是单纯换字体能解决的。
- 确认 locale:运行
locale,LANG必须含zh_CN.UTF-8或类似 UTF-8 编码;否则即使装了中文字体也 fallback 到 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清一下旧设置
最容易被忽略的点:图形终端和控制台字体配置完全隔离,改了一个不影响另一个;而且控制台字体大小单位是像素高度(如 16x32),图形终端字体大小单位是 pt 或 px,数值不能直接套用。