lsusb

Aus wiki.archlinux.de

Mittels des Tools lsusb kann man sich alle am Computer per USB angeschlossenen Geräte anzeigen lassen. Genauer genommen handelt es sich um ein Informationstool, mittels dessen das USB-System analysiert und durchsucht werden kann. Mittels verschiedener Parameter kann die Ausgabe angepasst werden.

Installation

Das Programm lsusb ist teil des Paketes usbutils, welches sich im „core“-Repository befindet. Dieses Paket kann mittels Pacman installiert werden.

pacman -S usbutils

Um alle Funktionen (insbesondere die erweiterten Informationen zu Bus-Abschnitten und Geräten) verwenden zu können, sind root-Rechte erforderlich. Für den „täglichen Standard-Gebrauch“ ist dies nicht nötig.

Einsatzzweck

Für die Anzeige durch lsusb ist es nicht wichtig, ob die Hardware von Linux erkannt wird. So lange die Hardware sich über USB am System anmeldet, können entsprechende Informationen angezeigt werden. lsusb eignet sich daher also sehr gut, um im Zuge einer Fehleranalyse die generelle Funktionsfähigkeit von Hardware zu überprüfen.

Wenn USB-Hardware duch lsusb nicht angezeigt werden kann, ist es wahrscheinlich, dass die Hardware nicht funktioniert, sich in einem Funktionsmodus befindet, in dem USB deaktiviert ist, oder das USB-System nicht funktioniert.

Beispiele

Nachfolgende Beispiele verdeutlichen die Verwendung von lsusb. Einige der Aufrufe bedürfen root-Rechten, da direkt auf die Hardware zugegriffen wird, was mit User-Rechten nicht uneingeschränkt möglich ist.

Standard-Aufruf/Erläuterung

Mittels der einfachen Eingabe von lsusb wird das USB-System durchsucht, und es werden Informationen über die gefundenen Geräte ausgegeben.

$ lsusb
Bus 001 Device 003: ID 2040:7070 Hauppauge Nova-T Stick 3
Bus 001 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 007 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 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 003: ID 046d:c043 Logitech, Inc. MX320/MX400 Laser Mouse
Bus 005 Device 002: ID 04b4:00ff Cypress Semiconductor Corp. 
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 046d:08b2 Logitech, Inc. QuickCam Pro 4000
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 0644:0200 TEAC Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Die Standard-Ausgabe gliedert sich in drei Bereiche, der Bus-Bereich (Bus 001 Device 003) bestimmt die „physische“ Position der Hardware. Pro Bus können mehrere Devices vorhanden sein. Die Ausgabe unterscheidet sich je Mainboard. Die Anzahl der Busse und Devices stimmt oft nicht mit den tatsächlich vorhandenen USB-Anschlüssen überein, da lsusb auch interne Verbindungen mit auflistet.

Der ID-Abschnitt (ID 2040:7070) bestimmt eindeutig, um welche Art von Hardware es sich handelt. Jeder Anbieter hat eine Vendor-ID (vor dem Doppelpunkt) und jedes Gerät hat eine Product-ID (nach dem Doppelpunkt). Anhand dieser beiden Angaben kann man ein Gerät identifizieren.

Der Namensteil (Hauppauge Nova-T Stick 3) kann vom Anbieter völlig frei gewählt werden (weiter Informationen siehe Abschnitt Zuordnungs-Datei). In Verbindung mit der Bus-Angabe und der ID kann man so ein bestimmtes Gerät an einem bestimmten USB-Anschluss eindeutig identifizieren.

Suche nach Geräte-IDs

Will man sich nur die Geräte eines bestimmten Herstellers anzeigen lassen, und kennt man dessen Vendor-ID bedient man sich des Parameters -d.

lsusb -d 046d:
Bus 005 Device 003: ID 046d:c043 Logitech, Inc. MX320/MX400 Laser Mouse
Bus 004 Device 002: ID 046d:08b2 Logitech, Inc. QuickCam Pro 4000

Da 046d die Vendor-ID von Logitech ist, werden nun nur noch alle Logitech-Geräte aufgelistet. Will man die Suche noch weiter spezifizieren, kann man zusätzlich zur Vendor-ID auch die Product-ID angeben.

$ lsusb -d 046d:c043
Bus 005 Device 003: ID 046d:c043 Logitech, Inc. MX320/MX400 Laser Mouse

Es wird nun nur noch die Zeile der am Rechner angeschlossenen Maus „Logitech MX400 Laser“ angezeigt. Nur der Vollständigkeit halber: Die Suche nur nach der Product-ID, dann mit vorangestelltem Doppelpunkt, funktioniert genau so.

Suche nach der Position im Bus

Will man sich Informationen darüber anzeigen lassen, welche Geräte an einem bestimmten Bus angeschlossen sind, bedient man sich des Parameters -s.

$ lsusb -s 005:
Bus 005 Device 003: ID 046d:c043 Logitech, Inc. MX320/MX400 Laser Mouse
Bus 005 Device 002: ID 04b4:00ff Cypress Semiconductor Corp. 
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Es werden nun nur noch alle Geräte ausgegeben, die am Bus 005 angeschlossen sind. Will man dies noch weiter spezifizieren, kann man zusätzlich auch noch die Device-Nummer angeben.

$ lsusb -s 005:003
Bus 005 Device 003: ID 046d:c043 Logitech, Inc. MX320/MX400 Laser Mouse

Jetzt wird nur noch die Zeile des Gerätes ausgegeben, das als drittes Gerät an Bus 005 angeschlossen wurde. Auch hier gilt wieder: Die Suche kann auch nur nach Device-Nummern, wieder mit vorangestelltem Doppelpunkt, vorgenommen werden.

Ausgabe anhand einer Gerätedatei

Statt den Bus zu durchsuchen, kann man lsusb mittels des Parameters -D auch anweisen, eine bestimmte Gerätedatei als Quelle für die Ausgabe zu verwenden.

$ lsusb -D /dev/bus/usb/005/003
Device: ID 046d:c043 Logitech, Inc. MX320/MX400 Laser Mouse
[weitere Informationen]
can't get device qualifier: Operation not permitted
can't get debug descriptor: Operation not permitted
cannot read device status, Operation not permitted (1)

Da hier direkt auf Gerätedateien zugegriffen wird, und über diese direkt auf die Hardware, können mit User-Rechten nicht alle Informationen ausgelesen werden.

Erweiterte Ausgabe

Die erweiterte Ausgabe mittels des Parameters -v entspricht der Ausgabe nach der Gerätedatei mittels des Parameters -D. Auch bei der erweiterten Ausgabe mittels -v werden für die Ausgabe aller Informationen root-Rechte benötigt.

Es ist ratsam, -v mit einem Filter-Parameter zu kombinieren, da sonst für alle Geräte ausführliche Informationen ausgegeben werden, was die Ausgabe sehr unübersichtlich und umfangreich macht.

# lsusb -v -s 005:003

Bus 005 Device 003: ID 046d:c043 Logitech, Inc. MX320/MX400 Laser Mouse
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x046d Logitech, Inc.
  idProduct          0xc043 MX320/MX400 Laser Mouse
  bcdDevice           27.10
  iManufacturer           1 Logitech
  iProduct                2 USB-PS/2 Optical Mouse
  iSerial                 0 
  bNumConfigurations      1
[weitere Informationen]
Device Status:     0x0000
  (Bus Powered)

Je nach abgefragtem Gerät variieren die angezeigten Informationen.

# lsusb -v -s 004:002
[…]
  idVendor           0x046d Logitech, Inc.
  idProduct          0x08b2 QuickCam Pro 4000
[…]
    AudioControl Interface Descriptor:
      bLength                12
      bDescriptorType        36
      bDescriptorSubtype      2 (INPUT_TERMINAL)
      bTerminalID             1
      wTerminalType      0x0201 Microphone
      bAssocTerminal          0
      bNrChannels             1
      wChannelConfig     0x0000
      iChannelNames           0 
      iTerminal               0 
[…]

Die als zweites Gerät an Bus 004 angeschlossene Hardware verfügt also über ein Mikrofon, das per USB ansteuerbar ist. Wenn man die Hardware nicht kennt, kann man mittels der erweiterten Ausgabe Informationen über dessen Funktionen erlangen.

Zuordungs-Datei

Unter Arch befinden sich alle Informationen über die Product- und Vendor-IDs in der Datei /usr/share/hwdata/usb.ids. In dieser Datei werden nach einem recht einfachen Schema, welches im Kopfbereich der Datei erläutert wird, alle IDs aufgelistet. Änderungen an der Datei wirken sich auf die Ausgabe von lsusb aus.

$ lsusb -s 005:003
Bus 005 Device 003: ID 046d:c043 Logitech, Inc. blubb

Hier wurde der Produktnamen-String in der Datei auf „blubb“ geändert. Nach Wiederherstellung des Originalzustandes, zeigt lsusb das Gerät wieder richtig an.

$ lsusb -s 005:003
Bus 005 Device 003: ID 046d:c043 Logitech, Inc. MX320/MX400 Laser Mouse

Da die Produktnamen-Strings nur beschreibende Funktion haben hat eine Änderung des Strings keinen Einfluss auf die Funktionsweise des Gerätes. Allerdings wird der String überall angezeigt, sollte also das Gerät schon richtig beschreiben. Fehlerhafte Beschreibungen sollten dem Maintainer der Datei gemeldet werden.

Script usb-devices

Das Paket usbutils wird mit einem Script usb-devices ausgeliefert, welches Informationen über alle aktiven USB-Geräte in kompakter, leicht parsbarer Form anzeigt. Die Anzeige ist identisch des Inhaltes der Datei usb/devices innerhalb eines Mountpoints von usbfs, oder innerhalb eines Mountpoints von debugfs.

Anstatt einfach den Inhalt der Datei auszugeben, ermittelt usb-devices die Daten selbständig. Da weder usbfs, noch debugfs gemountet sein müssen, hat man mittels usb-devices neben lsusb eine einfache Möglichkeit, um an Informationen über USB-Geräte zu gelangen, ohne, dass man einen usbfs-, oder debugfs-Mountpoint anlegen muss.

Siehe auch

Weblinks