web-dev-qa-db-ja.com

libvirt:ホストオーディオを共有するようにゲストを構成します

過去数日間、私はx64 Windows 8.1 VMのオーディオとホストオーディオをミックスして成功させようとしてきました。

現時点で私にとって有効な解決策は、オーディオにSpiceを使用し、サウンドカードの設定にICH6を使用することですが、Spiceの既知のバグのため、 Fedora および Red Hat 、オーディオはかなり悪く、唯一の部分的な回避策は、VMドメイン構成に<playback compression='off'/>を入れることです。私が部分的に言っているのは、音質が多少使いやすくなるということですが、一部のユーザーが上記のバグレポートでも指摘しているように、オーディオにはまだ不具合があります。

また、Spiceの代わりにVNCを使用しようとしましたが、クライアントにはサウンドサポートがありません。 this バグレポートに従って、VNCクライアントがVMを実行しているユーザーとグループを現在のユーザーに変更することでサポートしない場合、通常のバックエンドを介して音声を送信できることを理解しました/etc/libvirt/qemu.confにVNC設定を追加するには、次のようにします。

vnc_allow_Host_audio = 1
user = "yourusernamehere"
group = "yourusernamehere"

ユーザーをkvmlibvirtdグループの一部にし、さらにこの行を/etc/default/libvirt-binに追加します。

export QEMU_AUDIO_DRV=pa

これを行うと、目的の効果が得られ、ゲストオーディオはスムーズに実行されますが、ホストオーディオはゲストを閉じるまで動作しませんでした。ホストプロセスを見ると、すでに利用可能なインスタンスを使用する代わりに、libvirtが現在のユーザーの下に別のPulseaudioインスタンス(事実上2つのPulseaudioインスタンスを持っている)を生成していることに気付きました。

もう少しグーグルで調べたところ、module-native-protocol-tcpが有効になっている場合、pulseaudioは他のユーザーと音声を共有できることがわかりました。残念ながら、ここで有用な情報が見つかりませんでした。これを有効にする方法を説明するすべての記事は、Pulseaudioをシステムモードで実行することを推奨しています。これは明らかにセキュリティの問題ですが、Plasma5のPulseオーディオウィジェットが期待どおりに動作しなくなることもあります。 this Fedora 12の記事を追跡して、Pulseaudioを非特権ユーザー(別名、現在のユーザー)として実行できることを説明していますが、自分でオーディオを共有する方法がわかりません。

Pulseの使用方法を誰かが知っているので、VMとオーディオを共有したり、不調なオーディオなしでゲストとホストからのサウンドをミキシングする別のソリューションを提供したりできますか?

3
DarthRevan13

さて、たくさんの試行錯誤の後、私はようやく何の問題もなく正常に動作するようになりました。

以下の手順のいくつかは、それを機能させるために必要ではないかもしれませんが、それらを作成した後、私にとっては機能しました。誰かが答えを修正し、不必要なステップを取り除くことを望むなら、それをしてください。

VNCを使用するときに上記で述べたこと(qemu.confとlibvirt-binの設定を変更し、ユーザーが必要なグループの一部であることを確認する)に加えて、ユーザーがPulsePulse-accessグループ。

ホームディレクトリの.Pulseにある/ etc/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を再起動するだけで、VMの起動時にすべてが完全に機能するはずです。

PS:VMからのオーディオがパチパチ音を立てている場合、VMがホストと同じサンプルレートとビット深度を持っていることを確認してください。

更新:libvirtがドメインのログファイル(/ var/log/libvirt/qemuで見たものから、Pulse configをロードできない可能性があるため、オーディオがまだゲストで問題を抱えている(音が鳴る)ことがあることが明らかになりました/yourdomain.log)。プロファイルを一時的に無効にするか、単に追加することができます:

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

/etc/apparmor.d/abstractions/libvirt-qemuで、以下を使用してapparmorプロファイルをリロードします。

Sudo invoke-rc.d apparmor reload

注:セキュリティ上の理由から、/ etc/libvirt/qemu.confで現在のユーザーとして実行するようにlibvirtを構成しました。

2
DarthRevan13