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

10

Estou executando o Debian (tecnicamente Raspbian), tentando obter um sistema de comando de voz no estilo Star-Trek. Eu tenho tudo instalado e funcionando, mas no interesse da privacidade e de todo esse jazz, não quero que meu microfone esteja sempre gravando.

Gostaria de saber, existe uma maneira de pesquisar quais processos, se houver, estão acessando o microfone atualmente? A ideia é que eu me faça um pequeno indicador para saber se o microfone está atualmente gravando áudio ou não.

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

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

jmite
fonte

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 de dispositivo, você pode iniciar uma gravação de teste com arecordou tal, em seguida, fazer lsof | grep '/dev/snd'; listará todos os programas e o arquivo de dispositivo associado.

Então você pode espiar 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 inotifywait /dev/snd/pcmC0D0calternar alternativamente, para detectar alterações no estado, em vez de pesquisar constantemente o status do dispositivo.

Patrice Levesque
fonte
4

O campo owner_pidno procfsarquivo statusde 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
CL.
fonte