如何禁用集成网络摄像头并仍然能够使用外部摄像头


13

我正在寻找一种禁用笔记本电脑中集成的网络摄像头的方法。网络摄像头正在使用uvcvideo模块,但我不想将其列入黑名单,因为我所拥有的外部网络摄像头也正在使用它。

有什么方法可以在不触摸模块列表的情况下禁用设备本身?

这是lsusb列出网络摄像头的方式。第一个是集成的(某些应用程序将其标识为BisonCam NB Pro),第二个是外部的Logitech C525:

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

我已经检查过BIOS-无法从那里禁用网络摄像头。此外,我还是想学习如何通过ID禁用设备。

谢谢!


交叉发布在LinuxQuestions上。我最终要做的是通过在找到该特定设备时强制错误来破解uvc_driver.c内核模块。这并不是真正的解决方案,而是一种肮脏的解决方法,但它对我有用。我在这里描述了它:linuxquestions
AtomHeartFather 2012年

Answers:


14

这很简单。艰苦的工作是确定USB设备的路径。我们需要先找到要禁用的设备。我们可以这样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)

将1-6更改为要禁用的设备端口。端口通常是不逻辑的(物理的),但是您可以使用来获得端口映射lsusb -t。一旦您认为有,就可以使用以下方法进行测试:

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

这给了我04025602,为正确的设备(如中所列供应商和产品ID lsusb)。

现在我们找到了,将其关闭很简单:

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

确保其可以正常工作后,使其在每次启动时都加载(例如,在中)/etc/rc.local


1
出色,干净的解决方案。非常感谢您的分享!
AtomHeartFather 2012年

1
此技术在14.10中似乎不再起作用。不存在文件“ bConfigurationValue”,并且如果有人尝试以用户身份或root身份写入文件,则权限将被拒绝。
lysdexia 2015年

我不明白“将1-6更改为您的设备端口”是什么意思。我找不到名为1-6的目录
surajck 2015年

在Ubuntu 14.04中,即使我echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValue使用sudo也不行。该值不在那里,文件不包含任何内容。网络摄像头仍然有效。
苏厄姆'17

好的,我在上添加echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValue行后就可以了/etc/rc.local
苏厄姆'17

6

@surjack:1-6取决于您的端口映射。如果键入lsusb -t,将得到它,然后将其与的输出进行比较lsusb。对我来说,我得到以下输出:

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

现在,只需找到合适的Bus(04在我的情况下,因为Acer, Inc是相机)即可。端口映射显示摄像机位于Bus 04.Port 1。这意味着1-6我必须使用而不是使用4-1。我不是Linux / Ubuntu专家,但这给我的印象是您必须使用Bus-Port并且仅使用数字。如果您想100%确保按照以下说明使用cat命令:

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

并与lsusb进行比较。

就我而言:

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

与lsusb输出相同:5986:0525

现在,您找到了内部网络摄像头。

但是不幸的是,lysdexia是正确的,echo命令不起作用,因为 Permission denied

还有其他解决方案吗?


3
sudo -i再后来echo "0" > ...
sygi

sudo echo "0" > sudo /sys/bus/usb/devices/...
苏厄姆'17

0

如果要在连接外部连接时仅启用外部连接,而在未连接外部连接时启用内部连接,则下面是一个脚本。它基于Wildneuro的答案,但可以根据给定的ID找出您的设备路径。

我之所以使用它,是因为我依赖的某些应用程序似乎没有提供轻松选择您喜欢的相机的方法。您可以使用自己的摄像机ID(来自lsusb)。

代码在这里:https : //gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc


由于链接的内容可以更改,因此请在此处添加链接页面的相关内容。
Chai T. Rex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.