どうすれば、pulseaudioでKVM仮想マシン(rootとして実行)とデスクトップアプリ(rootとして実行されていない)で同時にサウンドを再生することができますか?
デフォルトでは、一度に1人のユーザーのサウンドのみを再生し、他のすべてのユーザーをブロックするようです。
例えば、
私はいくつかの音楽を演奏します:
mplayer ~/Music/*
my VMは次で始まります:
kdesu qemu-system-x86_64 -enable-kvm [... disks, network, etc. ...] -soundhw hda
これにより、プロセスがrootとして実行され、実行するユーザーのXが表示されます。そして、mplayerが停止するまでサウンドは機能しません。
代わりにルートシェルで実行すると、次のようになります。
pulseaudio: pa_context_connect() failed
pulseaudio: Reason: Connection refused
pulseaudio: Failed to initialize PA contextaudio: Could not init `pa' audio driver
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
alsa: Could not initialize DAC
alsa: Failed to open `default':
alsa: Reason: Device or resource busy
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
alsa: Could not initialize DAC
alsa: Failed to open `default':
alsa: Reason: Device or resource busy
audio: Failed to create voice `dac'
次に、VMが実行され、そのサウンドデバイスは機能しているように見えますが、サウンドは再生されません。
次に、mplayerを停止すると、再起動せずにVMからサウンドを再生できます。
その後、mplayerを再度起動すると、エラーが発生し、音が出なくなります。
AO: [Pulse] 44100Hz 2ch s16le (2 bytes per sample)
Video: no video
Starting playback...
A: -0.0 (unknown) of 308.2 (05:08.2) ??,?%
Audio device got stuck!
A: -0.0 (unknown) of 308.2 (05:08.2) ??,?%
Audio device got stuck!
A: -0.0 (unknown) of 308.2 (05:08.2) ??,?%
Audio device got stuck!
A: -0.0 (unknown) of 308.2 (05:08.2) ??,?%
私はpulseaudioをアンインストールして代わりにALSAを使用することでこれを解決できると信じていますが、qemuconfigを再構成してソースからビルドする必要があります。 ALSAのソフトウェアミキサーのように、代わりにpulseaudioを設定してやりたいと思います。
Qemuの環境変数を次のように正しく設定しました。
QEMU_AUDIO_DRV=pa
ただし、QEMU_PA_SINKを設定する前に、パッケージpaprefs
をインストールする必要があります。このパッケージには、pulseaudioのサーバーのような設定が含まれています。
私はPulseAudioの設定ですべてをチェックしましたが、それはおそらくオプションだけです:
これはpulseaudioの再起動後、combined
ソースを利用可能にしました。次に、ユーザーが開始すると:
pulseaudio -k
pactl list short sinks
combined
という名前のソースが表示されている場合は、次のようなQemuの他の環境変数の設定を続行できます。
QEMU_PA_SINK=combined
QEMU_PA_SOURCE=input
最後のステップとして、VMを再起動します
https://wiki.archlinux.org/index.php/QEM <-オーディオのセクションを参照 https://freedesktop.org/software/pulseaudio/paprefs/
編集:QEMUバージョン4.0ができました
https://www.redhat.com/archives/libvir-list/2019-February/msg01305.html
次に、仮想マシンのxml定義の通常の変更は次のようになります。
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
...
<qemu:commandline>
<qemu:arg value='-audiodev'/>
<qemu:arg value='pa,id=pa1,out.name=combined,in.name=input'/>
</qemu:commandline>
</domain>