Como saber se minha webcam está sendo usada ou não?

14

Qual comando me permite saber se minha webcam está sendo usada ou não?

lsof /dev/video0não é suficiente. Todos os dispositivos de bloco com os números maior e menor 81 e 0 devem ser monitorados.

user123456
fonte
2
+1. TIL lsof(e fuser) por padrão não faz o que você precisa.
Celada
@celada você poderia explicar?
YoungFrog 12/02
Quais são as suas preocupações? O vídeo está assistindo você ou você também está preocupado com o áudio (nesse caso, cobrir a lente não resolveria o seu problema)? Ou é sobre depuração ou até curiosidade? #
Chris H
@YoungFrog Eu estava apenas elogiando o OP nesta questão porque me fez aprender alguma coisa. Inicialmente, presumi que lsof /dev/video0todos os processos que mantinham um descritor de arquivo aberto conectado ao objeto vfs do kernel que /dev/video0se refere, não importa qual caminho do sistema de arquivos tenha sido usado para abri-lo, mas a pergunta do OP deixa claro que isso não é verdade.
Celada

Respostas:

15

Se o seu kernel usa módulos (o que é altamente provável), uma maneira de determinar se um programa está acessando sua webcam é ver a contagem de uso do módulo:

$ lsmod | grep uvcvideo
uvcvideo               90112  0

O 0 no terceiro campo mostra que nada tem nenhum dispositivo aberto para uma uvcvideowebcam controlada (quando lsmodexecutada). Claro que você precisa saber exatamente qual módulo é responsável por sua webcam; é fácil verificar, porém, você verá a saída mudar durante a execução de um programa como o Cheese.

Observe que, estritamente falando, uma contagem positiva significa apenas que algo abriu um dispositivo, não significa que as imagens estão sendo capturadas.

Stephen Kitt
fonte
Uma contagem positiva também não significa apenas que algo tem um dispositivo aberto agora , ao contrário de abri-lo por uma fração de segundo para capturar uma imagem e depois fechá-la? Com esse padrão de uso, você teria que ser incrivelmente sortudo para pegá-lo em flagrante.
um CVn
@ MichaelKjörling é por isso que mencionei "quando lsmodfuncionou". Ele merece expansão, de acordo com o cenário que você fornece (embora, na minha experiência, as latências das câmeras sejam altas o suficiente para abrir o dispositivo, capturar uma imagem e fechar o dispositivo, leva um bom tempo). Porém, olhando para o uso do dispositivo usando fuserou lsofsofre do mesmo problema; uma abordagem mais robusta exigiria conectar as APIs da V4L usando pontos de rastreamento ou algo semelhante.
Stephen Kitt
@ MichaelKjörling De fato. Para capturar esse padrão de uso, você precisa monitorar os acessos aos arquivos do dispositivo, não apenas verificar em um determinado momento.
Gilles 'SO- stop be evil'
7

Supondo que o que você realmente deseja é garantir que sua webcam não seja usada quando você não deseja , a solução mais simples é simplesmente desconectá-la (se externa) quando não for necessária. Ou cobrir a webcam (apenas um pedaço de fita adesiva funcionaria).

As abordagens baseadas na física são muito mais seguras que as do software.

Anjo
fonte
1
A fita não bloqueia o microfone, que pode (mesmo em uma webcam embutida) ser estruturado como parte da câmera e não através de um módulo de som.
22717 Chris H:
Eu recomendaria fortemente contra fita adesiva, pois poderia facilmente deixar um resíduo. Usei fita cirúrgica (disponível em farmácias) porque deixa muito pouco resíduo quando removida, com um pequeno adesivo cobrindo a lente, de um lado para o outro. Dessa forma, não há risco de resíduos de cola na lente. É, reconhecidamente, uma solução que está levemente do lado permanente; você não quer decolar e colocar na fita o tempo todo.
um CVn
@ Chrish que não faz nenhum sentido (ironicamente, o seu melhor SE é inglês ...) O que você quer dizer?
theonlygusti
@theonlygusti eu quis dizer módulo como em um pedaço de hardware; é claro que, neste tópico, seria mais lógico lê-lo como um software de significado, o que não faria muito sentido. A fita não bloqueia o microfone. Um microfone pode fazer parte do hardware da webcam, em vez de ou além de qualquer coisa conectada através da placa de som (um termo que eu estava evitando por causa do hardware SoC). Portanto, para determinar se a webcam está ativada / ativa / espionando, você pode estar preocupado com mais do que apenas a lente. Mas o único sistema linux que tenho aqui é um chromebook (crouton), um pouco limitado.
31717 Chris H:
1
Claro, mas essa não era a questão
Gilles 'pare de ser mau'
7

Em qualquer sistema são, a menos que você tenha configurado chroots com eles próprios /dev, todos os arquivos do dispositivo estão abaixo /dev. Somente o root pode criar arquivos de dispositivo, assim você não precisa se preocupar com usuários mal-intencionados criando arquivos de dispositivo em outro lugar.

Portanto, tudo o que você precisa fazer é localizar os arquivos /devque se referem ao mesmo dispositivo que você está interessado.

ls -lR /dev |awk '/^c/ && $5 == "81," && $6 == "0"'

É provável que isso apareça apenas /dev/video0. Geralmente, há um único arquivo de dispositivo para cada dispositivo e possivelmente há links simbólicos adicionais para ele.

Portanto, a resposta prática à sua pergunta é simples. Basta verificar quais processos têm o arquivo do dispositivo aberto.

fuser /dev/video0

Se você deseja monitorar acessos (por exemplo, pegar processos que podem abrir o arquivo do dispositivo a qualquer momento), use um dos métodos de monitoramento de acesso a arquivos do Linux no (s) arquivo (s) do dispositivo: configure um relógio (e verifique quais processos já possuem o dispositivo arquivo (s) aberto)

inotifywait -m -e open,close /dev/video0 &
sleep 1; fuser /dev/video0   # check for processes that have already opened the device

ou configurar uma regra de auditoria que registrará acessos nos logs do sistema (normalmente /var/log/audit/audit.log)

auditctl -w path=/dev/video0 &
sleep 1; fuser /dev/video0   # check for processes that have already opened the device
Gilles 'SO- parar de ser mau'
fonte
Bom ponto! Mas, ainda sofre com o problema pontual da solução de Angel! (Veja comentários aqui). A solução de software mais robusta é provavelmente colocar o dispositivo na lista negra, udevpara que não haja um arquivo de dispositivo na inicialização; e adicione um arquivo de dispositivo se e quando você planeja usar a câmera ... ou desconectá-la fisicamente.
jpaugh
@jpaugh A questão era encontrar processos usando a webcam, não desativando a webcam.
Gilles 'SO- stop be evil'
Deve ser monitor no nível do Kernel. Um dispositivo pode ser adicionado em qualquer lugar: por exemplomknod /root/video0 b 81 0
user123456 14/02
@ j658063.mvrht.com Mas somente o root pode fazer isso. Se a raiz não faz coisas estúpidas, então você está seguro. Se o root faz coisas estúpidas, você está ferrado de qualquer maneira - o root também pode alterar o kernel para ocultar alguns processos.
Gilles 'SO- stop be evil'