Ich habe ein Firewire-Mischpult und habe eine Udev-Regel geschrieben, die ein Skript aufruft, um die gesamte Audiokette (Alsa -> Pulseaudio -> Jackd -> Firewire) einzurichten, sobald das Pult eingeschaltet wird.
Jetzt ist mir aufgefallen, dass jackd
es zwar gestartet wird, aber nach ein paar Sekunden abstürzt. Ich habe die Ausgabe aufgezeichnet und sie enthielt eine Fehlermeldung. Zum Testen habe ich das udev-Ereignis vorgetäuscht udevadm trigger
und alles hat einwandfrei funktioniert.
Dies ließ mich glauben, dass es einfach einige Zeit dauert zwischen dem Zeitpunkt, an dem das (echte) Udev-Ereignis ausgelöst wird, und dem Zeitpunkt, an dem das Gerät tatsächlich bereit ist. Mein gefälschtes Udev-Ereignis hatte dieses Problem nicht, da die Konsole eingeschaltet war und /dev/fw1 die ganze Zeit vorhanden und bereit war.
Das Hinzufügen eines sleep 2
zu meinem Skript hat das Problem zwar gelöst, aber ich bin mit dieser Lösung nicht zufrieden. Sie sieht instabil aus, da ich unter hoher Last möglicherweise drei oder vier Sekunden brauche. Und wenn ich zu großzügig mit sleep
meinem bin, entstehen viele unnötige Latenzen.
Gibt es also eine Möglichkeit, festzustellen, wann ein Gerät tatsächlich bereit ist?