几年前,我在 Eee Pc 上安装了一些 Ubuntu,但网络摄像头无法工作。但这并没有真正困扰我,因为我反正也不用它。最近,我更新到了 Ubuntu 17.04(即格式化 Ubuntu 分区并全新安装)。在排除其他问题时,我访问/var/log/Xorg.0.log
并注意到以下部分:
[ 775.333] (II) config/udev: Adding input device USB2.0 UVC VGA WebCam (/dev/input/event8)
[ 775.334] (**) USB2.0 UVC VGA WebCam: Applying InputClass "libinput keyboard catchall"
[ 775.334] (II) Using input driver 'libinput' for 'USB2.0 UVC VGA WebCam'
[ 775.334] (**) USB2.0 UVC VGA WebCam: always reports core events
[ 775.334] (**) Option "Device" "/dev/input/event8"
[ 775.334] (**) Option "_source" "server/udev"
[ 775.336] (II) input device 'USB2.0 UVC VGA WebCam', /dev/input/event8 is tagged by udev as: Keyboard
[ 775.336] (II) input device 'USB2.0 UVC VGA WebCam', /dev/input/event8 is a keyboard
[ 775.368] (**) Option "config_info" "udev:/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-6/1-6:1.0/input/input9/event8"
[ 775.368] (II) XINPUT: Adding extended input device "USB2.0 UVC VGA WebCam" (type: KEYBOARD, id 11)
[ 775.368] (**) Option "xkb_model" "pc105"
[ 775.368] (**) Option "xkb_layout" "de"
[ 775.371] (II) input device 'USB2.0 UVC VGA WebCam', /dev/input/event8 is tagged by udev as: Keyboard
[ 775.371] (II) input device 'USB2.0 UVC VGA WebCam', /dev/input/event8 is a keyboard
[ 775.374] (II) config/udev: Adding input device AT Translated Set 2 keyboard (/dev/input/event4)
[ 775.374] (**) AT Translated Set 2 keyboard: Applying InputClass "libinput keyboard catchall"
[ 775.374] (II) Using input driver 'libinput' for 'AT Translated Set 2 keyboard'
[ 775.374] (**) AT Translated Set 2 keyboard: always reports core events
我不知道为什么 Xorg 甚至处理 USB/输入设备(这不是展示服务器?),但主要问题是:
我怎样才能阻止 Ubuntu/Xorg 尝试将我可怜的网络摄像头用作键盘,并开始将其用作真正的网络摄像头?
答案1
可以设置规则udev
来阻止 USB 设备加载驱动程序,这应该具有禁用设备的一部分但保持其他功能正常运行的预期效果。
您可以按照以下方式操作:
打开终端(如果尚未打开)
通过以下方式确定制造商和设备 ID
lsusb
(对于 PCI 设备,您可以使用lspci
):sudo lsusb
您可能会看到类似这样的输出:
... Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:8008 Intel Corp. Bus 001 Device 003: ID 04f2:b448 TOSHIBA Web Camera - HD: TOSHIB ...
记下制造商 ID(例如
04f2
)和产品 ID(例如b448
)。这些在后面会很重要。通过以下方式确定设备所需的驱动程序
udevadm
:udevadm info -a /dev/input/by-id/*
笔记:您需要仔细检查设备
input
以找到您的相机。或者,如果您查看 的内容/dev/input/by-id
,您可能会发现您的相机。然后您可以发出更具体的命令,例如udevadm info -a /dev/input/by-id/*Camera*
。您可能会看到大量以如下内容开头的信息:
looking at parent device '/devices/pci0000:00/0000:00:14.0/usb3': KERNELS=="usb3" SUBSYSTEMS=="usb" DRIVERS=="usb"
您需要注意
DRIVERS
USB 设备,即您的相机。其中一行可能会显示uvcvideo
,另一行可能会显示libinput
,这是不正确的。创建
udev
规则文件:sudo {text editor of choice} /etc/udev/rules.d/90-blacklist-webcam-keyboard.rules
笔记:一定要用
{text editor of choice}
你选择的文本编辑器替换。我以前会把它放在vi
那里,因为像我这样的宅男会用它。然而,很多帖子都会被编辑成其他新奇的东西来替换。TLDR;使用适合你的东西vi
。gedit
在该文件中,以如下格式记录驱动程序、制造商 ID 和产品 ID:
# Not a keyboard! SUBSYSTEM=="usb", DRIVER=="libinput", ATTRS{idVendor}=="04f2", ATTRS{idProduct}=="b448", ATTR{authorized}="0"
重启。
笔记:如果相机是可以断开连接并重新连接的 USB 设备,则只需使用 重新加载规则
udev
并sudo udevadm control --reload-rules
重新连接设备即可。但是,由于它是内置的,因此重新启动是最简单的选择,无需使用复杂的硬件 API 命令。测试你的相机。
如果一切正常,您的相机现在将仅被视为相机。 可能会有一行显示syslog
键盘未获得授权,但仅此而已。