我正在寻找一种方法来禁用笔记本电脑中集成的网络摄像头。网络摄像头正在使用 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 禁用设备。
谢谢!
答案1
这很简单。困难的是找出 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}
这为我提供了正确设备的0402
和5602
、供应商和产品 ID(如 所列lsusb
)。
现在我们找到了它,关闭它很简单:
echo "0" > /sys/bus/usb/devices/1-6/bConfigurationValue
确保其按预期工作后,使其在每次启动时加载(例如,在/etc/rc.local
.)
答案2
@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
现在只需找到正确的总线,04
在我的情况下是,因为是Acer, Inc
相机。端口映射显示相机位于。这意味着我必须Bus 04.Port 1
使用而不是使用。我不是 Linux/Ubuntu 专家,但这给我的印象是您必须使用并简单地使用数字。如果您想 100% 确定,请使用如下所述命令:1-6
4-1
Bus-Port
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
如果您希望在连接外部设备时仅启用外部设备,而在未连接外部设备时启用内部设备,这里有一个脚本。它基于 Wildneuro 的答案,但可以根据 ID 找出设备路径。
我使用它是因为一些我依赖的应用程序似乎无法提供轻松选择您喜欢的相机的方法。您可以使用自己的相机 ID 轻松自定义(来自lsusb
)。
代码在这里:https://gist.github.com/shimon/12cd1080fb8669549aadc2b5408922bc