Используя udev я смог получить эту информацию для определенного USB-устройства:
idVendor: 13b1
idProduct: 0018
manufacturer:
product: USB 2.0 Network Adapter ver.2
serial: 00FFFF
Теперь я хочу получить полные строки, которые связаны с поставщиком и идентификаторами продукта. Я нашел что файл /usr/share/misc/usb.ids
содержит информацию, которую я ищу:
13b1 Linksys
000b WUSB11 v4.0 802.11b Adapter
000d WUSB54G Wireless Adapter
0011 WUSB54GP v4.0 802.11g Adapter
0018 USB200M 10/100 Ethernet Adapter
001a HU200TS Wireless Adapter
001e WUSBF54G 802.11bg
0020 WUSB54GC 802.11g Adapter [ralink rt73]
0023 WUSB54GR
0024 WUSBF54G v1.1 802.11bg
Однако мне не ясно, как я должен получить эти данные в своем приложении. Существует ли доступный API, или я должен просто проанализировать файл? Если я принимаю решение проанализировать его, то /usr/share/misc/usb.ids
всегда собираясь быть корректным местоположением?
Команда lsusb
запрашивает информацию о подключенных в данный момент USB-устройствах. Вы можете использовать опцию -d
для запроса определенного поставщика / продукта (но, похоже, это работает только для подключенных в данный момент устройств):
$ lsusb -d 0e21:0750
Bus 001 Device 005: ID 0e21:0750 Cowon Systems, Inc.
Вы можете показать информацию для всех устройств:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0421:01c7 Nokia Mobile Phones
Bus 001 Device 003: ID 0bda:8187 Realtek Semiconductor Corp. RTL8187 Wireless Adapter
Bus 001 Device 005: ID 0e21:0750 Cowon Systems, Inc.
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 002: ID 046d:c01b Logitech, Inc. MX310 Optical Mouse
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Вы также можете сделайте его подробным ( lsusb -v
) и распечатайте много всего.
Обратите внимание, что при доступе к информации о системе в ОС Linux гораздо предпочтительнее делать это с помощью команд оболочки (таких как lsusb
), чем напрямую анализировать системные файлы, к которым эти команды обращаются.
Ваше USB-устройство не должно сопоставлять идентификаторы поставщика и продукта с действительными правильными именами.
Было бы безопаснее получать эту информацию с самого устройства, используя что-то вроде libusb
или lsusb
.
В моей системе Ubuntu на странице lsusb (1)
указано, что /var/lib/usbutils/usb.ids
- это расположение id файл; фактически существует две символические ссылки, одна из которых - ваш /usr/share/misc/usb.ids
. Я бы доверял фактическому местоположению, прежде чем доверять символическим ссылкам:
$ ls -l /usr/share/misc/usb.ids /var/lib/misc/usb.ids /var/lib/usbutils/usb.ids
lrwxrwxrwx 1 root root 25 2010-04-29 18:08 /usr/share/misc/usb.ids -> /var/lib/usbutils/usb.ids
lrwxrwxrwx 1 root root 19 2010-04-29 18:08 /var/lib/misc/usb.ids -> ../usbutils/usb.ids
-rw-r--r-- 1 root root 368377 2009-11-06 09:26 /var/lib/usbutils/usb.ids