我最近发现它qemu-kvm
有一个非常有前途的-curses
选项,它不需要启动 X 窗口,而是显示一个来自客户的漂亮 ncurses 输出,适合从命令行(或者更令人满意的是,在屏幕会话中,甚至通过 ssh)管理 Linux 客户机。
所以我尝试了一下,发现我的 Arch Linux 客户机进入了“图形模式”,导致该功能无效。据我所知,问题在于客户机内核初始化了一个帧缓冲区,以允许高于 80x60 的字符分辨率(以及漂亮的图形)。因此,我开始寻找一种方法来阻止客户机内核启动帧缓冲区。我尝试了各种内核参数,,,,nomodeset
(随后选择了而不是模式),但无济于事:每次都报告客户机处于“图形模式”(在fb=false
初始启动菜单之后),我无法从主机上的命令行终端与客户机交互。vga=0x0FF
vga=ask
VGA
VESA
qemu-kvm -curses
有没有简单的方法可以让客户机内核保持与启动时相同的模式(无帧缓冲区),而无需更改内核构建参数?如果没有,我应该更改哪些内核构建选项来编译不支持帧缓冲区的内核?有没有更好的方法可以在纯文本模式下从主机上的终端获取 VM 登录(例如,适合在主机上的屏幕会话中运行),而无需在客户机上运行 sshd?
答案1
因此,需要禁用的底层模块是fbcon
,但是 Arch 的内核不会将其编译为模块,因此将其列入黑名单。可能仍然可以识别和禁用fbcon
启动的特定驱动程序,但未列出此类驱动程序lsmod
,因此qemu-kvm
将 的驱动程序编译到 Arch 中。要禁用fbcon
自身,您必须使用它自己的奇怪启动选项语法:
fbcon=map:99
其中99
只是一些任意大的数字,大于系统上的帧缓冲设备的数量(通常为 1-2)。
看控制文件了解更多信息。
答案2
vga16fb.modeset=0
以前在 Ubuntu 中对我来说很管用。在 Ubuntu 中,将所有帧缓冲区模块(包括 vga16fb)列入黑名单也有效。
答案3
尝试像这样运行它:
TERM=dumb qemu-kvm -curses ...