ウェブカメラが使用されているかどうかを確認できるコマンドはどれですか?
lsof /dev/video0
十分ではありません。メジャー番号とマイナー番号が81と0のすべてのブロックデバイスを監視する必要があります。
lsof /dev/video0
、/dev/video0
参照するカーネルvfsオブジェクトに接続されたオープンファイル記述子を保持しているすべてのプロセスが必要だと思っていましたが、OPの質問はこれが真実ではないことを明らかにしています。
ウェブカメラが使用されているかどうかを確認できるコマンドはどれですか?
lsof /dev/video0
十分ではありません。メジャー番号とマイナー番号が81と0のすべてのブロックデバイスを監視する必要があります。
lsof /dev/video0
、/dev/video0
参照するカーネルvfsオブジェクトに接続されたオープンファイル記述子を保持しているすべてのプロセスが必要だと思っていましたが、OPの質問はこれが真実ではないことを明らかにしています。
回答:
カーネルがモジュールを使用している場合(可能性が高い)、プログラムがWebカメラにアクセスしているかどうかを判断する1つの方法は、モジュールの使用数を調べることです。
$ lsmod | grep uvcvideo
uvcvideo 90112 0
3番目のフィールドの0は、-制御されたuvcvideo
Webカメラ(実行時lsmod
)に対して開いているデバイスがないことを示します。もちろん、どのモジュールがウェブカメラの原因であるかを正確に知る必要があります。ただし、チェックするのは簡単です。チーズなどのプログラムを実行しているときに出力が変化するのがわかります。
厳密に言えば、正の数はデバイスが開かれたことを意味するだけであり、画像がキャプチャされていることを意味するものではないことに注意してください。
lsmod
走ったとき」と言った。あなたが与えたシナリオを考えると、それは拡張に値します(私の経験では、カメラのレイテンシはデバイスを開き、画像をキャプチャし、デバイスを閉じるのにかなり時間がかかります)。ただし、同じ問題を使用して、fuser
またはlsof
同じ問題に悩まされているデバイスの使用状況を確認します。より堅牢なアプローチでは、トレースポイントなどを使用してV4L APIをフックする必要があります。
あなたが実際に望んでいるのは、望んでいないときにあなたのウェブカメラが使用されていないことを確認することであると仮定すると、最も簡単な解決策は不要なときに(外部の場合)単純に切断することです。または、ウェブカメラを覆う(ダクトテープが1枚あれば機能します)。
物理ベースのアプローチは、ソフトウェアのアプローチよりもはるかに安全です。
健全なシステムでは、独自のchrootsをセットアップしていない限り/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
udev
起動時にデバイスファイルを取得しないようにそのデバイスをブラックリストに登録することです。そして、カメラを使用する予定の場合にデバイスファイルを追加します...または物理的にプラグを抜きます。
mknod /root/video0 b 81 0
lsof
(およびfuser
)は、デフォルトでは必要なことを行いません。