libvirt: настройка гостя для общего доступа к звуку хоста

В последние дни я пытался смешать аудио 64-битной виртуальной машины Windows 8.1 с аудио хоста с переменным успехом.

Решение, которое работает сейчас для меня, заключается в использовании Spice для аудио и ICH6 в качестве настройки для звуковой карты, но из-за известной ошибки в Spice, о которой я мог только обнаружить, сообщаемой для Fedora и Red Hat, звук довольно плохой и единственный частичный обходной путь должен поставить <playback compression='off'/> в моей конфигурации домена VM. Под частичным я подразумеваю, что качество звука становится несколько пригодным для использования, но в аудио все еще есть глюки, на что некоторые пользователи также указывали в сообщениях об ошибках выше.

Я также пытался использовать VNC вместо Spice, но клиент не поддерживает звук. После этого сообщения об ошибке я понял, что аудио можно отправлять через обычные бэкэнды, если клиент VNC не поддерживает его, изменив пользователя и группу, под которой виртуальная машина работает под моим текущим пользователем, и добавив настройку VNC в /etc/libvirt/qemu.conf вот так:

vnc_allow_host_audio = 1
user = "yourusernamehere"
group = "yourusernamehere"

но и делает моего пользователя частью kvm & libvirtd группы и, кроме того, добавив эту строку в /etc/default/libvirt-bin:

export QEMU_AUDIO_DRV=pa

Выполнение этого дало мне желаемый эффект, и гостевой звук работал бы гладко, но основной звук не работал, пока я не закрыл бы гостя. Глядя на процессы хоста, я заметил, что libvirt породила другой экземпляр Pulseaudio под моим текущим пользователем (фактически имея 2 экземпляра Pulseaudio) вместо использования уже доступного экземпляра.

После еще немного поиска в Google я обнаружил, что pulseaudio может делиться своим звуком с другими пользователями, если module-native-protocol-tcp был включен. К сожалению, здесь я перестал находить полезную информацию. В каждой статье, в которой объясняется, как включить эту функцию, предлагается запуск Pulseaudio в системном режиме, что, очевидно, является проблемой безопасности, но также может привести к тому, что мои виджеты импульсного звука в Plasma5 не будут работать должным образом. Мне удалось отследить эту статью для Fedora 12, объяснив, что можно запускать Pulseaudio как непривилегированный пользователь (он же мой текущий пользователь), но я не понимаю, как я могу поделиться аудио с собой.

Кто-нибудь знает, как я могу использовать Pulse, чтобы я мог обмениваться аудио с моей виртуальной машиной или предоставить другое решение для микширования звука с гостя и хоста без сбоев звука?

1 ответ

Решение

Хорошо, после долгих проб и ошибок мне наконец-то удалось заставить его работать как надо, без каких-либо сбоев.

Некоторые из следующих шагов могут не потребоваться для того, чтобы заставить это работать, но это сработало для меня после их создания. Если кто-то хочет изменить ответ и избавиться от ненужных шагов, сделайте это.

Помимо того, что я сказал выше при использовании VNC (изменив настройки в qemu.conf & libvirt-bin и убедившись, что мой пользователь был частью необходимых групп), я также убедился, что мой пользователь был частью pulse & pulse-access групп.

Я скопировал все из / etc / pulse в.pulse моего домашнего каталога:

cd ~
mkdir .pulse
cp /etc/pulse/* .pulse/

В ~/.pulse/client.conf Я прокомментировал / изменил следующие строки:

enable-shm = yes
auto-connect-localhost = yes
auto-connect-display = yes

В ~/.pulse/daemon.conf

daemonize = yes
allow-module-loading = yes
use-pid-file = yes
enable-shm = yes

Также я установил paprefs (apt-get install paprefs) и проверил:

  • Сделайте обнаруживаемые сетевые звуковые устройства PulseAudio доступными локально
  • Включить сетевой доступ к локальным звуковым устройствам
  • Не требует аутентификации
  • Включить многоадресный /RTP-приемник
  • Добавить виртуальное устройство вывода для одновременного вывода на все локальные звуковые карты

После того, как вы внесли все изменения, вы можете перезагрузить компьютер или просто выйти из системы, войти в систему и перезапустить libvirt-bin, и все должно работать идеально при запуске виртуальной машины.

PS: если звук от виртуальной машины трещит, убедитесь, что виртуальная машина имеет ту же частоту дискретизации и битовую глубину, что и хост, и она должна работать.

Обновление: для меня стало очевидным, что у аудио все еще могут быть проблемы в гостевой системе (звук прерывистого звука), потому что libvirt, возможно, не сможет загрузить импульсную конфигурацию, из того, что я видел в лог-файле домена (/var/log/libvirt/qemu) /yourdomain.log). Вы можете временно отключить профиль или просто добавить:

@{HOME}/.pulse/** rw,

в /etc/apparmor.d/abstractions/libvirt-qemu и перезагрузите профили apparmor с помощью:

sudo invoke-rc.d apparmor reload

Примечание: я настроил libvirt для запуска в качестве текущего пользователя в /etc/libvirt/qemu.conf по соображениям безопасности.

Это немного устарело, но, возможно, это сэкономит время кому-нибудь, кто будет ходить по нему. Что сработало для меня, так это настроить сокет unix и использовать глобальную конфигурацию pulseaudio вместо TCP-соединенияmodule-native-protocol-tcp указан для пользователя, как предлагают большинство онлайн-руководств.

Я думаю, pulseaudio по какой-то причине не улавливал отдельного пользователя. Итак, я закончил редактирование конфигурации pulseaudio в/etc.

Я редактировал /etc/pulse/default.pa со строкой:

load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/system-pulseaudio.socket

В /etc/pulse/client.conf Я добавил строку:

default-server = unix:/tmp/system-pulseaudio.socket
Другие вопросы по тегам