gnu linux badge

Como extrair informações sobre as portas USB no Linux

O GNU/Linux tem várias opções de comandos para obter as mais variadas e detalhadas informações sobre o seu hardware.
Estes comandos e funções são importantes em várias situações, inclusive para montar scripts de instalação que se adaptem às especifidades do hardware.
Neste texto, procuro responder também uma questão que me foi feita, tempos atrás, sobre como determinar a potência em miliamperes das portas USB de um notebook ou como determinar o consumo atual de um dispositivo.
Para responder a esta e outras questões, listei uma série de comandos que você pode dar no terminal para obter dados sobre as portas USB.
Obviamente, há várias outras formas eficientes para obter tais informações no Linux. Estas são apenas algumas.
Se você tem preferência por algum outro método, sinta-se à vontade para explicá-lo na seção de comentários.

O comando lsusb

O primeiro comando que vamos abordar é um que foi feito para resolver este problema.
Ele pode oferecer mais informações se for executado com privilégios administrativos.
Na sua forma básica, ele oferece informações sobre as portas e sobre os firmwares dos dispositivos conectados.


lsusb 

Bus 004 Device 003: ID 8087:07da Intel Corp. 
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 003: ID 2232:1035  
Bus 003 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Para obter uma riqueza maior de detalhes, use a opção ‘-v’ ou ‘–verbose’:


sudo lsusb --verbose

Use o comando grep para filtrar as informações a um determinado dispositivo.
No exemplo abaixo, segue as informações referentes ao dongle USB do teclado/mouse:


sudo lsusb --verbose | grep -i Dell

Bus 001 Device 003: ID 413c:2501 Dell Computer Corp. 
  idVendor           0x413c Dell Computer Corp.
  iManufacturer           1 Dell
  iProduct                2 Dell KM632 Wireless Keyboard and Mouse

Se você conectar um smartphone ao USB, pode usar o mesmo artifício para encontrar informações sobre ele:


sudo lsusb --verbose | grep -i moto

Bus 001 Device 005: ID 22b8:2e83 Motorola PCS 
  idVendor           0x22b8 Motorola PCS
  iManufacturer           1 motorola
  iProduct                2 MotoG3

Note, no exemplo acima, a primeira linha traz informações sobre o Bus e o número do Device. Veja como exibir informações completas sobre este dispositivo especificamente:


sudo lsusb -v -s 001:005

Bus 001 Device 005: ID 22b8:2e83 Motorola PCS 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x22b8 Motorola PCS
  idProduct          0x2e83 
  bcdDevice           ff.ff
  iManufacturer           1 motorola
  iProduct                2 MotoG3
  iSerial                 3 0016903665
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           39
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass         6 Imaging
      bInterfaceSubClass      1 Still Image Capture
      bInterfaceProtocol      1 Picture Transfer Protocol (PIMA 15470)
      iInterface              5 PTP
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x001c  1x 28 bytes
        bInterval               6
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)

Note que, na linha 26, em destaque na listagem acima, encontra-se a informação sobre a capacidade máxima de energização desta porta USB: 500mA.

Como determinar o consumo de energia de um dispositivo USB com o comando lsusb

Uma outra forma de responder especificamente a esta questão é filtrar os resultados do comando com o egrep (o grep também pode ser usado).
Veja um exemplo:


sudo lsusb -v | egrep "^Bus|MaxPower"

### repare no consumo (em miliamperes) dos 3 dispositivos conectados ao meu notebook: HD externo, smartphone Samsung Galaxy ACE II e um dongle para teclado e mouse.
Bus 004 Device 003: ID 8087:07da Intel Corp. 
    MaxPower                0mA
Bus 004 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    MaxPower                0mA
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    MaxPower                0mA
Bus 003 Device 003: ID 2232:1035  
    MaxPower              500mA
Bus 003 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
    MaxPower                0mA
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    MaxPower                0mA
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    MaxPower                0mA
Bus 001 Device 034: ID 152d:2509 JMicron Technology Corp. / JMicron USA Technology Corp. JMS539 SuperSpeed SATA II 3.0G Bridge
    MaxPower                2mA
Bus 001 Device 036: ID 04e8:6860 Samsung Electronics Co., Ltd GT-I9100 Phone [Galaxy S II], GT-I9300 Phone [Galaxy S III], GT-P7500 [Galaxy Tab 10.1]
    MaxPower              500mA
Bus 001 Device 028: ID 413c:2501 Dell Computer Corp. 
    MaxPower              100mA
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    MaxPower                0mA

O comando usb-devices

Você pode usar o comando usb-devices, combinado ao grep, para obter informações mais compactas sobre o dispositivo Motorola (no meu caso):


usb-devices | grep -A 5 -i motorola

### Como você pode ver, esta é uma forma de obter fácil o número de série de um smartphone:

S:  Manufacturer=motorola
S:  Product=MotoG3
S:  SerialNumber=0016903665
C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=00 Driver=(none)

Como obter informações com o usbview

O aplicativo gráfico usbview fornece as informações sobre as portas USB e os dispositivos conectados, organizadas em árvore.
Pode ser uma opção interessante para quem não se dá muito bem com a linha de comando. Veja a figura.
Informações sobre o motorola moto g3

Monitoramento das portas USB

O comando udevadm pode ser usado para manter um monitoramento constante das portas USB no seu sistema.
Sempre que houver uma ocorrência, ela será mostrada na tela.


udevadm monitor path /dev/usb/hiddev0

### No exemplo, abaixo, a saída do udevadm ao conectar um drive USB:

KERNEL[13527.084590] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4 (usb)
KERNEL[13527.084830] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0 (usb)
KERNEL[13527.085322] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/host7 (scsi)
KERNEL[13527.085411] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/host7/scsi_host/host7 (scsi_host)
UDEV  [13527.089506] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4 (usb)
UDEV  [13527.095055] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0 (usb)
UDEV  [13527.098276] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/host7 (scsi)
UDEV  [13527.098351] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/host7/scsi_host/host7 (scsi_host)

...

O udev é o gerenciamento dinâmico de dispositivos do Linux.
Ele supre os softwares do sistema com informações sobre eventos, cuida das permissões dos nós dos dispositivos e pode criar symlinks adicionais ao diretório /dev.
(Manual do udev)

udev – Linux dynamic device management
O daemon do udev, o systemd-udevd.service, recebe os uevents dos dispositivos diretamente do kernel, a cada vez que um é adicionado ou removido no sistema, ou quando seu estado se altera.

O comando dmesg

Por último e não menos importante, o comando dmesg também pode ser usado para buscar informações sobre as portas e dispositivos USB no seu sistema:


dmesg | grep USB

Como sempre, se você souber o que estão procurando, o uso do comando grep ajuda a filtrar as informações, para obter apenas o que te interessa.
Divirta-se!

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *