Могу ли я узнать, какие процессы (если таковые имеются) в настоящее время обращаются к микрофону?

10

Я использую Debian (технически Raspbian), пытаюсь получить систему голосовых команд в стиле Star-Trek. У меня это в основном работает и работает, но в интересах конфиденциальности и всего этого джаза, я не хочу, чтобы мой микрофон постоянно записывал.

Мне интересно, есть ли способ опроса, какие процессы, если таковые имеются, в настоящее время обращаются к микрофону? Идея в том, что я бы сделал небольшой индикатор, чтобы сказать, записывает ли микрофон звук в данный момент или нет.

Моя конечная цель - включать и выключать микрофон с помощью пульта дистанционного управления телевизора и иметь светодиодный индикатор, если он включен или выключен. У меня все аппаратное обеспечение работает, мне просто нужен конец программного обеспечения.

Я считаю, что сейчас я настроен на чистую ALSA, а не на PulseAudio, хотя могу ошибаться.

jmite
источник

Ответы:

6

Сначала определите файл вашего микрофона; должно быть что-то похожее на /dev/snd/pcmC0D0c. Чтобы помочь вам найти файл устройства, вы можете начать тестовую запись с того arecordили иного , а затем сделать lsof | grep '/dev/snd'; в нем будут перечислены все программы и связанные с ними файлы устройств.

Тогда вы можете посмотреть использование микрофона с помощью fuser /dev/snd/pcmC0D0c. Он вернет PID программы, обращающейся к устройству, если указанное устройство открыто.

Вы можете inotifywait /dev/snd/pcmC0D0cпоочередно включить цикл , чтобы обнаруживать изменения в состоянии, а не постоянно опрашивать устройство на предмет состояния.

Патрис Левеск
источник
4

Поле owner_pidв procfsфайле statusустройства PCM показывает, какая программа открыла его:

$ grep owner_pid /proc/asound/card*/pcm*/sub*/status
/proc/asound/card2/pcm0p/sub0/status:owner_pid   : 1803
$ ps -p 1803
  PID TTY          TIME CMD
 1803 pts/0    00:00:00 aplay
CL.
источник