利用這個 USB ID 倉庫識別更多 Linux 上的設備
市場上有成千上萬的 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 組成。我的無描述設備是 Bus 001 Device 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:
不幸的是,這裡並沒有提供我希望找到的細節。初始輸出中出現的兩個欄位 idVendor
和 idProduct
都是空的。這有些幫助,因為往下看一下,就會發現 Mouse
這個詞。所以,這個設備就是我的滑鼠。
USB ID 倉庫
這讓我不禁想知道如何才能填充這些欄位,不僅是為了自己,也是為了其他 Linux 用戶。原來已經有了一個開源項目:USB ID 倉庫。它是一個公共倉庫,它包含了 USB 設備中使用的所有已知 ID。它也被用於各種程序中,包括 USB Utilities,用於顯示人類可讀的設備名稱。
![The USB ID Repository Site](/data/attachment/album/202009/13/225559xux1x41qhuaic1iz.png "The USB ID Repository Site")
你可以從網站上或通過下載資料庫來瀏覽特定設備的倉庫。也歡迎用戶提交新的數據。我要為我的滑鼠提交數據,因為它沒有在裡面。
更新你的 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
你可能會注意到,隨著倉庫定期更新新設備和現有設備的詳細信息,其他設備的描述也會發生變化。
提交新數據
提交新數據有兩種方式:使用網站或通過電子郵件發送特殊格式的補丁文件。在開始之前,我閱讀了提交指南。首先,我必須註冊一個賬戶,然後我需要使用項目的提交系統提供我滑鼠的 ID 和名稱。添加任何 USB 設備的過程都是一樣的。
你使用過 USB ID 倉庫么?如果有,請在評論中分享你的反饋。
via: https://opensource.com/article/20/8/usb-id-repository
作者:Alan Formy-Duval 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive