Verifique as portas USB pelo terminal no Linux

Diagnosticando conexões USB com lsusb no Linux

Descubra como usar o comando lsusb no Linux para diagnosticar problemas com dispositivos USB. Aprenda a listar dispositivos, obter informações detalhadas, identificar problemas de conexão, energia e drivers, e solucionar falhas.

Diagnosticando conexões USB com lsusb no Linux

A Universal Serial Bus (USB) é uma interface fundamental para conectar uma vasta gama de periféricos ao seu sistema Linux, desde teclados e mouses até impressoras e dispositivos de armazenamento. Quando um dispositivo USB não é reconhecido ou funciona de forma irregular, o comando lsusb é uma ferramenta essencial no terminal para diagnosticar a conexão e identificar possíveis problemas. Este guia mostrará como utilizar o lsusb para investigar questões relacionadas a dispositivos USB no Linux.

Sintomas de problemas com dispositivos USB

  • Dispositivo não reconhecido: O sistema não detecta o dispositivo USB quando conectado.
  • Funcionamento intermitente: O dispositivo conecta e desconecta aleatoriamente.
  • Mensagens de erro relacionadas a USB no kernel (vistas com dmesg).
  • Dispositivo listado, mas não funcionando corretamente.
  • Consumo excessivo de energia da porta USB.

O que é o comando lsusb?

O comando lsusb lista todos os controladores USB e dispositivos conectados ao seu sistema. Ele fornece informações detalhadas sobre cada dispositivo, incluindo seu ID de fabricante (Vendor ID), ID de produto (Product ID), classe e descrição. Essas informações são cruciais para identificar o dispositivo e diagnosticar problemas de comunicação.

Como utilizar o lsusb

  1. Abrindo o Terminal:

Abra o seu terminal Linux.

  1. Executando o Comando Básico:

Digite lsusb e pressione Enter. Isso exibirá uma lista de todos os dispositivos USB detectados pelo sistema.

Exemplo de saída:

Bus 001 Device 002: ID 8087:8001 Intel Corp. Integrated Rate Matching Hub
Bus 001 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 002 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 002 Device 004: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive

Cada linha representa um dispositivo USB. Vamos entender as partes importantes:

  • Bus 001 e Bus 002: Indicam os diferentes controladores USB presentes no sistema. Os dispositivos são agrupados por barramento.
  • Device 002 e Device 001: São os números de dispositivo conectados a cada barramento. O número 001 geralmente representa o hub raiz do controlador.
  • ID 8087:8001: Este é o identificador único do dispositivo. 8087 é o Vendor ID (VID) da Intel Corp., e 8001 é o Product ID (PID) do Integrated Rate Matching Hub.
  • Intel Corp. Integrated Rate Matching Hub: Uma breve descrição do dispositivo.
  • Logitech, Inc. Unifying Receiver: Descrição do receptor USB da Logitech.
  • Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive: Descrição do pendrive.
  1. Obtendo Informações Detalhadas sobre um Dispositivo Específico:

Para obter mais informações sobre um dispositivo em particular, você pode usar as opções -v (verbose) e -s (especificar barramento e dispositivo).

Primeiro, execute lsusb para identificar o barramento e o número do dispositivo que você quer investigar (por exemplo, o receptor Logitech no Bus 002, Device 003). Em seguida, execute o comando com a opção -s:

lsusb -v -s 002:003

Isso exibirá uma grande quantidade de informações sobre o dispositivo, incluindo:

  • Device Descriptor: Versão do USB, classe do dispositivo, VID, PID, número de série, etc.

  • Configuration Descriptor: Informações sobre as configurações de energia, número de interfaces, etc.

  • Interface Descriptors: Detalhes sobre cada interface que o dispositivo oferece (por exemplo, interface para teclado, interface para mouse).

  • Endpoint Descriptors: Informações sobre os pontos de comunicação (endpoints) que o dispositivo usa para transferir dados.
A saída detalhada pode ser útil para identificar problemas de configuração ou comunicação com o dispositivo. Procure por informações sobre a classe do dispositivo (Interface Class) para entender qual driver genérico ou específico o sistema pode estar tentando usar.

Exemplo de saída o comando lsusb -v -s 002:003

Bus 002 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          0 (Defined at Interface level)
  bDeviceSubClass       0
  bDeviceProtocol       0
  bMaxPacketSize0        64
  idVendor           0x046d Logitech, Inc.
  idProduct          0xc52b Unifying Receiver
  bcdDevice            12.01
  iManufacturer           1 Logitech
  iProduct                2 Unifying Receiver
  iSerial                 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    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
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes          0x03
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              10

Explicação da Saída:

  • Bus 002 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver: Esta é a linha padrão que lsusb sem opções detalhadas também mostraria. Ela informa o barramento (002), o número do dispositivo (003), o Vendor ID (046d) e o Product ID (c52b), juntamente com uma descrição do fabricante (Logitech, Inc.) e do produto (Unifying Receiver).
  • Device Descriptor:: Esta seção descreve o dispositivo como um todo:
    • bLength: Tamanho deste descritor em bytes.
    • bDescriptorType: Tipo do descritor (1 para Dispositivo).
    • bcdUSB: Versão da especificação USB suportada pelo dispositivo (2.00 neste caso).
    • bDeviceClass, bDeviceSubClass, bDeviceProtocol: Classes, subclasses e protocolos de dispositivo. Um valor de 0 aqui geralmente indica que a classe é definida no nível da interface.
    • bMaxPacketSize0: Tamanho máximo do pacote para o endpoint 0 (controle).
    • idVendor: ID do fabricante (Logitech).
    • idProduct: ID do produto (Unifying Receiver).
    • bcdDevice: Versão do firmware do dispositivo (12.01).
    • iManufacturer: Índice da string do fabricante.
    • iProduct: Índice da string do produto.
    • iSerial: Índice da string do número de série (0 indica que não há número de série).
    • bNumConfigurations: Número de configurações que o dispositivo suporta (1 neste caso).
  • Configuration Descriptor:: Descreve uma das configurações do dispositivo:
    • bLength, bDescriptorType, wTotalLength, bNumInterfaces, bConfigurationValue, iConfiguration: Informações gerais sobre a configuração.
    • bmAttributes: Atributos da configuração (Bus Powered e Remote Wakeup neste caso).
    • MaxPower: Consumo máximo de energia do dispositivo (100mA).
  • Interface Descriptor:: Descreve uma interface específica dentro da configuração (um dispositivo pode ter várias interfaces, por exemplo, para teclado e mouse separados):
    • bLength, bDescriptorType, bInterfaceNumber, bAlternateSetting, bNumEndpoints, iInterface: Informações gerais sobre a interface.
    • bInterfaceClass: Classe da interface (3 para Human Interface Device – HID).
    • bInterfaceSubClass: Subclasse da interface (1 para Boot Interface Subclass).
    • bInterfaceProtocol: Protocolo da interface (2 para Mouse).
  • Endpoint Descriptor:: Descreve um ponto de comunicação (endpoint) para transferência de dados:
    • bLength, bDescriptorType, bEndpointAddress: Endereço do endpoint (0x81 indica um endpoint de entrada).
    • bmAttributes: Atributos do endpoint (Interrupt Transfer Type neste caso, usado para dados sensíveis ao tempo como movimentos do mouse).
    • wMaxPacketSize: Tamanho máximo do pacote que pode ser transferido neste endpoint (8 bytes).
    • bInterval: Intervalo de polling para este endpoint (10ms).

Esta saída detalhada permite verificar se o dispositivo está reportando as informações corretas sobre suas capacidades e configuração, o que pode ser útil para diagnosticar problemas de driver ou compatibilidade.

  1. Filtrando a Saída por Vendor ID ou Product ID:

Se você estiver procurando por um dispositivo específico e souber seu Vendor ID ou Product ID, pode filtrar a saída do lsusb usando a opção -d:

lsusb -d 046d:c52b

Isso listará apenas os dispositivos que correspondem ao VID 046d e ao PID c52b (neste caso, o Unifying Receiver da Logitech).

  1. Exibindo a árvore de dispositivos USB:

A opção -t exibe os dispositivos USB em uma estrutura de árvore, mostrando as conexões entre hubs e dispositivos finais. Isso pode ser útil para entender a topologia das suas conexões USB.

lsusb -t

Exemplo de saída:

/:  Bus 02.Port 1.0, Hub, USB 3.0 (???5000Mbit/s)
    |__ Port 1.0, Device 3, Hub (???480Mbit/s)
        |__ Port 1.0, Device 4, Mass Storage (???480Mbit/s)
        |__ Port 2.0, Device 5, Human Interface Device (???12Mbit/s)
/:  Bus 01.Port 1.0, Hub, USB 2.0 (???480Mbit/s)
    |__ Port 1.0, Device 2, Hub (???480Mbit/s)

Esta saída mostra os barramentos USB e os dispositivos conectados, indicando se são hubs ou dispositivos finais e a velocidade da conexão.

Diagnosticando problemas com lsusb

  • Dispositivo não listado: Se o seu dispositivo USB não aparecer na saída do lsusb após ser conectado, pode haver um problema físico (cabo defeituoso, porta USB com problema, falha no dispositivo) ou uma questão de energia. Tente conectar o dispositivo a outra porta USB.
  • Erros ou informações incompletas: Na saída detalhada (lsusb -v), procure por mensagens de erro ou descritores incompletos, que podem indicar problemas de comunicação ou um driver inadequado.
  • Classe incorreta: A classe do dispositivo (Interface Class na saída detalhada) deve corresponder ao tipo de dispositivo. Se estiver incorreta, pode haver um problema com o driver.

Próximos passos após a identificação

Após usar o lsusb para obter informações sobre um dispositivo USB problemático, você pode seguir estes passos:

  • Verificar os logs do kernel (dmesg | grep usb): Procure por mensagens de erro específicas relacionadas ao dispositivo.
  • Verificar se o driver correto está carregado (lsmod | grep <nome_do_driver>): Se você souber o nome do driver esperado para o dispositivo.
  • Tentar carregar ou recarregar o driver: sudo modprobe <nome_do_driver> ou sudo modprobe -r <nome_do_driver> seguido de sudo modprobe <nome_do_driver>.
  • Pesquisar online pelo Vendor ID e Product ID: Isso pode fornecer informações sobre o dispositivo e possíveis soluções para problemas comuns.

Dicas e cenários comuns de problema de USB no Linux

  • Dispositivo Intermitente: Se um dispositivo USB conecta e desconecta aleatoriamente, use lsusb imediatamente após uma desconexão inesperada. Verifique se o dispositivo ainda aparece na lista. Se não, pode indicar um problema de energia (a porta USB não está fornecendo energia suficiente ou o dispositivo está consumindo demais), um cabo defeituoso ou uma conexão física solta. Se o dispositivo ainda estiver listado, o problema pode ser um driver instável ou um problema de comunicação que é melhor investigado com dmesg.
  • Identificando Dispositivos Desconhecidos: Às vezes, um dispositivo pode aparecer na lista do lsusb com uma descrição genérica ou com um Vendor ID/Product ID numérico sem um nome amigável. Isso pode indicar que o sistema não tem informações detalhadas sobre o dispositivo, possivelmente devido à falta de um driver específico. Anote o Vendor ID e o Product ID e use-os para pesquisar online por drivers ou informações sobre compatibilidade com Linux.
  • Verificando a Velocidade da Conexão: Para dispositivos que dependem de altas velocidades de transferência (como HDDs externos ou webcams de alta resolução), use lsusb -t para verificar a velocidade da conexão (por exemplo, “Speed: 5000Mbit/s” para USB 3.0 SuperSpeed). Se um dispositivo USB 3.0 estiver conectado a uma porta USB 3.0, mas o lsusb -t mostrar uma velocidade de “480Mbit/s” (USB 2.0 High-Speed), pode haver um problema com a porta, o cabo ou o próprio dispositivo.
  • Problemas de Energia: Se vários dispositivos conectados à mesma porta USB via um hub apresentarem problemas, use lsusb -t para visualizar a topologia. Um hub com muitos dispositivos de alto consumo de energia pode estar sobrecarregado. Tente conectar alguns dispositivos diretamente às portas USB do computador ou use um hub com alimentação externa. O lsusb -v também pode mostrar informações sobre o consumo de energia do dispositivo nas seções de descritores de configuração.
  • Dispositivos Mal Funcionando Após Atualizações do Kernel: Se um dispositivo USB que funcionava anteriormente parar de funcionar após uma atualização do kernel, use lsusb para confirmar que ele ainda está sendo detectado. Em seguida, verifique os logs do kernel (dmesg) para ver se há novas mensagens de erro relacionadas ao dispositivo. Pode ser que um driver específico precise ser atualizado ou que haja uma incompatibilidade temporária com a nova versão do kernel.
  • Comparando Antes e Depois: Se você instalar um novo driver para um dispositivo USB, execute lsusb -v antes e depois da instalação. Compare as informações, especialmente a seção de descritores de interface e quaisquer informações sobre o driver sendo usado (isso pode não ser explicitamente listado pelo lsusb, mas as informações da classe e protocolo podem mudar).

Conclusão

O comando lsusb é uma ferramenta fundamental para diagnosticar problemas com dispositivos USB no Linux. Ao listar os dispositivos conectados e fornecer informações detalhadas sobre eles, você pode identificar se um dispositivo está sendo reconhecido pelo sistema, obter seus identificadores únicos e investigar problemas de comunicação ou configuração. Combinado com outras ferramentas de diagnóstico do Linux, o lsusb ajuda a garantir que seus periféricos USB funcionem corretamente.

Emanuel Negromonte Autor
Autor
Jornalista especialista em Linux a mais de 20 anos. Fundador do SempreUpdate e entusiasta do software livre.