内置 USB 网络摄像头被识别为键盘?

Xtr*_*532 8 xorg usb webcam 17.04

几年前,我在我的 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
Run Code Online (Sandbox Code Playgroud)

我不知道为什么 Xorg 甚至要处理 USB/输入设备(它不是一个显示服务器吗?),但主要问题是:
如何阻止 Ubuntu/Xorg 尝试使用我可怜的网络摄像头作为键盘并开始使用它作为一个真正的网络摄像头?

mat*_*igo 6

可以设置规则udev来阻止 USB 设备加载驱动程序,这应该具有禁用部分设备同时保持其他功能运行的预期效果。

您可以这样做:

  1. 打开终端(如果尚未打开)

  2. 通过以下方式确定制造商和设备 ID lsusb(对于 PCI 设备,可以使用lspci):

    sudo lsusb
    
    Run Code Online (Sandbox Code Playgroud)

    您可能会看到与此类似的输出:

    ...
    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
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    请注意制造商 ID(例如04f2)和产品 ID(例如b448)。这些稍后会很重要。

  3. 通过以下方式确定设备所需的驱动程序udevadm

    udevadm info -a /dev/input/by-id/*
    
    Run Code Online (Sandbox Code Playgroud)

    注意:您需要筛选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"
    
    Run Code Online (Sandbox Code Playgroud)

    您要注意的DRIVERS是您的相机的 USB 设备。会有一行可能会说uvcvideo,另一行会说类似 的内容libinput,这是不正确的。

  4. 创建udev规则文件:

    sudo {text editor of choice} /etc/udev/rules.d/90-blacklist-webcam-keyboard.rules
    
    Run Code Online (Sandbox Code Playgroud)

    注意:请务必替换{text editor of choice}为您选择的文本编辑器。我以前放在vi那里,因为那是像我这样的脖子胡须使用的。然而,其中很多帖子都会被编辑以替换vigedit或其他一些新奇的东西。太长了;使用对你有用的东西。

    在该文件中,以如下格式记录驱动程序、制造商 ID 和产品 ID:

    # Not a keyboard!
    SUBSYSTEM=="usb", DRIVER=="libinput", ATTRS{idVendor}=="04f2", ATTRS{idProduct}=="b448", ATTR{authorized}="0"
    
    Run Code Online (Sandbox Code Playgroud)
  5. 重启。

    注意:如果相机是可以断开连接并重新连接的 USB 设备,您只需使用 重新加载udev规则sudo udevadm control --reload-rules并重新连接设备即可。然而,由于它是内置的,重新启动是最简单的选择,无需使用复杂的硬件 API 命令。

  6. 测试你的相机。

如果一切正常,您的相机现在将仅被视为相机。中可能有一行syslog表示键盘未获得授权,但仅此而已。