Como obter detalhes dos dispositivos USB no seu sistema

Há inúmeras ferramentas, no Linux, disponíveis para os usuários obterem informações sobre as conexões USB presentes no seu sistema.
Neste post, vou falar de algumas, que podem ser úteis para conseguir informações sobre dispositivos conectados a uma destas portas.
O utilitário usb-devices pode ser usado para exibir na tela do terminal detalhes, com bastante informações, sobre BUSes USB no seu sistema, mesmo que não haja algo conectado.
Se houver, contudo, ele irá mostrar informações sobre o device conectado.
linux usb devices

O usb-devices é um shell script (bash) desenvolvido para exibir informações e detalhes dos “buses” USB presentes no sistema, bem como, dos dispositivos anexados

A saída do script é similar ao conteúdo do arquivo de sistema usb/devices que, usualmente, fica sob o diretório /proc/bus:

less /proc/bus/input/devices
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:10/PNP0C0C:00/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

...


I: Bus=0003 Vendor=04f2 Product=b1d8 Version=5563
N: Name="1.3M WebCam"
P: Phys=usb-0000:00:1a.0-1.1/button
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/input/input13
U: Uniq=
H: Handlers=kbd event13 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

Outro arquivo do sistema, relacionado às informações de dispositivos ou sistemas de arquivos USB (caso estejam montados) é o /sys/kernel/debug/usb/devices. Este, contudo, nem sempre está disponível para usuários sem privilégios administrativos:

cat /sys/kernel/debug/usb/devices
cat: /sys/kernel/debug/usb/devices: Permission denied

O script usb-devices não requer privilégios administrativos para retornar informações úteis sobre os dispositivos USB conectados ao seu hardware.
Como limitação, o script só lista as interfaces ativas — aquelas marcadas com um ‘*’ no arquivo /sys/kernel/debug/usb/devices:

sudo cat /sys/kernel/debug/usb/devices | grep "*"
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
C:* #Ifs= 3 Cfg#= 1 Atr=a0 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=01 Driver=usbhid
I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=00 Prot=00 Driver=usbhid
I:* If#= 2 Alt= 0 #EPs= 1 Cls=03(HID  ) Sub=01 Prot=02 Driver=usbhid
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
C:* #Ifs= 2 Cfg#= 1 Atr=80 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=0e(video) Sub=01 Prot=00 Driver=uvcvideo
I:* If#= 1 Alt= 0 #EPs= 0 Cls=0e(video) Sub=02 Prot=00 Driver=uvcvideo

Use o lsusb, para obter informações mais enxutas

Os métodos listados acima, podem trazer informações detalhadas voltadas para desenvolvedores.
O utilitários lsusb é mais útil para quem deseja um conjunto de informações mais sucinto:

lsusb 
Bus 002 Device 003: ID 413c:2501 Dell Computer Corp. 
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 04f2:b1d8 Chicony Electronics Co., Ltd 
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Para obter uma relação mais detalhada, use a opção ‘–verbose’:

lsusb --verbose | less 

Se for executado com privilégios administrativos, o lsusb poderá exibir mais informações.
Como sempre, use o comando grep para filtrar os dados de acordo com suas necessidades:

sudo lsusb --verbose | grep -i bcdusb

O comando acima, irá exibir as versões USB disponíveis no seu sistema.
Veja o que obtive no meu computador de testes (ele é velhinho…):

  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00
  bcdUSB               2.00

Como obter informações sobre dispositivos USB em ambiente gráfico

Quem prefere o ambiente gráfico, pode instalar o usbview:

sudo apt install usbview

Este aplicativo irá retornar um conjunto de informações mais extenso, se for executado com privilégios administrativos:

sudo usbview

usbview
O utilitário usbview exibe as informações obtidas de /sys/kernel/debug/usb/devices — por isto, requer ser executado como super usuário.

Conheça o usbhid-dump

O utilitário usbhid-dump lança o stream de dados vindos de dispositivos USB.
O padrão é monitorar o fluxo de todos os dispositivos.
Mas você pode restringir a um só.
No exemplo que segue, o utilitário irá exibir o fluxo vindo do teclado USB (se você tiver um).
Tenha cuidado: você vai perder o controle do teclado USB, ao executar este comando:

sudo usbhid-dump -es

Para interromper o aplicativo, tecle ‘Ctrl + C’ no teclado nativo do seu notebook.
dump stream from mouse and keyboard to screen
O que este programa faz é desconectar os drivers do kernel, relacionados ao(s) dispositivo(s) em questão — assim, nenhum outro programa vai conseguir captar as entradas a partir daquele(s) dispositivo(s).
Se você não conseguir interromper a desconexão, com ‘Ctrl + C’, basta aguardar o tempo padrão de 60 segundos, para recuperar o controle sobre seu dispositivo USB.
Leia mais em Como obter mais informações sobre as portas USB no Linux.

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.

Como obter informações sobre seu HD USB externo.

Dentro da caixa do seu HD (disco rígido) externo, há um HD comum. É quase sempre possível obter informações detalhadas sobre o dispositivo USB, sem precisar abrir o invólucro de plástico.
Neste post, vou mostrar como obter a maior quantidade possível de informações sobre o dispositivo, da linha de comando do Linux — portanto, sem precisar “encostar a mão” no HD.
Se você não se interessa muito pelos detalhes técnicos ou em executar comandos pelo terminal, pode pular direto para a última sessão deste post.
Foto parcial do HD externo USB WD Elements

  • Se você ainda não usa o Linux, pode instalar o sistema operacional em um pendrive para realizar esta e muitas outras atividades — quem trabalha com suporte técnico tem uma grande vantagem ao ter uma distro livre de vírus sempre à mão (em um pendrive ou em um DVD/CD).

Como obter informações com lsusb

Se o seu dispositivo de armazenamento externo está conectado via USB, um dos primeiros comandos indicados é o lsusb.
Com os parâmetros certos, é possível obter uma lista completa das especificações do drive.
Comece entrando com o comando para obter informações genéricas sobre as conexões USB:

lsusb

Abaixo, realcei a linha em que se encontra o Bus ao qual o meu HD externo se encontra conectado. Veja que cada dispositivo tem uma ID associada.

Bus 001 Device 006: ID 058f:6331 Alcor Micro Corp. SD/MMC/MS Card Reader
Bus 001 Device 004: ID 0ac8:3420 Z-Star Microelectronics Corp. Venus USB2.0 Camera
Bus 001 Device 046: ID 04f3:0234 Elan Microelectronics Corp. 
Bus 001 Device 045: ID 0b38:0010 Gear Head 107-Key Keyboard
Bus 001 Device 044: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 001 Device 002: ID 1058:1048 Western Digital Technologies, Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Com o parâmetro -v, é possível obter informações muito mais detalhadas. Experimente:

lsusb -v 

Nas distros baseadas no Ubuntu e no Debian, você pode obter informações mais detalhadas, ainda, se executar o comando com privilégios administrativos:

sudo lshusb -v

Finalmente, vou propor que você filtre as informações para ver apenas o que importa neste momento — as informações sobre o drive externo USB Western Digital (no meu caso específico).
Para isto, preciso informar a ID do dispositivo (reveja a primeira listagem). Veja, como fica pra mim:

sudo lsusb -v -d 1058:1048

Entre as informações obtidas, você poderá ver as velocidades que o dispositivo pode alcançar:

...

wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
...

A velocidade atual do dispositivo está limitada pela versão da porta USB a que ele se encontra conectado.
O comando lsusb tem um artigo somente para ele, caso você queira tirar mais algumas dúvidas.

Obtenha mais informações com o hdparm

O programa hdparm pode ser usado para obter informações sobre vários tipos de dispositivos de armazenamento e alterar configurações importantes neles.

disco rígido western digital desktop black edition
Saiba como melhorar a performance do seu disco rígido com o hdparm.

Para obter informações detalhadas sobre o dispositivo use a opção -I em conjunto com o comando hdparm:

sudo hdparm -I /dev/sdb

Altere, no comando acima, a localização do seu HD, caso ele não se encontre em /dev/sdb. O comando mount pode ajudar a determinar a localização exata do seu disco.

Western Digital hard disk drive
3 formas de verificar o desempenho do HD, no Linux.

O que realmente tem dentro da caixinha do HD externo USB

Foto parcial dos discos em um Seagate Barracuda.
Controle a temperatura do seu HD com o HDDTEMP.
Se você tem esta curiosidade, sugiro procurar no Youtube por “external HD disassemble” (desmontagem de HD externo).
Para adiantar, há um HD comum, como qualquer outro.
O que pode diferir é a porta de comunicação entre o dispositivo e o PC:

  • Em alguns casos, a porta é USB, conectada por uma peça encaixada ou aparafusada ao conector SATA do HD.
  • Há outros casos em que a peça de encaixe é soldada ou integrada de outra forma irreversível ao HD. O dispositivo fica inútil sem ela.

Você vai precisar a abrir a caixa para saber.
Se quiser saber mais o assunto, leia o artigo Como desmontar o HD externo.

HD Western Digital
Clique, para ver detalhes.

Quando a peça adaptadora USB/SATA se encontra soldada ao dispositivo, não será possível reaproveitar o disco em seu notebook, se você tiver esta intenção.
Há casos em que a altura do HD, bloqueia seu encaixe dentro do notebook, impossibilitando seu uso nesta situação — mas não no desktop.