我按照以下方式配置了 Qemu 的 grub:
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="..console=ttyS0"
并使用命令行选项运行该qemu
过程-nographic
。这些允许将当前终端用于串行控制台和qemu
监视器控制台。然而现在,每当我在正在运行的虚拟机内按Ctrl+时,它都会被拦截并关闭进程。Cqemu
我该如何传递Ctrl+C或涉及 Qemu 的任何其他按键CTRL?
答案1
在 shell 中,运行 qemu 之前,运行“stty intr ^]”将中断键从 ^c 更改为 ctrl-]
这样,ctrl-c 将被传递到 qemu,但您仍然可以通过按 ctrl-] 来中断 qemu 本身
答案2
您可以尝试使用该sendkey
命令-monitor stdio
。尽管显然该-display none -serial mon:stdio
选项应该传递Ctrl给c客人。
您还可以创建一个监视器套接字,像这样:
qemu -display none -monitor unix:/tmp/qemu-monitor,server,nowait
然后,连接到监视器以使用 sendkey,socat
如下所示:
socat - UNIX-CONNECT:/tmp/qemu-monitor
您现在可以发送密钥,如下所示:
(qemu) sendkey ctrl-c
sendkey ctrl-c
答案3
删除-monitor
或添加-serial mon:stdio
从 QEMU 2.10.1 开始,Ubuntu 17.10Ctrl-C
在使用-nographic
.
但是,如果您也使用该-monitor
选项,行为会发生变化,并且会Ctrl-C
杀死 QEMU。
这是-monitor
通常的使用方式:如何使用-ngraphics切换到QEMU控制面板? |超级用户
如果需要-monitor
,可以使用 Ctrl+C 恢复-serial mon:stdio
:如何使用 -ngraphic 和 -monitor 运行 qemu,但仍然能够向来宾发送 Ctrl+C 并使用 Ctrl+AX 退出? |堆栈溢出