The Mystery of the Unrecognized Device
If you plug a brand new USB webcam into a Windows computer, a pop-up instantly appears in the bottom right corner announcing, “Setting up new device,” and within seconds, the hardware is ready to use. Windows actively monitors the physical USB ports and automatically searches its vast database for the required drivers.
Linux, particularly when running on a headless server without a graphical desktop, does not provide these friendly pop-up notifications. If you plug a USB security key, an external hard drive, or a specialized piece of industrial testing equipment into a Linux server, the terminal remains completely silent. If the software you are trying to run cannot find the device, you have no immediate way of knowing if the hardware is physically broken, if the USB port is dead, or if Linux simply lacks the necessary driver.
To bypass the software layer and physically interrogate the raw hardware controller to see exactly what is plugged into the machine, you must use the lsusb (List USB) command.
Step 1: The Basic Hardware Query
Because you are only querying the hardware for its identification tags, you do not need administrator privileges to run this command.
To see a complete list of every single device physically attached to the USB bus, simply type:
lsusb
The terminal will instantly output a list of devices. Even if Linux has absolutely no idea what the device is, and has no driver to operate it, the device will always show up on this list as long as it is receiving electrical power from the motherboard.
Step 2: Understanding the Output
The output of the lsusb command looks slightly cryptic at first glance, but it provides incredibly precise data. A typical line looks like this:
Bus 002 Device 004: ID 046d:c52b Logitech, Inc. Unifying Receiver
- Bus 002 Device 004: This tells you the exact physical internal routing pathway the motherboard is using to communicate with the device.
- ID 046d:c52b: This is the most critical piece of information. This is the hexadecimal Vendor ID (046d) and Product ID (c52b). This code is hardcoded into the silicon of the device at the factory.
- Logitech, Inc. Unifying Receiver: A human-readable translation of that hexadecimal code.
If you plug in a bizarre, unbranded piece of hardware you bought online, the human-readable text might be completely blank. However, the hexadecimal ID (e.g., 1a86:7523) will always be there. You can simply Google that exact hex code to instantly identify the mystery hardware and find the required Linux drivers.
Step 3: Getting Verbose Details
If you are a hardware developer trying to debug a custom piece of electronics, or if a specific USB device is drawing too much electrical power and causing the server to crash, the basic list is not enough.
You can force lsusb to dump the absolute maximum amount of diagnostic data by using the -v (verbose) flag.
sudo lsusb -v
(Note: You must use sudo with the verbose flag to give the command permission to query the deepest levels of the hardware).
The terminal will output hundreds of lines of complex engineering data for every single device. It will show you exactly how many milliamps of power (mA) the device is demanding from the motherboard, what specific USB protocol it is using (e.g., USB 2.0 vs USB 3.1), and exactly how many data endpoints it has opened.
Step 4: Isolating a Specific Device
Dumping verbose data for every single device on the server will flood your screen. To keep your terminal clean, you can force lsusb to only output the verbose data for one specific piece of hardware.
Using the hexadecimal ID you found in Step 2 (e.g., 046d:c52b), you use the -d (device) flag.
sudo lsusb -v -d 046d:c52b
This command ignores all the keyboards, mice, and internal hubs, and outputs the massive block of diagnostic engineering data only for that specific Logitech receiver, allowing you to instantly diagnose power failures or driver misconfigurations.