В процессе сборки виртуальной машины для игрового времяпрепровождения на Windows 10, столкнулся с проблемой со звуком - его просто не было.
Проблема затронула протоколы: SPICE, VNC, RDP.
Задача: необходима трансляция звука из Windows домена средствами PulseAudio на основной KVM хост.
Добавленные ICH6 и ICH9 устройства через virt-manager не работают.
В главных ролях:
KVM host:
$ uname -r
5.4.0-92-generic
$ pulseaudio --version
pulseaudio 13.99.1
$ /usr/bin/qemu-system-x86_64 --version
QEMU emulator version 4.2.1
Guest OS:
Windows 10 Pro 21H2 19044.1415
Решение:
Редактируем конфиг виртуальной машины:
virsh edit <domain name>
<domain name> - имя домена виртуальной машины.
Меняем:
<domain type='kvm'>
на
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
Добавляем в конце конфига перед </devices>:
<qemu:commandline>
<qemu:arg value='-device'/>
<qemu:arg value='ich9-intel-hda,bus=pcie.0,addr=0x1b'/>
<qemu:arg value='-device'/>
<qemu:arg value='hda-micro,audiodev=hda'/>
<qemu:arg value='-audiodev'/>
<qemu:arg value='pa,id=hda,server=unix:/run/user/1000/pulse/native'/>
</qemu:commandline>
Где 1000 в 7 строке - uid вашего пользователя в системе (можно узнать с помощью команды "id").
Важно чтобы <devices> и <qemu:commandline> (аналогично </devices> и </qemu:commandline>) имели одинаковый отступ.
Удаляем все звуковые устройства из конфига, пример строк для удаления:
<sound model="ich9">
<address type="pci" domain="0x0000" bus="0x00" slot="0x1b" function="0x0"/>
</sound>
Либо удаляем с помощью "virt-manager":

Далее добавляем следующие строчки в /etc/apparmor.d/abstractions/libvirt-qemu:
/etc/pulse/client.conf.d/ r,
/etc/pulse/client.conf.d/* r,
/run/user/1000/pulse/native rw,
/home/<USERNAME>/.config/pulse/* r,
/home/<USERNAME>/.config/pulse/cookie k,
1000 - uid вашего пользователя в системе (можно узнать с помощью команды "id"), <USERNAME> - имя пользователя в системе.
Перезагружаем систему и проверяем звук в гостевой ОС.