USB Device Not Recognized
Linux Linux
Severity: MinorWhat Does This Error Mean?
When Linux does not recognize a USB device, it usually means the kernel could not load the right driver, the device is not getting enough power, or there is a USB controller bug with your specific kernel version. Running lsusb in a terminal tells you instantly whether Linux even sees the hardware. Most USB recognition problems on Linux are fixable by installing the right driver package, adjusting USB power management, or updating the kernel.
Affected Models
- Ubuntu
- Debian
- Fedora
- Arch Linux
- Linux Mint
- openSUSE
- Rocky Linux
Common Causes
- The required kernel module (driver) for the USB device is not installed or not loaded
- USB selective suspend is putting the device to sleep and not waking it when needed
- The USB device requires more power than the port provides, especially on USB hubs without external power
- Kernel version incompatibility with a newer USB device that requires a more recent driver
- The device uses a vendor-specific driver that must be installed from the manufacturer's repository
How to Fix It
-
First, check if Linux sees the device at all. Open a terminal and run: lsusb — plug and unplug the device while watching the output. If the device appears in the list when plugged in, Linux detects the hardware but lacks a driver. If nothing appears, the problem is power or the physical connection.
lsusb lists all connected USB devices by manufacturer and product ID, not by their function. You will see entries like '045e:028e Microsoft Corp. Xbox360 Controller'.
-
Check the kernel log for error messages. Run: dmesg | tail -20 immediately after plugging in the device. Look for lines mentioning the device or USB errors. These messages tell you exactly why the device is not working.
Common messages include 'driver not found', 'not enough power', or 'unknown device'. Each message points to a different fix.
-
Install the relevant driver package. For USB network adapters: search your package manager for the chipset name shown in lsusb output. For printers: install cups and the manufacturer's driver package. For audio interfaces: install alsa-utils or pulseaudio packages.
On Ubuntu/Debian: sudo apt search [chipset name]. On Fedora: sudo dnf search [chipset name]. The chipset name is visible in the lsusb output.
-
Disable USB autosuspend for the device. Create a udev rule to prevent power management from sleeping the device. Run: echo 'ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", ATTR{idProduct}=="YYYY", TEST=="power/autosuspend", ATTR{power/autosuspend}="-1"' | sudo tee /etc/udev/rules.d/99-usb-autosuspend.rules — replacing XXXX and YYYY with the vendor and product IDs from lsusb output.
USB autosuspend is a power-saving feature that puts USB devices to sleep when not in use. Some devices do not wake up properly from this state.
-
Try a different USB port, especially a USB 2.0 port if the device is older. Also test without a USB hub — connect directly to the motherboard ports. If using a hub, use a powered one.
USB 3.0 ports (blue colored) can sometimes have compatibility issues with older USB 2.0 devices. The physical USB 2.0 ports (black colored) often work better with older hardware.
When to Call a Professional
USB driver issues on Linux rarely require professional help. However, if the device works on Windows but never appears in lsusb output on Linux, it may use a proprietary protocol that has no Linux support. Check the Linux Hardware Database at linux-hardware.org to confirm whether your device is supported.
Frequently Asked Questions
My USB drive shows up in lsusb but not in the file manager. What is wrong?
This means Linux sees the hardware but has not mounted the file system on it. Run: lsblk in a terminal to see if the drive appears as a block device (like sdb or sdc). If it appears but has no mount point, mount it manually: sudo mount /dev/sdb1 /mnt — replacing sdb1 with the actual device name. If lsblk does not show the drive, run: sudo fdisk -l to check for partition table issues.
How do I find a USB device's vendor and product ID for udev rules?
Run: lsusb in a terminal. Each line shows the bus and device number followed by a code in the format XXXX:YYYY — the first four characters are the vendor ID and the second four are the product ID. For example, in '045e:028e Microsoft Corp.', 045e is the vendor ID and 028e is the product ID. These values are what you put in udev rules and kernel module configuration.
A USB device worked before a kernel update and now it does not. What happened?
Kernel updates sometimes change or remove driver modules, especially for older or niche hardware. Check if the kernel module for your device is still present: run lsmod | grep [driver_name] to see if it is loaded. If the module is missing, you may need to rebuild it for the new kernel using DKMS (Dynamic Kernel Module Support), or install a new version of the driver package. You can also temporarily boot into the previous kernel from the GRUB menu to confirm this is the cause.