使用此 USB ID 仓库在 Linux 上识别更多设备

一个开源项目包含一个公共仓库,其中包含 USB 设备中使用的所有已知 ID。
151 位读者喜欢这篇文章。
Testing Linux hardware compatibility with USB sticks

Opensource.com

市场上有成千上万种 USB 设备——键盘、扫描仪、打印机、鼠标以及无数其他在 Linux 上都能工作的设备。它们的供应商详细信息存储在 USB ID 仓库中。

lsusb

Linux 的 lsusb 命令列出有关连接到系统的 USB 设备的信息,但有时信息不完整。例如,我最近注意到我的一个 USB 设备的品牌未被识别。该设备功能正常,但列出我连接的 USB 设备的详细信息时未提供任何识别信息。这是我的 lsusb 命令的输出

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 046d:082c Logitech, Inc. 
Bus 001 Device 003: ID 0951:16d2 Kingston Technology 
Bus 001 Device 002: ID 18f8:1486  
Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

正如您在最后一列中看到的,有一个设备没有制造商描述。为了确定设备是什么,我必须对我的 USB 设备树进行更深入的检查。幸运的是,lsusb 命令有更多选项。其中一个是 -D device,用于获取每个设备的详细信息,如手册页所述

“不要扫描 /dev/bus/usb 目录,而是仅显示有关给定设备文件的设备的信息。设备文件应类似于 /dev/bus/usb/001/001。此选项显示详细信息,如 v 选项;您必须是 root 用户才能执行此操作。”

我认为将设备路径传递给 lsusb 命令并不容易理解,但在仔细阅读手册页和初始输出后,我能够确定如何构造它。USB 设备驻留在 UDEV 文件系统中。它们的设备路径以 USB 设备目录 /dev/bus/usb/ 开头。路径的其余部分由设备的总线 ID 和设备 ID 组成。我的非描述性设备是总线 001,设备 002,转换为 001/002,并完成路径 /dev/bus/usb/001/002。现在我可以将此路径传递给 lsusb。我还将管道输送到 more,因为那里通常有很多信息

$ lsusb -D /dev/bus/usb/001/002 |more
Device: ID 18f8:1486  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x18f8 
  idProduct          0x1486 
  bcdDevice            1.00
  iManufacturer           0 
  iProduct                1 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           59
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              0 
        HID Device Descriptor:

不幸的是,这并没有提供我希望找到的详细信息。初始输出中出现的两个字段 idVendoridProduct 都是空的。有一些帮助,因为向下扫描一点会显示单词 Mouse。啊哈!所以,这个设备是我的鼠标。

USB ID 仓库

这让我怀疑如何填充这些字段,不仅为了我自己,也为了其他 Linux 用户。事实证明,已经有一个针对此目的的开源项目:USB ID 仓库。它是一个公共仓库,其中包含 USB 设备中使用的所有已知 ID。它也用于各种程序中,包括 USB 实用程序,以显示人类可读的设备名称。

您可以从网站浏览仓库以查找特定设备,也可以下载数据库。也欢迎用户提交新数据。这就是我为我的鼠标所做的,它之前没有被收录。

更新您的 USB ID

USB ID 数据库存储在一个名为 usb.ids 的文件中。此位置可能因 Linux 发行版而异。

在 Ubuntu 18.04 上,此文件位于 /var/lib/usbutils 中。要更新数据库,请使用命令 update-usbids,您需要以 root 权限或使用 sudo 运行该命令

$ sudo update-usbids

如果有新文件可用,它将被下载。当前文件将被备份并替换为新文件

$ ls -la
total 1148
drwxr-xr-x  2 root root   4096 Jan 15 00:34 .
drwxr-xr-x 85 root root   4096 Nov  7 08:05 ..
-rw-r--r--  1 root root 614379 Jan  9 15:34 usb.ids
-rw-r--r--  1 root root 551472 Jan 15 00:34 usb.ids.old

最新版本的 Fedora Linux 将数据库文件存储在 /usr/share/hwdata 中。此外,没有更新脚本。相反,数据库维护在一个名为 hwdata 的软件包中。

# dnf info hwdata

Installed Packages
Name         : hwdata
Version      : 0.332
Release      : 1.fc31
Architecture : noarch
Size         : 7.5 M
Source       : hwdata-0.332-1.fc31.src.rpm
Repository   : @System
From repo    : updates
Summary      : Hardware identification and configuration data
URL          : https://github.com/vcrhonek/hwdata
License      : GPLv2+
Description  : hwdata contains various hardware identification and configuration data,
             : such as the pci.ids and usb.ids databases.

现在我的 USB 设备列表在这个之前未命名的设备旁边显示了一个名称。将其与上面的输出进行比较

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 046d:082c Logitech, Inc. HD Webcam C615
Bus 001 Device 003: ID 0951:16d2 Kingston Technology 
Bus 001 Device 014: ID 18f8:1486 [Maxxter] 
Bus 001 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

您可能会注意到,随着仓库定期更新新设备以及有关现有设备的详细信息,其他设备描述也会发生变化。

提交新数据

有两种方法可以提交新数据:使用 Web 界面或通过电子邮件发送特殊格式的补丁文件。在开始之前,我通读了提交指南。首先,我必须注册一个帐户,然后我需要使用该项目的提交系统来提供我的鼠标的 ID 和名称。添加任何 USB 设备的过程都是相同的。

您是否使用过 USB ID 仓库? 如果使用过,请在评论中分享您的看法。

接下来阅读什么
标签
Alan Formy-Duval Opensource.com Correspondent
Alan 拥有 20 年的 IT 经验,主要在政府和金融 sector 领域。他最初是一名增值经销商,之后转入系统工程领域。Alan 的背景是高可用集群应用程序。他撰写了 Oracle Press/McGraw Hill 出版的《Oracle Solaris 11 系统管理》一书中的“用户和组”以及“Apache 和 Web 堆栈”章节。

6 条评论

这种事情应该在没有用户输入的情况下自动填充。如果 Linux 要继续作为桌面操作系统,它将必须收集一些信息。让所有注重隐私的人选择加入,但不要浪费这个机会。我们仍然被狠狠地踢屁股。现在是 2020 年,HiDPI 支持仍然是个笑话。我们是最后一个获得一切的,并且差距巨大。我们必须做得更好。

请注意,仅仅因为您可以在 Linux 上手动更新某些内容,并不意味着您必须这样做。这种数据确实会在主要升级时更新,无需用户输入;本文是关于如何在这种情况发生之前更新它。没有任何操作系统可以跟上市场上发布的每个 USB 设备,并在没有某种外部数据库来跟踪所有设备的情况下提供有关每个设备的元数据。这就是现状。

回复 作者 Bernard (未验证)

有趣的文章... 但是我似乎找不到如何在 Ubuntu 20.04 中做到这一点
有什么想法吗?

JJ,似乎 18.04 之后的 Ubuntu 发行版版本不再使用该脚本。相反,USB ID 文件现在由软件包“usb-ids”维护。以下命令将检查更新。

# apt --only-upgrade install usb.ids

该文件的注释确实提到了可以从 http://www.linux-usb.org/usb.ids 获取最新版本,因此可以手动更新该文件。但我会加上强制性的“风险自负”警告。

感谢您引起我们的注意。

回复 作者 JJ

© . All rights reserved.