如何以编程方式向 QEMU 来宾发送键盘事件?

How to send keyboard events to a QEMU guest programmatically?

假设我有一些预先存在的 iso(例如,alpine linux)。我从

开始
qemu-system-x86_64 -enable-kvm -cdrom alpine-virt-3.5.0-x86_64.iso

此时,我想进行一些设置(并避免手动进行)。

我想,一种方法是使用 xdotool,但这不是很方便,因为整个 Xorg 会话将忙于一个 QEMU 客户机。

也许有更好的方法?可以通过 QMP 或 QEMU C API 完成吗?

一种可能的方法是将控制台设置为串行并告诉 qemu 将访客系统的串行端口重定向到主机的 stdio:

qemu-system-x86_64 -enable-kvm -cdrom alpine-virt-3.5.0-x86_64.iso -append "console=ttyS0" -serial stdio

然后您可以尝试在 qemu-process 的 stdio 上进行自定义设置。或者,您也可以使用监听套接字并连接到它:-serial tcp::12345,server

最终你应该努力使用可能的现有机制来进行自动设置,例如 preseed-files 用于 Debian GNU/Linux 等,因为这样做可能相当error-prone.