Cách tắt webcam tích hợp mà vẫn có thể sử dụng webcam ngoài


13

Tôi đang tìm cách vô hiệu hóa webcam được tích hợp vào máy tính xách tay của tôi. Webcam đang sử dụng mô-đun uvcvideo nhưng tôi không muốn đưa vào danh sách đen vì nó cũng đang được sử dụng bởi một webcam bên ngoài mà tôi có.

Có cách nào để vô hiệu hóa chính thiết bị mà không cần chạm vào danh sách mô-đun không?

Đây là cách webcam được liệt kê bởi lsusb. Ứng dụng đầu tiên là một ứng dụng tích hợp (Nó được xác định bởi một số ứng dụng là BisonCam NB Pro), ứng dụng thứ hai là Logitech C525 bên ngoài:

Bus 002 Device 004: ID 5986:0361 Acer, Inc 
Bus 003 Device 002: ID 046d:0826 Logitech, Inc. 

Tôi đã kiểm tra BIOS - không có cách nào để vô hiệu hóa webcam từ đó. Ngoài ra, tôi rất thích tìm hiểu cách vô hiệu hóa thiết bị bằng ID.

Cảm ơn!


Crossposted này trên LinuxQuestions. Điều cuối cùng tôi đã làm là hack mô-đun hạt nhân uvc_do.c bằng cách buộc một lỗi khi thiết bị cụ thể này được tìm thấy. Đây không thực sự là một giải pháp mà là một cách giải quyết bẩn thỉu, nhưng nó hiệu quả với tôi. Tôi đã mô tả nó ở đây: linuxquestions
AtomHeartFather

Câu trả lời:


14

Nó khá đơn giản. Công việc khó khăn là tìm ra đường dẫn đến thiết bị USB. Chúng ta cần bắt đầu bằng cách tìm thiết bị nào chúng ta muốn tắt. Chúng ta có thể làm điều này với lsusb:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0402:5602 ALi Corp. M5602 Video Camera Controller
Bus 001 Device 003: ID 045e:0723 Microsoft Corp. LifeCam VX-7000 (UVC-compliant)

Thay đổi 1-6 để các cổng thiết bị của bạn bị vô hiệu hóa. Cổng thường không logic (đó là vật lý) nhưng bạn có thể có được ánh xạ cổng lsusb -t. Khi bạn nghĩ rằng bạn có nó, bạn có thể kiểm tra nó với:

cat /sys/bus/usb/devices/1-6/id{Vendor,Product} 

Điều này mang lại cho tôi 04025602, ID nhà cung cấp và sản phẩm cho đúng thiết bị (như được liệt kê tronglsusb ).

Bây giờ chúng tôi đã tìm thấy nó, tắt nó đi là đơn giản:

echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValue

Sau khi chắc chắn rằng nó hoạt động như mong muốn, hãy làm cho nó tải mỗi lần khởi động (ví dụ: trong /etc/rc.local.)


1
Giải pháp rực rỡ, sạch sẽ. Cảm ơn bạn rất nhiều vì đã chia sẻ điều đó!
AtomHeartFather

1
Kỹ thuật này không còn xuất hiện để hoạt động trong 14.10. Không có tệp "bConfigurationValue" nào tồn tại và nếu một người cố gắng viết một tệp dưới dạng người dùng hoặc root, quyền sẽ bị từ chối.
lysdexia

Tôi không hiểu 'thay đổi 1-6 thành cổng thiết bị của bạn' nghĩa là gì. Tôi không thể tìm thấy một thư mục có tên 1-6
surajck

Trong Ubuntu 14.04, ngay cả khi tôi làm echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValuevới sudo, điều này không hoạt động. Giá trị không ở đó, tập tin không chứa gì. Các webcam vẫn hoạt động.
soham

Được rồi, nó hoạt động sau khi tôi thêm echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValuedòng vào /etc/rc.local.
soham

6

@surjack: 1-6phụ thuộc vào bản đồ cổng của bạn. Nếu bạn gõ lsusb -tbạn sẽ nhận được nó và sau đó so sánh nó với đầu ra của lsusb. Đối với tôi, tôi nhận được các kết quả đầu ra sau đây:

lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 5986:0525 Acer, Inc 
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 012: ID 413c:2107 Dell Computer Corp. 

lsusb -t
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Video, Driver=uvcvideo, 5000M
    |__ Port 1: Dev 2, If 1, Class=Video, Driver=uvcvideo, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
    |__ Port 3: Dev 9, If 0, Class=Vendor Specific Class, Driver=hdm_usb, 480M
    |__ Port 4: Dev 10, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 3: Dev 11, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 4: Dev 12, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
        |__ Port 3: Dev 4, If 0, Class=Wireless, Driver=btusb, 12M
        |__ Port 3: Dev 4, If 1, Class=Wireless, Driver=btusb, 12M

Bây giờ chỉ cần tìm đúng Bus 04trong trường hợp của tôi vìAcer, Inc là máy ảnh. Bản đồ cổng cho thấy camera được đặt tại Bus 04.Port 1. Điều này có nghĩa là thay vì sử dụng 1-6tôi phải sử dụng 4-1. Tôi không phải là chuyên gia về Linux / Ubuntu nhưng điều này mang lại cho tôi ấn tượng rằng bạn phải sử dụng Bus-Portvà chỉ đơn giản là sử dụng các con số. Nếu bạn muốn chắc chắn 100%, hãy sử dụng catlệnh như được mô tả:

cat /sys/bus/usb/devices/<Bus>-<Port>/id{Vendor,Product} 

và so sánh nó với lsusb.

Trong trường hợp của tôi:

cat /sys/bus/usb/devices/4-1/id{Vendor,Product}
5986
0525

đó là giống hệt với đầu ra lsusb : 5986:0525.

Bây giờ bạn đã tìm thấy webcam nội bộ của bạn.

Nhưng thật không may lysdexia là đúng và lệnh echo không hoạt động bởi vì Permission denied.

Có một giải pháp khác có sẵn?


3
sudo -ivà sau đó echo "0" > ....
sygi

Hoặcsudo echo "0" > sudo /sys/bus/usb/devices/...
soham

0

Nếu bạn muốn chỉ bật cái bên ngoài khi được đính kèm, nhưng phải bật cái bên trong nếu cái bên ngoài không được đính kèm, đây là tập lệnh cho điều đó. Nó dựa trên câu trả lời của Wildneuro, nhưng có thể tìm ra đường dẫn thiết bị cho bạn đã cung cấp ID.

Tôi sử dụng nó vì một số ứng dụng tôi phụ thuộc dường như không cung cấp cách dễ dàng chọn máy ảnh ưa thích của bạn. Bạn có thể dễ dàng tùy chỉnh với ID máy ảnh của riêng bạn (từ lsusb).

Mã tại đây: https://gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc


Vì nội dung của các liên kết có thể thay đổi, vui lòng thêm nội dung có liên quan của trang được liên kết ở đây.
Chai T. Rex
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.