Tengo una consola de mezclas Firewire y escribí una regla udev que llama a un script para configurar toda la cadena de audio (alsa -> pulseaudio -> jackd -> firewire) tan pronto como se enciende la consola.
Ahora noté que, mientras jackd
comienza, muere unos segundos después. Capturé su resultado y contenía un mensaje de error. Para las pruebas, falsifiqué el evento udev udevadm trigger
y todo funcionó bien.
Esto me hizo creer que simplemente pasa algo de tiempo entre el momento en que se activa el evento (real) de udev y el momento en que el dispositivo está realmente listo. Mi evento udev falso no sufrió este problema, porque la consola estaba encendida y /dev/fw1 estuvo presente y listo todo el tiempo.
De hecho, agregar sleep 2
a mi script resolvió el problema, pero no estoy satisfecho con esta solución. Parece frágil, porque bajo una carga pesada podría necesitar tres o cuatro segundos. Y siendo demasiado generoso con sleep
mi acumulación de latencias innecesarias.
Entonces, ¿hay alguna forma de saber cuándo un dispositivo está realmente listo?