我使用qemu-system-x86_64运行vm,通过TCP连接公开QMP命令,方法如下:
qemu-system-x86_64
-smp 4 -m 4096
-vga std
-display vnc=:0
-netdev user,id=n0
-device e1000,netdev=n0
-usb -device usb-tablet
-qmp tcp:localhost:8124,server,nowait
-k en-us
-boot d
-hda /filesystem/filesystem.img
一切都很好,因为我可以通过端口8124上的TCP套接字连接在本地向qemu发送QMP命令。
然后,我在vm(Ubuntu 21.04桌面(上安装了qemu guest代理,并以这种方式创建了quemu guest代理服务所需的virtio端口:
qemu-system-x86_64
-smp 4 -m 4096
-vga std
-display vnc=:0
-netdev user,id=n0
-device e1000,netdev=n0
-chardev socket,path=/tmp/qga.sock,server,nowait,id=qga0
-device virtio-serial
-device virtserialport,chardev=qga0,name=org.qemu.guest_agent.0
-usb -device usb-tablet
-qmp tcp:localhost:8124,server,nowait
-k en-us
-boot d
-hda /filesystem/filesystem.img
quemu来宾代理systemd服务已按预期启动并运行(显然是在本地套接字上,而不是通过TCP(。
现在我想通过TCP套接字连接查看qemu来宾代理QMP功能。我怎样才能做到这一点?
根据官方指南,我必须以这种方式更改chardev-chardev qga_proxy,id=qga0
,但它不起作用。该指南中的信息似乎已过时,因为目前不支持此命令。它抛出错误:qemu-system-x86_64:-charddev-qga_proxy,id=qga0:"qga_proxy"不是有效的字符驱动程序名称
通过TCP套接字公开来宾代理QMP命令的正确方法是什么?
谢谢。
您只需将virtio串行设备与TCP chardev关联即可。
Iow,替换:-chardev socket,path=/tmp/qga.sock,server,nowait,id=qga0
(unix套接字(-chardev socket,id=qga0,host=localhost,port=9876,server=on
(tcp套接字(。
然而,qga_proxy
从未发生过,它只是维基上的一些粗略想法。