Posso consultar quais processos (se houver algum) estão atualmente acessando o microfone?

9

Eu estou executando Debian (tecnicamente Raspbian), tentando obter um sistema de comando de voz estilo Star Trek. Eu tenho isso na maior parte do tempo funcionando, mas no interesse da privacidade e de todo esse jazz, eu não quero que meu microfone sempre grave.

Eu estou querendo saber, existe uma maneira de pesquisar quais processos, se houver, estão atualmente acessando o microfone? A ideia é que eu fizesse um pequeno indicador para saber se o microfone estava atualmente gravando áudio ou não.

Meu objetivo final é ligar e desligar o microfone usando um controle remoto de TV e ter um indicador de LED para ligar ou desligar. Eu tenho todas as coisas de hardware funcionando, eu só preciso do software agora.

Acredito que, no momento, estou configurado em ALSA puro, ou seja, não no PulseAudio, embora possa estar errado.

    
por jmite 15.06.2013 / 06:47

2 respostas

6

Primeiro, identifique o arquivo do seu dispositivo de microfone; deve ser algo semelhante a /dev/snd/pcmC0D0c . Para ajudá-lo a encontrar o arquivo do dispositivo, você pode iniciar uma gravação de teste com arecord ou algo assim e, em seguida, fazer lsof | grep '/dev/snd' ; ele listará todos os programas e seus arquivos de dispositivos associados.

Depois, você pode espreitar o uso do microfone usando fuser /dev/snd/pcmC0D0c . Ele retornará o PID do programa acessando o dispositivo, se o dispositivo estiver aberto.

Você pode preferir fazer um loop em inotifywait /dev/snd/pcmC0D0c alternadamente, para detectar alterações no estado em vez de pesquisar constantemente o status do dispositivo.

    
por 15.06.2013 / 07:58
3

O campo owner_pid no procfs file status de um dispositivo PCM mostra qual programa o abriu:

$ 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
    
por 15.06.2013 / 09:20