开机滚动字体显示优化
这里所谓的开机滚动显示的字体,是系统加载阶段的内核日志字体,优化的核心解决办法是锁定 bootloader 高分辨率并配置控制台高清字体。
以 Arch linux 为例:
1. 配置 systemd-boot 的内核分辨率
编辑 Arch 的启动项配置文件,执行 sudo vim /boot/loader/entries/arch.conf,在 options 行末尾添加分辨率参数,示例如下:
1➜ ~ cat /boot/loader/entries/2025-12-09_09-04-59_linux.conf
2# Created by: archinstall
3# Created on: xxx
4title Arch Linux (linux)
5linux /vmlinuz-linux
6initrd /initramfs-linux.img
7options root=PARTUUID=9443f4c6-b17e-4771-8ecf-987627f0551c zswap.enabled=0 rootflags=subvol=@ rw rootfstype=btrfs loglevel=3 rd.udev.log_priority=3 vt.global_cursor_default=0 video=2560x1440@100 amdgpu.runpm=0 amdgpu.gpu_recovery=1
其中的 video=2560x1440@100 替换为屏幕原生分辨率。
不知道自己屏幕分辨率的,可从 wlr-randr 命令输出获取,非 Wayland 环境,也有类似命令,自行搜索。
1➜ ~ wlr-randr
2HDMI-A-1 "AOC Q27N3S2 1AQQ3HA009633 (HDMI-A-1)"
3 Make: AOC
4 Model: Q27N3S2
5 Serial: 1AQQ3HA009633
6 Physical size: 600x340 mm
7 Enabled: yes
8 Modes:
9 2560x1440 px, 59.951000 Hz (preferred)
10 2560x1440 px, 100.000000 Hz (current)
11 2560x1440 px, 74.968002 Hz
12 1920x1080 px, 74.973000 Hz
13 1920x1080 px, 60.000000 Hz
14 1920x1080 px, 60.000000 Hz
15 1920x1080 px, 59.939999 Hz
16 .......
保存退出后,执行 sudo bootctl update 更新配置,确保开机引导阶段保持高分辨率。
2. 安装并配置控制台高清字体
先装清晰的 Terminus 字体
1sudo pacman -S terminus-font
字体配置示例:
1➜ ~ cat /etc/vconsole.conf
2# Written by systemd-localed(8) or systemd-firstboot(1), read by systemd-localed
3# and systemd-vconsole-setup(8). Use localectl(1) to update this file.
4KEYMAP=us
5FONT=ter-v28n
6XKBLAYOUT=us
7XKBMODEL=pc105+inet
8XKBOPTIONS=terminate:ctrl_alt_bksp
ter-v28n 是适配开机日志的清晰款,v 代表该字体包含全量字符集,b 代表粗体(bold)样式,可在 /usr/share/kbd/consolefonts 目录查看更多字体型号。
若想提前验证字体效果,可执行 setfont ter-v28n 直接加载字体,切换到 TTY 终端就能查看显示效果,确认合适后再重启固化设置即可。
TTY 控制台支持的字体有限,找来找去没几个对眼的🤷♂️。
3. mkinitcpio 配置
先直接看配置示例:
1➜ ~ grep -Ev "^#|^$" /etc/mkinitcpio.conf
2MODULES=(amdgpu)
3BINARIES=()
4FILES=()
5HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck)
MODULES=(amdgpu)在生成 initramfs(初始内存盘)时,强制加载 AMD GPU 的开源驱动。HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck), 定义 mkinitcpio 构建 initramfs 时执行的“钩子”(hooks)顺序。注意其中的 kms 在较靠前的位置。kms 意为启用内核模式设置(Kernel Mode Setting),用于早期启用显卡分辨率(配合 amdgpu 模块)。这能避免启动时屏幕闪烁或低分辨率,也就是说字体看起来清晰舒服,启动时的显示体验飙升。
HOOKS 部分详细说明:
| Hook | 功能说明 |
|---|---|
base | 提供最基础的 initramfs 结构,必须存在。 |
udev | 启用 udev 设备管理(动态设备节点)。现代系统必需。 |
autodetect | 自动检测并精简所需的模块和二进制文件(基于当前硬件)。通常放在靠前位置。 |
microcode | 在 CPU 初始化早期加载 Intel/AMD 微码更新(提升稳定性和安全性)。 |
modconf | 将 /etc/modprobe.d/ 中的模块配置文件包含进 initramfs。 |
kms | 启用内核模式设置(Kernel Mode Setting),用于早期启用显卡分辨率(配合 amdgpu 模块)。这能避免启动时屏幕闪烁或低分辨率。 |
keyboard | 包含键盘驱动,使 initramfs 阶段能接收键盘输入(如输入 LUKS 密码)。 |
keymap | 加载指定的键盘布局(由 /etc/vconsole.conf 定义)。 |
consolefont | 加载控制台字体(同样来自 /etc/vconsole.conf)。 |
block | 支持 block 设备(硬盘、SSD 等),必须在 filesystems 之前。 |
filesystems | 包含常用文件系统模块(ext4, btrfs, xfs 等),用于挂载根文件系统。 |
fsck | 在挂载根文件系统前运行 fsck 检查磁盘错误。 |
调整相应字段并重新生成 initramfs
1sudo mkinitcpio -p linux
这样一番操作后,统一分辨率,开机全程不切换,字体清晰;支持高分辨率输出,适配高清屏。
4. 进一步优化 TTY 字体显示
此部分需要安装 kmscon,是一个简单的、基于 Linux 内核级显示模式设置的终端模拟器,尝试用用户空间终端代替内核的虚拟终端(VT)
Kmscon is a simple terminal emulator based on linux kernel mode setting (KMS). It is an attempt to replace the in-kernel VT implementation with a userspace console. See kmscon(1) man-page for usage information.
简单说当你非图形化界面登录,或者按Ctrl + alt + F1~F6其中的一个登录时(一般来说 GMD、LightDM、ly 等 display manager 都会绑定一个 tty1~tty6 中的一个,systemctl enable ly@tty2.service 就会占用 tty2,引导进入图形界面,剩下的给非图形化登录使用)。
那个上古界面,虽然很纯粹,但纯文本 VT 对于东亚人民来说非常不友好,不支持 cjk。虚拟终端 VT 使用的是内核内置的位图字体(bitmap font),通常是 8x16 或类似大小,这些字体只包含 ASCII 字符(英文、数字、符号)和部分 Latin 扩展字符,不包含中文字符集(如 GBK、UTF-8 中的汉字),即使系统 locale 设置为中文,内核 VT 也无法渲染汉字。
正式由于上述局限性,我们要切换为 kmscon,能比较好的解决问题。
1sudo pacman -S kmscon
2sudo systemctl enable kmsconvt@tty1.service
sudo systemctl enable kmsconvt@tty1.service 意为接管 tty1, Ctrl + Alt + F1登录后可查验效果。
说来 kmscon 也很奇怪,有一段时间都被流放到 aur 中了,几年不更新。可是最近像打了鸡血一个,猛更新,代码提交也变活跃了,不信可去仓库https://github.com/kmscon/kmscon 看看相关记录。
其无图形服务器依赖:不依赖 X.org/Wayland,适合纯终端环境。
扯了这么多,kmscon 作用是什么呢?
- 完整的 vt220 to vt510 实现,可直接替换 agetty/getty,无需修改现有终端程序。
- 完整的国际化支持, Kmscon 支持打印全部 Unicode 字符,包括中日韩文字。
- 硬件加速渲染。
- 支持 multi-seat
说人话就是,我可以随意改字体了,能显示 emoji 和 cjk 文字,体验天差地别啊。
直接看配置:
1[mephisto@minipc ~]$ grep -Ev "^#|^$" /etc/kmscon/kmscon.conf
2gpus=all
3hwaccel
4font-engine=pango
5font-size=18
6font-name=Hack Nerd Font,WenQuanYi Micro Hei Mono
7font-dpi=96
8mouse
可以看出我开启了硬件加速,字体引擎为 pango,字体选择Hack Nerd Font,WenQuanYi Micro Hei Mono, dpi 也可以设定,鼠标支持,纯 vt 环境,是没有鼠标显示的,也就没法用按中键选中复制等。
当你的桌面环境比如 Gnome、KDE 等崩溃时,可以切换到非图形界面,此时你可以杀掉哪些占用资源多的进程,这个时候还能保持较好的终端体验,至少对东亚人民是如此。
亦或你在开发一个嵌入式系统,同时需要稍微照顾终端体验...
很多年前,我还看到过我的同事,特意切换到纯 vt 环境编程,防止别人干扰...
最后,可以看看不同 tty 差异,注意看 TTY 那一栏.
1➜ ~ w
2 xx:xx:01 up 1:30, 3 users, load average: 0.37, 0.75, 1.04
3USER TTY LOGIN@ IDLE JCPU PCPU WHAT
4mephisto tty2 xx:08 1:30m 3:56 0.95s Xwayland :0 -rootless -core -terminate 10 -listenfd 31 -listenfd 32 -displayfd 78 -wm 75 # Graphic, labwc
5mephisto tty4 xx:14 1:45 0.06s ? [atuin] <defunct> # vt
6mephisto pts/2 xx:35 37.00s 0.26s ? [atuin] <defunct> # kmscon
总之,经过上述步骤后,开机后字体显示相关都能较好满足需求,当然如果你是纯粹的图形化爱好者,开启 Plymouth 连滚动字体都看不到。我开启内核滚动日志输出,主要是方便查看是否报错。

版权申明:
- 未标注来源的内容全部为原创,未经授权请勿转载(因转载后排版往往错乱、内容不可控、无法持续更新等);
- 非营利为目的,演绎本博客任何内容,请以'原文出处'或者'参考链接'等方式给出本站相关网页地址(方便读者)。
相关文章:
- 树莓派上部署Vaultwarden
- 使用goaccess实时分析Caddy日志
- 个人网站监控
- Hugo全站AVIF记
- Linux下尝试使用Godot开发小游戏
- Arch linux dae 透明代理
- Airflow接管galler-dl下载任务
- 如何使用gallery-dl批量下载图像
- Arch核显下如何愉快玩Dota2和CS2
- Arch/labwc 环境网络相关设置