VirtualBox から仮想マシンを起動したときに Pulseaudio がクラッシュするのを防ぐにはどうすればよいですか?

VirtualBox から仮想マシンを起動したときに Pulseaudio がクラッシュするのを防ぐにはどうすればよいですか?

/!\アップデート2以下 - Pulseaudioが原因ではなく、libpam-systemdが原因です/!\

VirtualBox から を使用して仮想マシンを起動するたびに、Pulseaudio が必ずクラッシュすることに気付きましたgksu virtualbox %U。その後すぐに、VirtualBox から次のエラーが表示されます。

No audio devices could be opened. Selecting the NULL audio backend
with the consequence that no sound is audible.

そして

HostAudioNotResponding

また、VMware Workstation では、次のエラーが発生したため、サウンドを取得できないと表示されます。

/dev/dsp が見つかりません。

それは本当です。そのファイルさえ見つけられないのです。

ただし、syslog にはクラッシュについてあまり何も記録されていません。

May 31 18:18:58 HostName pulseaudio[3466]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:18:58 HostName pulseaudio[3466]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:18:58 HostName pulseaudio[3466]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:18:59 HostName pulseaudio[3471]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:18:59 HostName pulseaudio[3471]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:18:59 HostName pulseaudio[3471]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:18:59 HostName pulseaudio[3473]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:18:59 HostName pulseaudio[3473]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:18:59 HostName pulseaudio[3473]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:18:59 HostName pulseaudio[3475]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:18:59 HostName pulseaudio[3475]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:18:59 HostName pulseaudio[3475]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:18:59 HostName pulseaudio[3478]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:18:59 HostName pulseaudio[3478]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:18:59 HostName pulseaudio[3478]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:19:00 HostName pulseaudio[3483]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:19:00 HostName pulseaudio[3483]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:19:00 HostName pulseaudio[3483]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:19:09 HostName pulseaudio[3488]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:19:09 HostName pulseaudio[3488]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:19:09 HostName pulseaudio[3488]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:19:09 HostName pulseaudio[3490]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:19:09 HostName pulseaudio[3490]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:19:09 HostName pulseaudio[3490]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:19:17 HostName pulseaudio[3496]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:19:17 HostName pulseaudio[3496]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:19:17 HostName pulseaudio[3496]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:19:18 HostName pulseaudio[3498]: [autospawn] core-util.c: Failed to create secure directory (/run/user/1000/pulse): Permission denied
May 31 18:19:18 HostName pulseaudio[3498]: [autospawn] lock-autospawn.c: Cannot access autospawn lock.
May 31 18:19:18 HostName pulseaudio[3498]: [pulseaudio] main.c: Failed to acquire autospawn lock
May 31 18:20:28 HostName pulseaudio[1847]: [pulseaudio] protocol-native.c: Denied access to client with invalid authorization data.

/run/user/1000/pulse/ルートによって所有されるという悪名高いバグがあるため、Pulseaudio を再起動できないとだけ書かれています。私は次のように簡単に修正しました:

chown standardUser /run/user/1000/pulse/ && chgrp standardUser /run/user/1000/pulse/

しかし、依然として、Pulseaudio がクラッシュした原因を示す兆候は見当たりません。

質問は、Pulseaudio がクラッシュする原因と、それを防ぐ方法は何ですか?

すべては、標準の KDE デスクトップ環境を備えた更新された Debian 8.7 で実行されました。


アップデート1:

何度も試行錯誤した結果、/etc/pluse/default.pa ファイルを編集することでいくつかの改善が得られました。

これらのPulseaudioモジュールを有効にすることで: - module-alsa-sink - module-oss device="/dev/dsp" sink_name=output source_name=input

これらのオプションを有効にするとmodule-oss、/dev/dsp ファイルが有効になり、VMware Workstation がエラーを発生させるのを防ぎます。

snd-pcm-ossのモードプローブを実行しています

これらのモジュールを無効にします:

  • モジュール-esound-プロトコル-unix
  • アイドル時のモジュール一時停止

バグはほとんどありません (VirtualBox のバグと、ルートが所有する悪名高い pulse フォルダーはまだ残っていますが)。ただし、syslog から取得した次のバグがあります。

May 31 22:09:11 HostName pulseaudio[3376]: Trying resume...
May 31 22:09:11 HostName pulseaudio[3376]: open '/dev/snd/pcmC0D0p' failed (-16)
May 31 22:09:11 HostName pulseaudio[3376]: Error opening PCM device front:0: Device or resource busy
May 31 22:09:11 HostName pulseaudio[3376]: Using generic matrix remapping

そして、これは「pulseaudio -vvvv」を実行して手動で Pulseaudio を起動したときの結果です。

I: [pulseaudio] client.c: Created 1 "Native client (UNIX socket client)"
D: [pulseaudio] protocol-native.c: Protocol version: remote 29, local 29
I: [pulseaudio] protocol-native.c: Got credentials: uid=0 gid=0 success=0
W: [pulseaudio] protocol-native.c: Denied access to client with invalid authorization data.
I: [pulseaudio] client.c: Freed 1 "Native client (UNIX socket client)"
I: [pulseaudio] protocol-native.c: Connection died.

それでも、なぜ「/dev/snd/pcmC0D0p」エラーが発生するのか、なぜそれが権限の問題なのかは理解できません。

syslog と Pulseaudio を超詳細モードで実行する以外に、Pulseaudio で何が起こっているかを追跡する方法がわかりません。

その事故についてさらに詳しい情報を提供する方法はありますか?


アップデート2

アップデート 1 で作成したものに加えて:

/etc/pulse/default.pa が追加されました:

module-native-protocol-unix auth-anonymous=1
module-native-protocol-tcp auth-anonymous=1 auth-ip-acl=127.0.0.1

/etc/pulse/client.conf が追加されました:

default-server = 127.0.0.1

modprobe snd-pcm-ossまだ必要です。

Pulseaudio に関連するものはすべて機能し、vmware も /dev/dsp を取得できないというエラーを報告しませんでした ( でのみ機能しますmodprobe snd-pcm-oss)。Pulseaudio -vvvv または /var/log/syslog/ ではエラーは検出されませんでした。

残念ながら、Pulseaudio は正常に動作していますが、まだ音が出ません。

さらに、Pulseaudio をシステムモードで実行しようとしましたが、状況は改善されず、問題は同じでした。

つまり、主な問題は /run/user/1000/pulse が root によって所有されることであり、実際の問題はあの悪名高いバグであるということです。

少し調べたところ、libpam-systemd が原因であることが分かりました。これは、Debian が Systemd から取得した既知のバグで、Debian Testing (Stretch) および Experimental では報告されていますが、Stable ではまったく報告されていません。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=732209

http://forums.debian.net/viewtopic.php?f=10&t=110035

https://bugs.debian.org/cgi-bin/pkgreport.cgi?dist=unstable;package=libpam-systemd

2 番目のリンクに関しては、「gksu gedit」の問題も確認しており、これにも同じ回避策を適用しました。

少なくとも Debian Stable のメンテナーが libpam-systemd を更新するまでは、この問題は解決されていないようです。

一方、私は彼らにバグレポートを送りました。また、このバグに直面している人たちにも、本当の確認が得られるように、このバグを再度報告することをお勧めします。

さらに、その間にそのバグを修正する方法を知っている人がいたら、どんな解決策でも喜んで聞きます。これには、libpam-systemd を deb として再コンパイルすることも含まれます (Debian の方法で適切に行う方法がわからないため)。どんなヒントでも歓迎します。

答え1

エラーの説明は/dev/snd/pcmC0D0p次のとおりです: これは ALSA デバイスです。Pulseaudio が起動すると、見つかったすべての ALSA デバイスが開きます。ALSA ハードウェア デバイスは共有できず、一度しか開くことができないため、次に誰かがデバイスを開こうとすると、デバイスは「ビジー」エラーを表示します。

したがって、メイン環境で Pulseaudio を実行し、virtualbox をサウンド デバイスを「パススルー」するように構成した場合、メインの Pulseaudio はデバイスを使用するため、virtualbox はデバイスを使用できません。

virtualbux がサウンド デバイスをエミュレートする場合、virtualbox 内でそれを開く別の何か (たとえば 2 番目の Pulseaudio インスタンス) が実行されています。どれかを確認するには、lsofと を使用します。ps

Modprobing はsnd-pcm-oss実際には役に立ちません。これは ALSA の OSS エミュレーション レイヤーで、他の API の/dev/dspエイリアスにすぎないものなどを提供します。また、と の両方を Pulseaudio で有効にすると、Pulseaudio は両方を問題なく開きますが、これはもちろん意味がありません。したがって、OSS を再度無効にしてください。これは解決策ではありません。/dev/snd/pcmC0D0pmodule-alsa-sinkmodule-oss

私の経験では、pulseaudio -vvvvは実際に何が問題なのかをある程度把握するのに十分です。 「セグメンテーション違反」などで実際にクラッシュが発生した場合は、可能であればデバッグ シンボルのあるバージョンで を使用するstraceか で起動するgdbと、実際に何が問題なのかが再度把握できるはずです。

設定のどこかに問題があるのではないかと思いますが、それを判断するのに十分な情報がありません。

関連情報