Webカメラが使用されているかどうかを確認できるコマンドはどれですか?
lsof /dev/video0
では不十分です。メジャー番号81とマイナー番号0のすべてのブロックデバイスを監視する必要があります。
カーネルがモジュールを使用している場合(可能性が高い)、プログラムがWebカメラにアクセスしているかどうかを判断する1つの方法は、モジュールの使用数を調べることです。
$ lsmod | grep uvcvideo
uvcvideo 90112 0
3番目のフィールドの0は、uvcvideo
制御のWebカメラ用に開いているデバイスがないことを示します(lsmod
が実行されたとき)。もちろん、あなたはあなたのウェブカメラを担当しているモジュールを正確に知る必要があります。簡単に確認できますが、Cheeseなどのプログラムを実行しているときに出力の変化を確認できます。
厳密に言えば、正のカウントは、何かがデバイスを開いたことを意味するだけであり、画像がキャプチャされていることを意味するわけではないことに注意してください。
正常なシステムでは、chrootに独自の/dev
を設定していない限り、すべてのデバイスファイルは/dev
の下にあります。 rootだけがデバイスファイルを作成できるため、悪意のあるユーザーが他の場所でデバイスファイルを作成することを心配する必要はありません。
したがって、必要なのは、目的のデバイスと同じデバイスを参照する/dev
の下のファイルを見つけることだけです。
ls -lR /dev |awk '/^c/ && $5 == "81," && $6 == "0"'
これは/dev/video0
のみを表示する可能性があります。通常、デバイスごとに1つのデバイスファイルがあり、それに追加のシンボリックリンクが存在する可能性があります。
したがって、あなたの質問に対する実用的な答えは単純なものです。デバイスファイルが開いているプロセスを確認するだけです。
fuser /dev/video0
アクセスを監視する(つまり、デバイスファイルをいつでも開く可能性があるプロセスをキャッチする)場合は、Linuxのいずれかの ファイルアクセス監視方法 をデバイスファイルで使用します。監視を設定します(およびデバイスファイルがすでに開いているプロセスを確認してください)
inotifywait -m -e open,close /dev/video0 &
sleep 1; fuser /dev/video0 # check for processes that have already opened the device
または、システムログにアクセスを記録する監査ルールを設定します(通常は/var/log/audit/audit.log
)
auditctl -w path=/dev/video0 &
sleep 1; fuser /dev/video0 # check for processes that have already opened the device
あなたが実際に望んでいるのはあなたのウェブカメラを確認することだと仮定します それを望まないときは使用されていません 、最も簡単な解決策は、必要がないときに単にそれを外すことです(外付けの場合)。または、ウェブカメラを覆います(ダクトテープの一部だけで十分です)。
物理ベースのアプローチは、ソフトウェアよりもはるかに安全です。