Pulseaudio: Warten auf Geräte beim Start?

924
fstanis

Basierend auf diesem Handbuch habe ich Pulseaudio auf meinem Raspberry Pi so eingerichtet, dass es im Systemmodus ausgeführt wird. So sieht meine systemd-Servicedatei aus:

[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 

Ich bekomme jedoch keinen Ton - laut den Protokollen meldet udev-detect beim Start von pulseaudio "0 Karten gefunden". und ich bekomme nur die nullsenke. Wenn Sie das systemctl --system restart pulseaudio.serviceProblem beheben, wird mein Audiogerät korrekt erkannt.

Gibt es eine Möglichkeit, pulseaudio anzuweisen, zu warten, bis ein Gerät erkannt wird?

3

1 Antwort auf die Frage

6
grawity

Das sagen, dass PulseAudio nicht sehr nützlich ist. Hotplugged-Geräte lassen sich bereits gut selbst erkennen. Jedoch wegen --disallow-module-loadingist es nicht mehr verwenden, die Geräte, da sie vom Laden verboten sind, module-alsa-cardnachdem ein Gerät erkannt wird. (Modul-udev-detect sollte möglicherweise von dieser Einschränkung ausgenommen werden ...)

Sie können systemd anweisen, den Start des pulseaudio.service zu verzögern, bis ein bestimmtes Gerät bereit ist, indem Sie den entsprechenden Gerätenamen .devicein diesem Gerät aufführen After=, z.

[Unit] After=sys-devices-pci0000:00-0000:00:1b.0-sound-card0.device 
Ah, wie ärgerlich - nicht einmal vermutet - "Disallow-Module-Loading" ist der Täter. Das einfach zu entfernen scheint am einfachsten zu sein. fstanis vor 6 Jahren 1
Schnelles Update: Das Hinzufügen eines Soundgeräts zu "After" ist sinnlos, wenn ich bereits "sound.target" habe. Es stellt sich heraus, dass alle Soundgeräte "sound.target" unter "Wants" gemäß "systemd-analyse" haben. fstanis vor 6 Jahren 0
Wichtiger noch, `alsa-restore.service` sollte in` After` sein - auf diese Weise kann ich alsa direkt laden und ich brauche keine Geräteerkennung an erster Stelle. fstanis vor 6 Jahren 0
Aber sie haben es nicht unter "Vorher", oder? Wie auch immer, das ist ** nicht **, wofür `sound.target` ist - alles wie" Alle Sound-Geräte wurden entdeckt "sind in einem hotpluggable System sowieso nicht zu implementieren. Das Ziel ist für das Starten von _userspace_-Soundkomponenten, und tatsächlich scheint es, als hätte PulseAudio Before = sound.target, nicht als After =. grawity vor 6 Jahren 0
Interessant - aber mein (hypothetisches) Ziel ist es, Puls mit '--disallow-module-loading' laden zu können - es scheint, dass ALSA das ist, worauf ich warten sollte, wenn ich nicht etwas anderes missverstehe? Das hotpluggable-Setup funktioniert, aber ich muss "--disallow-module-loading" ablegen. In diesem Fall denke ich, dass "sound.target" nur unter "Requires" sein muss und nicht in `benötigt wird Nach fstanis vor 6 Jahren 0
Es hat keinen Sinn, auf ALSA "allgemein" zu warten. (Die gesamte Geräteinitialisierung findet im Kernel statt; `alsa-restore.service` lädt lediglich die Lautstärke von der Festplatte auf _already-detect__audiogeräte.) Wenn Sie die` module-alsa-card` von PA manuell konfigurieren, müssen Sie nur noch die Kartengerät selbst. grawity vor 6 Jahren 0
Das Problem hier ist also, dass die Modul-alsa-card einen Geräteparameter erfordert und "load-module module-alsa-card device = 0" bewirkt, dass der Impuls fehlschlägt, und es wird ein Fehler angezeigt, dass das Gerät nicht vorhanden ist. Irgendeine Einsicht? fstanis vor 6 Jahren 0