传递命令行选项
从 virt-manager 将命令行选项传递给 qemu 需要以下步骤。
virsh edit <name of vm>
,或直接使用修改文件vim /etc/libvirt/qemu/<name of virtual machine>.xml
- 更改
<domain type='kvm'>
为<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
- 为命令行参数添加标签
<qemu:commandline>
<qemu:arg value='-chardev'/>
<qemu:arg value='socket,path=/tmp/ivshmem_socket,id=ivshmem_socket'/>
<qemu:arg value='-device'/>
<qemu:arg value='ivshmem,chardev=ivshmem_socket,size=1m'/>
</qemu:commandline>
完成后,qemu 会尝试访问/tmp/ivshmem_socket
,由于 apparmor(我的情况下 libvirt 使用 apparmor,它还不如使用 SeLinux),访问将被拒绝,并显示类似以下的错误。
error starting domain: internal error: process exited while connecting to monitor:
...
virt-manager Failed to connect socket: Permission denied
应用装甲
要修复此错误,需要执行以下两个步骤。
1. 让qemu以root身份运行(这一步是optional
,你可能不需要,继续第二步)
- vim
/etc/libvirt/qemu.conf
- 将行
user =
, 和group =
, 更改为以下
用户=“根”
组=“根”
重新启动 PC 或 libvirt 守护程序。
2.AppArmor