Как предотвратить сбой Pulseaudio при запуске виртуальной машины из VirtualBox?

Как предотвратить сбой Pulseaudio при запуске виртуальной машины из VirtualBox?

/!\Обновление 2 ниже - Pulseaudio не является виновником, виноват libpam-systemd/!\

Я заметил, что каждый раз, когда я запускаю виртуальную машину из VirtualBox с помощью gksu virtualbox %U, Pulseaudio всегда падает. Затем я сразу получаю эту ошибку от 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.

И это правда, поскольку я даже не могу найти этот файл.

Однако в системном журнале мало что говорится об этом сбое:

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.

Так как там только написано, что Pulseaudio не может быть перезапущен, так как у него /run/user/1000/pulse/есть печально известная ошибка владения root. Которую я просто исправил с помощью:

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

Но, тем не менее, никаких признаков того, что могло привести к краху Pulseaudio, не обнаружено.

Итак, вопрос: что приводит к сбою Pulseaudio и как это предотвратить?

Все было сделано на обновленном Debian 8.7 со стандартной средой рабочего стола KDE.


Обновление 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.

Выполнение modeprobe: snd-pcm-oss

И отключим эти модули:

  • модуль-esound-протокол-unix
  • модуль-приостановка-на-простое

Ошибок почти нет (хотя все еще есть VirtualBox и печально известная папка Pulse, принадлежащая пользователю root), за исключением этой, которую я нашел в 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, выполнив команду "pulseaudio -vvvv":

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, которое его открывает, например, второй экземпляр Pulseaudio. Используйте lsofи , psчтобы узнать, какой именно.

Modprobing snd-pcm-ossна самом деле не помогает: это слой эмуляции OSS в ALSA, он предоставляет /dev/dspи т. д., который является просто псевдонимом /dev/snd/pcmC0D0pс другим API. И если вы включите оба module-alsa-sinkи module-ossв Pulseaudio, Pulseaudio с радостью откроет оба, что, конечно, ерунда. Так что отключите OSS еще раз, это не решение.

По моему опыту, pulseaudio -vvvvэтого достаточно, чтобы дать вам некоторое представление о том, что на самом деле идет не так. Если вы действительно получаете сбой, как при «нарушении сегментации» и т. д., использование straceили запуск его с gdb, если это возможно в версии с отладочными символами, должно снова дать вам представление о том, что на самом деле идет не так.

Подозреваю, что в вашей конфигурации есть какая-то загвоздка, но у меня недостаточно информации, чтобы ее выяснить.

Связанный контент