QEMU-KVM Linux虚拟化的命令行

我最近发现, qemu-kvm有一个非常有希望的-curses选项,它不是启动一个X窗口,而是从适合于从命令行pipe理Linux客户机的来宾显示一个很好的ncurses输出(或者更令人满意的是,在屏幕会话,甚至通过SSH)。

所以我试了一下,发现我的Arch Linux客户端进入了“graphics模式”渲染这个function没用。 从我已经能够确定,问题是客机内核初始化帧缓冲允许高于80×60字符分辨率(和漂亮的graphics)。 所以我继续寻找一种方法来防止客户内核启动帧缓冲区。 我尝试了各种各样的内核参数, nomodesetfb=falsevga=0x0FFvga=ask (然后select一个VGA而不是VESA模式),无效:每次qemu-kvm -curses报告都在客户机上的“graphics模式”(在初始引导菜单之后),我无法从主机上的命令行terminal与客户机进行交互。

有没有简单的方法来保持来宾内核在相同的模式下启动(没有帧缓冲),而不改变内核构build参数? 如果没有,我应该改变什么内核构build选项来编译一个没有framebuffer支持的内核? 有没有更好的方法在纯文本模式下从主机上的terminal获得虚拟机login(例如,适合在主机上的屏幕会话中运行),而无需在客户机上运行sshd?

所以需要禁用的底层模块是fbcon ,但是Arch的内核不会将其编译为模块,因此将其列入黑名单。 可能仍然有可能识别和禁用fbcon启动的特定驱动程序,但是没有这样的驱动程序被lsmod列出,所以qemu-kvm的驱动程序被编译成Arch。 要禁用fbcon本身,您必须使用自己奇怪的启动选项语法:

 fbcon=map:99 

其中99只是一些大于系统上帧缓冲设备(通常为1-2)的任意大的数字。

有关更多信息,请参阅fbcon.txt 。

vga16fb.modeset=0在过去(在Ubuntu中)为我工作。 同样在Ubuntu中,将所有帧缓冲模块(包括vga16fb)列入黑名单也起作用。

尝试像这样运行它:

 TERM=dumb qemu-kvm -curses ...