Làm sao để biết webcam của tôi có được sử dụng hay không?


14

Lệnh nào cho phép tôi biết nếu webcam của tôi được sử dụng hay không?

lsof /dev/video0nó không thích đáng. Tất cả các thiết bị khối có số chính và số phụ 81 và 0 phải được giám sát.


2
+1. TIL lsof(và fuser) không mặc định làm những gì bạn cần.
Celada

@celada bạn có thể vui lòng giải thích?
YoungFrog

Mối quan tâm của bạn là gì? Đây có phải là video đang xem bạn không, hay bạn cũng lo lắng về âm thanh (trong trường hợp che ống kính sẽ không giải quyết được vấn đề của bạn)? Hay là về gỡ lỗi hoặc thậm chí tò mò? #
Chris H

@YoungFrog Tôi chỉ khen OP về câu hỏi này vì nó khiến tôi học được điều gì đó. Ban đầu tôi cho rằng lsof /dev/video0sẽ muốn tất cả các quy trình đang giữ một bộ mô tả tệp mở được kết nối với đối tượng vfs kernel /dev/video0tham chiếu đến, bất kể đường dẫn hệ thống tệp nào đã được sử dụng để mở nó, nhưng câu hỏi của OP cho thấy rõ điều này không đúng.
Celada

Câu trả lời:


14

Nếu hạt nhân của bạn sử dụng các mô-đun (rất có khả năng), một cách để xác định xem chương trình có truy cập webcam của bạn hay không là xem số lượng sử dụng của mô-đun:

$ lsmod | grep uvcvideo
uvcvideo               90112  0

Số 0 trong trường thứ ba cho thấy rằng không có thiết bị nào mở cho uvcvideowebcam được điều khiển (khi lsmodchạy). Tất nhiên bạn cần biết chính xác mô-đun nào chịu trách nhiệm cho webcam của bạn; thật dễ dàng để kiểm tra, bạn sẽ thấy thay đổi đầu ra trong khi chạy một chương trình như Cheese.

Lưu ý rằng, nói đúng ra, số dương chỉ có nghĩa là một cái gì đó đã mở một thiết bị, điều đó không có nghĩa là hình ảnh đang được chụp.


Không phải số đếm tích cực cũng chỉ có nghĩa là một cái gì đó có một thiết bị như vậy đang mở , trái ngược với việc có thể mở nó trong một phần của giây để chụp ảnh và sau đó đóng nó? Với mô hình sử dụng như vậy, bạn phải cực kỳ may mắn khi nắm bắt được hành động đó.
một CVn

@ MichaelKjorling đó là lý do tại sao tôi đề cập đến "khi lsmodchạy". Nó xứng đáng được mở rộng theo kịch bản bạn đưa ra (mặc dù theo kinh nghiệm của tôi, độ trễ của máy ảnh đủ cao để mở thiết bị, chụp ảnh và đóng thiết bị mất khá nhiều thời gian). Nhìn vào việc sử dụng thiết bị sử dụng fuserhoặc lsofbị vấn đề tương tự mặc dù; một cách tiếp cận mạnh mẽ hơn sẽ yêu cầu móc các API V4L bằng cách sử dụng tracepoint hoặc một cái gì đó tương tự.
Stephen Kitt

@ MichaelKjorling Thật vậy. Để nắm bắt mô hình sử dụng này, bạn phải theo dõi truy cập vào (các) tệp thiết bị, không chỉ kiểm tra tại một thời điểm.
Gilles 'SO- ngừng trở nên xấu xa'

7

Giả sử rằng những gì bạn thực sự muốn là đảm bảo webcam của bạn sẽ không được sử dụng khi bạn không muốn , giải pháp đơn giản nhất là chỉ cần ngắt kết nối nó (nếu bên ngoài) khi không cần thiết. Hoặc che webcam (chỉ cần một đoạn băng keo sẽ hoạt động).

Phương pháp tiếp cận dựa trên vật lý an toàn hơn nhiều so với phương pháp phần mềm.


1
Băng không chặn micrô, có thể (ngay cả trên webcam tích hợp) có cấu trúc như một phần của máy ảnh thay vì thông qua mô-đun âm thanh.
Chris H

Tôi sẽ khuyên mạnh mẽ chống lại băng keo vì nó có thể dễ dàng để lại dư lượng. Tôi đã sử dụng băng phẫu thuật (có sẵn từ các cửa hàng thuốc) vì nó để lại rất ít cặn khi tháo ra, với một miếng dán nhỏ che ống kính, mặt dính sang mặt dính. Bằng cách đó, không có nguy cơ dư lượng keo trên ống kính. Đó là, một thừa nhận, một giải pháp hơi ở phía vĩnh viễn; bạn không muốn cởi ra và dán lại băng mọi lúc.
một CVn

@ChrisH không có nghĩa gì cả (trớ trêu thay, SE hàng đầu của bạn là tiếng Anh ...) Ý bạn là gì?
theonlygusti

@theonlygusti Ý tôi là mô-đun như trong một phần cứng; Tất nhiên với chủ đề này, sẽ hợp lý hơn nếu đọc nó dưới dạng phần mềm, điều này sẽ không có ý nghĩa nhiều. Băng không chặn micro. Một micrô có thể là một phần của phần cứng webcam, thay vì hoặc ngoài bất kỳ thứ gì được kết nối qua card âm thanh (thuật ngữ tôi đang tránh vì phần cứng SoC). Vì vậy, để xác định xem webcam có được bật / kích hoạt / gián điệp hay không, bạn có thể quan tâm nhiều hơn là chỉ ống kính. Nhưng hệ thống linux duy nhất tôi có ở đây là một chromebook (crouton) nên hơi hạn chế.
Chris H

1
Chắc chắn, nhưng đó không phải là câu hỏi
Gilles 'SO- ngừng trở nên xấu xa'

7

Trên bất kỳ hệ thống lành mạnh nào, trừ khi bạn đã thiết lập chroots bằng chính chúng /dev, tất cả các tệp thiết bị đều nằm dưới /dev. Chỉ root mới có thể tạo tệp thiết bị, vì vậy bạn không cần lo lắng về việc người dùng độc hại tạo tệp thiết bị ở nơi khác.

Vì vậy, tất cả những gì bạn cần làm là xác định vị trí các tệp trong /devđó đề cập đến cùng một thiết bị như thiết bị bạn quan tâm.

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

Có khả năng điều này sẽ chỉ hiển thị /dev/video0. Thông thường, có một tệp thiết bị duy nhất cho mỗi thiết bị và có thể có các liên kết tượng trưng bổ sung cho nó.

Do đó, câu trả lời thực tế cho câu hỏi của bạn là đơn giản. Chỉ cần kiểm tra những quá trình có tập tin thiết bị mở.

fuser /dev/video0

Nếu bạn muốn giám sát truy cập (tức là bắt các quy trình có thể mở tệp thiết bị bất cứ lúc nào), hãy sử dụng một trong các phương pháp giám sát truy cập tệp của Linux trên (các) tệp thiết bị: thiết lập đồng hồ (và kiểm tra xem các quy trình nào đã có thiết bị (các) tập tin mở)

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

hoặc thiết lập quy tắc kiểm toán sẽ ghi nhật ký truy cập trong nhật ký hệ thống (thông thường /var/log/audit/audit.log)

auditctl -w path=/dev/video0 &
sleep 1; fuser /dev/video0   # check for processes that have already opened the device

Điểm tốt! Nhưng, nó vẫn phải chịu vấn đề thời gian về giải pháp của Angel! (Xem bình luận ở đó). Giải pháp phần mềm mạnh mẽ nhất có lẽ là đưa vào danh sách đen thiết bị udevđó để nó không nhận được tệp thiết bị khi khởi động; và sau đó thêm tệp thiết bị nếu và khi bạn định sử dụng máy ảnh ... hoặc rút phích cắm vật lý.
jpaugh

@jpaugh Câu hỏi là tìm các quy trình sử dụng webcam, không vô hiệu hóa webcam.
Gilles 'SO- ngừng trở nên xấu xa'

Nó sẽ được theo dõi ở cấp Kernel. Một thiết bị có thể được thêm vào bất cứ nơi nào: ví dụmknod /root/video0 b 81 0
user123456

@ j658063.mvrht.com Nhưng chỉ root mới có thể làm điều đó. Nếu root không làm những điều ngu ngốc thì bạn an toàn. Nếu root làm những điều ngu ngốc thì dù sao bạn cũng bị lừa - root cũng có thể thay đổi kernel để ẩn một số tiến trình.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.