如何禁用集成网络摄像头,仍然可以使用外部网络摄像头

我正在寻找一种方法来禁用集成到我的笔记本电脑中的网络摄像头。 网络摄像头正在使用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禁用设备。

谢谢!

这很简单。 艰苦的工作是弄清楚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

@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 

现在只需在我的情况下找到合适的公共汽车,因为Acer, Inc就是相机。 端口映射显示摄像机位于Bus 04.Port 1 。 这意味着我不必使用1-6而是使用4-1 。 我不是Linux / Ubuntu专家,但这让我觉得你必须使用Bus-Port并简单地使用这些数字。 如果您想100%确定使用cat命令,如下所述:

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

并将其与lsusb进行比较。

就我而言:

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

这与lsusb输出完全相同: 5986:0525

现在你找到了你的内部网络摄像头。

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

还有其他解决方案吗?

如果你想在连接时只启用外部设备,但是如果没有连接外部设备则启用内部设备,这里有一个脚本。 它基于Wildneuro的答案,但可以根据ID确定设备路径。

我使用它是因为我依赖的某些应用程序似乎无法轻松选择您喜欢的相机。 您可以使用自己的相机ID轻松自定义(来自lsusb )。

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