默认情况下,我的 Linux 内核使用内核内置的 16x32 Terminus 大字体(使用 CONFIG_FONT_TER16X32)作为帧缓冲区控制台。
我刚刚安装了“kbd”包并setfont
在没有参数的情况下运行,它切换到了在我的屏幕上看起来很小的其他字体。setfont
似乎只支持从文件加载字体,而不支持内核的内置字体之一。此外,16x32 Terminus 字体不包含在 kbd 包中。
那么,如何将控制台切换回系统启动时看到的默认内置字体?不带参数运行setfont
不会执行此操作。我正在寻找非发行版特定的解决方案。
答案1
我找不到可以执行此操作的现成工具,但以下 C 程序将重置/dev/tty
(如果是 Linux VT)为默认字体:
#include <fcntl.h>
#include <linux/kd.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(int argc, char **argv) {
struct console_font_op cfo = { .op = KD_FONT_OP_SET_DEFAULT };
int fd;
fd = open("/dev/tty", O_RDONLY);
if (fd < 0) perror("Opening /dev/tty");
else if (ioctl(fd, KDFONTOP, &cfo)) perror("Setting the default font");
}
将其保存到,使用(不需要 Makefile)defaultfont.c
构建它,然后运行。make defaultfont
./defaultfont