VirtualBox에서 가상 머신을 시작할 때 Pulseaudio가 충돌하는 것을 방지하려면 어떻게 해야 합니까?

VirtualBox에서 가상 머신을 시작할 때 Pulseaudio가 충돌하는 것을 방지하려면 어떻게 해야 합니까?

/!\아래 업데이트 2 - Pulseaudio는 범인이 아니며 libpam-systemd는/!\

VirtualBox를 사용하여 가상 머신을 시작할 때마다 gksu virtualbox %UPulseaudio가 계속 충돌하는 것을 발견했습니다. 그런 다음 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.

/run/user/1000/pulse/왜냐하면 Pulseaudio 에는 루트 소유의 악명 높은 버그가 있기 때문에 다시 시작할 수 없다고 나와 있기 때문입니다 . 나는 간단히 고쳤습니다:

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" sing_name=output source_name=input

이 옵션을 사용하면 module-oss/dev/dsp 파일이 활성화되고 VMware Workstation에서 오류가 발생하지 않습니다.

패턴 감지 수행: snd-pcm-oss

다음 모듈을 비활성화합니다.

  • 모듈 esound-프로토콜-유닉스
  • 유휴 상태일 때 모듈이 중단됨

오류가 거의 없습니다(VirtualBox와 루트가 소유한 악명 높은 펄스 폴더는 여전히 있지만). 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에서 무슨 일이 일어나고 있는지 추적하고 Hyperverbose 모드에서 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가 루트 소유라는 것입니다. 이는 실제 문제가 악명 높은 오류라는 것을 의미합니다.

몇 가지 조사 끝에 libpam-systemd가 이 문제의 원인이라는 것을 알게 되었습니다. 이것은 데비안이 Systemd에서 가져오는 알려진 버그이며 데비안 테스트(확장) 및 실험에서 보고되었지만 전혀 안정적이지 않습니다.

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

두 번째 링크에 관해서도 "gksu gedit" 문제를 확인하고 동일한 해결 방법을 적용했습니다.

이 문제는 적어도 Debian Stable 관리자가 libpam-systemd를 업데이트할 때까지는 해결되지 않은 것으로 보입니다.

반면에 나는 그들에게 버그 보고서를 보냈습니다. 또한 이 오류가 발생한 사람들은 실제 확인을 받을 수 있도록 이 버그를 다시 보고할 것을 권장합니다.

또한 그동안 이 오류를 해결하는 방법을 아시는 분 계시다면 해결책을 알려드리겠습니다. 여기에는 libpam-systemd를 deb로 다시 컴파일하는 것도 포함됩니다(저는 데비안 방식으로 이 작업을 올바르게 수행하는 방법을 모르기 때문에). 어떤 팁이라도 환영합니다.

답변1

/dev/snd/pcmC0D0p오류는 ALSA 장치입니다. Pulseaudio가 시작되면 찾을 수 있는 모든 ALSA 장치가 열립니다. ALSA 하드웨어 장치는 공유될 수 없고 한 번만 열 수 있으므로 다음에 누군가 장치를 열려고 하면 장치에 "사용 중" 오류가 표시됩니다.

따라서 기본 환경에서 Pulseaudio를 실행하고 사운드 장치만 "통과"하도록 virtualbox를 구성한 경우 기본 Pulseaudio는 해당 장치를 사용하므로 virtualbox는 사용할 수 없습니다.

virtualbux가 사운드 장치를 에뮬레이트한 경우 이를 열기 위해 Pulseaudio의 두 번째 인스턴스와 같이 virtualbox에서 실행되는 다른 항목이 있어야 합니다. 그것을 사용 lsof하고 ps그것이 어느 것인지 알아내십시오.

Modprobing은 실제로 도움이 되지 않습니다. 이는 ALSA의 OSS 모의 계층으로, 다양한 API에 대한 별칭 snd-pcm-oss일 뿐입니다 . 그리고 Pulseaudio에서 및 를 모두 활성화하면 Pulseaudio는 두 가지를 모두 켤 것입니다. 물론 이는 말도 안되는 일입니다. 따라서 다시 OSS 기능을 비활성화하는 것은 해결책이 아닙니다./dev/dsp/dev/snd/pcmC0D0pmodule-alsa-sinkmodule-oss

내 경험상 pulseaudio -vvvv이것은 실제로 무엇이 잘못되고 있는지에 대한 아이디어를 제공하기에 충분합니다. "세그먼트 위반" 등과 같은 충돌이 발생하는 경우 가능하면 디버그 기호가 있는 버전에서 이를 사용하거나 실행하면 strace실제로 무엇이 잘못되었는지 다시 알 수 있습니다.gdb

어딘가에 구성에 문제가 있는 것 같지만 이를 수정할 정보가 충분하지 않습니다.

관련 정보