Pulseaudio : 장치가 시작될 때까지 기다 립니까?


3

을 바탕으로 이 가이드 , 나는 시스템 모드에서 실행되도록 내 라즈베리 파이에 펄스 오디오를 설정합니다. 시스템 서비스 파일의 모습은 다음과 같습니다.

[Unit]
Description=PulseAudio Daemon
After=sound.target
Requires=sound.target

[Install]
WantedBy=default.target

[Service]
Type=notify
ExecStart=/usr/bin/pulseaudio --disallow-exit --no-cpu-limit --daemonize=no --system --realtime --disallow-module-loading --log-target=journal -vvvv

그러나 로그에 따르면 pulseaudio가 시작될 때 udev-detect가 "발견 된 0 개의 카드"를보고합니다. 나는 널 싱크 만 얻습니다. 실행 systemctl --system restart pulseaudio.service하면이 문제가 해결되고 오디오 장치가 올바르게 감지됩니다.

장치가 감지 될 때까지 pulseaudio에 지시 할 수있는 방법이 있습니까?

답변:


6

PulseAudio는 그다지 유용하지 않다고 말합니다. 이미 핫 플러그 ​​된 장치 만 감지 할 수 있습니다. 그러나 장치가 감지 된 후 로드 --disallow-module-loading할 수 없으므로 장치 를 더 이상 사용할 수 없습니다 module-alsa-card. (아마도 module-udev-detect는이 제한에서 제외되어야합니다…)

다음과 같이이 장치에 해당 .device장치 이름 을 나열하여 특정 장치가 준비 될 때까지 pulseaudio.service 시작을 지연 시키 도록 systemd에 지시 할 수 있습니다 After=.

[Unit]
After=sys-devices-pci0000:00-0000:00:1b.0-sound-card0.device

1
아, 얼마나 성가시다-심지어 추측하지 않았다 --disallow-module-loading범인입니다. 그것을 제거하는 것이 가장 쉬운 것 같습니다.
fstanis

빠른 업데이트 :에 사운드 장치 추가 After이미있는 경우 무의미은 sound.target- 모든 사운드 장치가있는 것으로 나타났다 sound.target아래 Wants에 따라 systemd-analyze.
fstanis

아마도 더 중요한 것은, 이렇게 alsa-restore.service해야한다는 것입니다 After.이 방법으로 Alsa를 직접로드 할 수 있으며 처음에는 장치 감지가 필요하지 않습니다.
fstanis

그러나 그들은 아래에 있지 않습니다 Before. 어느 방법, 그건 하지 무엇을 sound.target위한 것입니다 - "모든 사운드 장치가 발견되었다"이런 건 어쨌든 핫 플러그 시스템에서 구현하는 것은 불가능합니다. 대상은 사용자 공간 사운드 구성 요소 를 시작하기위한 것이며 실제로 PulseAudio는 After =가 아니라 Before = sound.target을 가져야합니다.
grawity

흥미롭지 만 (가설적인) 목표는 시작할 때 펄스를로드 --disallow-module-loading하는 것입니다. 다른 것을 오해하지 않는 한 ALSA가 기다려야 할 것 같습니다. 핫 플러그 ​​가능 설정이 작동하지만 드롭해야합니다 --disallow-module-loading.이 경우에는 sound.target아래 Requires에 있어야하며 필요하지 After않을까요?
fstanis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.