使用 -nographic 运行 qemu 时如何将 Ctrl-C 传递给来宾?

Mar*_*ark 14 virtual-machine qemu

我通过以下方式配置了 Qemu 的 grub:

GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="..console=ttyS0"
Run Code Online (Sandbox Code Playgroud)

qemu使用-nographic命令行选项运行该进程。这些使能将当前终端用于串行控制台和qemu监视器控制台。但是现在,每当我在正在运行的 VM 中按Ctrl+ 时C,它都会被拦截qemu并关闭该进程。

我应该如何通过Ctrl+C或任何其他涉及CTRLQemu 的击键?

小智 18

在您的 shell 中,在运行 qemu 之前,运行“stty intr ^]”将中断键从 ^c 更改为 ctrl-]

这样,ctrl-c 将传递给 qemu,但您仍然可以通过按 ctrl-] 来中断 qemu 本身

  • 要覆盖 Ctrl-Z(背景),还有 `stty susp ^]`。对于 Ctrl-\(退出),使用 `stty quit ^]`。对于单个字符的多个定义,这是优先顺序:intr quit susp。 (2认同)

Cri*_*hai 5

您可以尝试使用sendkey命令 using -monitor stdio。虽然很明显的-display none -serial mon:stdio选项应该通过Ctrl+c通过给来宾。

您还可以创建一个监视器套接字,如下所示:

qemu -display none -monitor unix:/tmp/qemu-monitor,server,nowait
Run Code Online (Sandbox Code Playgroud)

然后,连接到监视器以使用 sendkey,socat如下所示:

socat - UNIX-CONNECT:/tmp/qemu-monitor
Run Code Online (Sandbox Code Playgroud)

您现在可以发送您的密钥,如下所示:

(qemu) sendkey ctrl-c
sendkey ctrl-c
Run Code Online (Sandbox Code Playgroud)


Cir*_*郝海东 5

删除-monitor或添加-serial mon:stdio

从 QEMU 2.10.1 开始,Ubuntu 17.10Ctrl-C在使用-nographic.

但是,如果您也使用该-monitor选项,行为会发生变化,并且会Ctrl-C杀死 QEMU。

这是-monitor通常的使用方式:How to switch to the QEMU control panel with -ngraphics? | 超级用户

如果您需要-monitor,您可以通过以下方式恢复 Ctrl+C -serial mon:stdioHow to run qemu with -ngraphic and -monitor but still能够将 Ctrl+C 发送给来宾并使用 Ctrl+AX 退出?| 堆栈溢出