So erkennen Sie, wann ein Gerät bereit ist

So erkennen Sie, wann ein Gerät bereit ist

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 jackdes 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 triggerund 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 2zu 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 sleepmeinem bin, entstehen viele unnötige Latenzen.

Gibt es also eine Möglichkeit, festzustellen, wann ein Gerät tatsächlich bereit ist?

verwandte Informationen