/!\Обновление 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
, если это возможно в версии с отладочными символами, должно снова дать вам представление о том, что на самом деле идет не так.
Подозреваю, что в вашей конфигурации есть какая-то загвоздка, но у меня недостаточно информации, чтобы ее выяснить.