如何将Linux控制台字体恢复为内核内置字体?

如何将Linux控制台字体恢复为内核内置字体?

默认情况下,我的 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

相关内容