У меня есть микшерный пульт FireWire, и я написал правило udev, которое вызывает скрипт для настройки всей звуковой цепочки (alsa -> pulseaudio -> jackd -> firewire) сразу после включения пульта.
Теперь я заметил, что при jackd
запуске он через несколько секунд умирает. Я захватил его вывод, и он содержал сообщение об ошибке. Для тестирования я подделал событие udev через udevadm trigger
и все заработало нормально.
Это заставило меня поверить, что просто проходит некоторое время между моментом срабатывания (реального) события udev и моментом, когда устройство действительно готово. Мое поддельное событие udev не страдало от этой проблемы, потому что консоль была включена, а /dev/fw1 присутствовал и был готов все время.
Действительно, добавление sleep 2
в мой скрипт решило проблему, но я не доволен этим решением. Оно выглядит хрупким, потому что при большой нагрузке мне может понадобиться три или четыре секунды. А будучи слишком щедрым, я sleep
нагромождаю много ненужных задержек.
Итак, есть ли способ узнать, когда устройство действительно готово?