Linux Hardware Compatibility: What Works and How to Check
Check GPU, Wi-Fi, and printer compatibility before installing Linux. Learn lspci, lsusb, firmware packages, and the best lookup resources for your hardware.
Before you start
- ▸A live USB of your chosen distro, or an existing Linux installation
- ▸pciutils and usbutils packages installed (sudo apt/dnf/pacman install pciutils usbutils)
- ▸Internet access for downloading firmware and driver packages
- ▸sudo or root access
Hardware compatibility is the most common stumbling block for Linux newcomers. Before you wipe a drive or dual-boot a laptop, five minutes of checking can save hours of frustration. This guide walks you through reading your hardware list, understanding what Linux supports out of the box, hunting down firmware packages, and where to look when something still refuses to work.
Why Hardware Compatibility Matters
Linux supports an enormous range of hardware, but support quality varies. A device can fall into one of three categories:
- Works out of the box — driver is built into the kernel, no extra steps needed.
- Needs firmware or a proprietary driver — the kernel driver exists, but requires a non-free firmware blob or a vendor-supplied module (common with Wi-Fi chips and NVIDIA GPUs).
- Not supported — no driver exists, or the only driver is Windows-only. This is rare for mainstream hardware but still happens with brand-new or obscure devices.
The categories that trip people up most often are Wi-Fi adapters, discrete GPUs, and occasionally printers and Bluetooth controllers. Check these first.
Reading Your Hardware Before Installing
If you are still on Windows or macOS, pull your hardware IDs before switching. On Windows, open Device Manager and note the PCI and USB IDs under each device's Properties → Details → Hardware IDs. On macOS, use Apple Menu → About This Mac → System Report.
On an existing Linux system — or from a live USB — use the tools below.
lspci — PCI Devices
lspci lists every device on your PCI/PCIe bus: GPUs, Wi-Fi cards, Ethernet controllers, NVMe controllers, and sound cards. Install it if missing (it lives in the pciutils package).
lspci -nn
The -nn flag appends the numeric vendor:device ID in brackets, which is what you need when searching compatibility databases. Example output line:
# Output varies; a typical Wi-Fi entry looks like:
# 02:00.0 Network controller [0280]: Intel Corporation Wi-Fi 6 AX200 [8086:2723]
To narrow down to graphics or network hardware specifically:
lspci -nn | grep -iE 'vga|3d|network|wireless'
lsusb — USB Devices
lsusb covers USB Wi-Fi dongles, webcams, printers, Bluetooth adapters, and external audio devices. It lives in usbutils.
lsusb
For the full ID string needed for compatibility lookups:
lsusb -v 2>/dev/null | grep -E 'idVendor|idProduct|iProduct'
If that floods your screen, use lsusb -d VENDOR:PRODUCT -v for a single device once you know its ID.
Checking What Kernel Driver Is Currently Bound
Once Linux is running, lspci -k shows which kernel module is loaded for each device:
lspci -k | grep -A3 'Network\|VGA\|3D'
If you see Kernel driver in use: followed by a module name, that device has a working driver. If the line is absent, the device is unsupported or the driver module is missing.
Checking GPU Compatibility
Integrated Intel and AMD GPUs work well out of the box on modern kernels — drivers are upstream. Discrete NVIDIA cards require a choice:
- Nouveau — open-source, built into the kernel, limited 3D and power management on newer Ampere/Ada cards.
- NVIDIA proprietary driver — full performance and Wayland support (via NVIDIA's GBM backend, driver ≥ 495), but requires installation.
Install the proprietary NVIDIA driver:
# Debian/Ubuntu
sudo apt install nvidia-driver firmware-misc-nonfree
# Fedora (RPM Fusion required)
sudo dnf install akmod-nvidia xorg-x11-drv-nvidia-cuda
# Arch
sudo pacman -S nvidia nvidia-utils
After installing, reboot. On Wayland sessions, confirm the driver is active with:
nvidia-smi
Checking Wi-Fi Compatibility
Wi-Fi is the most common pain point. Intel Wi-Fi chips (iwlwifi driver) and most Atheros chips work well but need non-free firmware blobs. Broadcom chips are notoriously awkward. Realtek USB dongles vary widely.
Installing Firmware Packages
On Debian/Ubuntu, the firmware is split into free and non-free repositories. Enable non-free (Debian) or multiverse (Ubuntu) then install:
# Debian (edit /etc/apt/sources.list to add non-free, then:)
sudo apt update && sudo apt install firmware-iwlwifi firmware-realtek firmware-atheros
# Ubuntu — most firmware ships in linux-firmware already
sudo apt install linux-firmware
# Fedora/RHEL — firmware is in linux-firmware
sudo dnf install linux-firmware
# Arch
sudo pacman -S linux-firmware
For Broadcom on Debian/Ubuntu:
sudo apt install broadcom-sta-dkms
After installing firmware, reload the driver without rebooting:
sudo modprobe -r iwlwifi && sudo modprobe iwlwifi
Confirming the Interface Is Up
ip link show
Look for a wlan0 or wlp* interface. If it is absent after loading firmware, check kernel messages for errors:
sudo dmesg | grep -iE 'firmware|wlan|iwl|brcm'
Checking Printer Compatibility
Most printers work through CUPS. The key lookup resource is the OpenPrinting database. Search your model there — it will tell you the recommended driver and whether the printer is perfectly, mostly, or partially supported.
# Install CUPS and common driver sets
sudo apt install cups printer-driver-all # Debian/Ubuntu
sudo dnf install cups gutenprint # Fedora
sudo pacman -S cups gutenprint # Arch
Enable and start CUPS, then access the web UI at http://localhost:631:
sudo systemctl enable --now cups
HP printers have the best Linux support via the hplip package. Brother and Canon require downloading PPD files from the manufacturer's Linux support page.
Where to Look Up Compatibility
- linux-hardware.org — community-submitted probe database; search by device ID or laptop model.
- OpenPrinting — authoritative printer support database.
- WikiDevi — detailed Wi-Fi chipset identification, useful for USB dongles that hide their real chip.
- Your distro's hardware compatibility list (HCL) — Ubuntu Certified, Red Hat HCL, etc.
https://pci-ids.ucw.czandhttps://usb-ids.gowdy.us— raw vendor/device ID lookups.
Verification Step
After installing drivers and firmware, run a full hardware probe with hw-probe. It generates a detailed report and optionally uploads it to linux-hardware.org so others can benefit:
sudo apt install hw-probe # Debian/Ubuntu
sudo dnf install hw-probe # Fedora
sudo pacman -S hw-probe # Arch
sudo hw-probe -all -upload
The command prints a URL to your probe. Review it locally or share it when asking for help — it lists every device and whether a driver is loaded.
Troubleshooting
Device present in lspci but no driver loads
Check if a module exists but is blocked by a kernel parameter or a conflicting module:
sudo dmesg | grep -i 'error\|fail\|missing'
cat /proc/modules | grep YOUR_MODULE
Also check /etc/modprobe.d/ for any blacklist entries that might block the driver.
Wi-Fi firmware loads but no networks appear
Confirm the interface is not soft-blocked by rfkill:
rfkill list all
rfkill unblock wifi
NVIDIA driver installed but Wayland session falls back to X11
Verify the driver version is 495 or newer and that nvidia-drm.modeset=1 is set as a kernel parameter. On systemd-boot or GRUB, add it to your kernel command line and reboot.
Frequently asked questions
- How do I check hardware compatibility before installing Linux, without a Linux system?
- Boot from a live USB of your target distro — everything detected by the live environment will work on install. Alternatively, note your PCI and USB device IDs from Windows Device Manager and search them on linux-hardware.org before touching your drive.
- My Wi-Fi card is listed by lspci but no wireless interface appears. What is wrong?
- The most common causes are missing firmware (install linux-firmware or a chip-specific package like firmware-iwlwifi) or a soft block from rfkill. Run 'rfkill list all' and 'sudo dmesg | grep firmware' to narrow it down.
- Do I need the proprietary NVIDIA driver, or is Nouveau good enough?
- For desktop use, gaming, or CUDA workloads, install the proprietary driver. Nouveau works for basic display output on older cards but lacks performance and has limited power management on Ampere (RTX 30xx) and Ada (RTX 40xx) hardware.
- Will my USB printer work without installing anything extra?
- Plug it in and check CUPS at http://localhost:631 — many printers are auto-detected via IPP Everywhere or driverless printing. If not, search the OpenPrinting database for your model and install the recommended PPD or driver package.
- What does it mean when lspci shows a device but lspci -k shows no driver?
- The kernel recognises the hardware ID but has no module loaded for it. Either the driver module is missing from your kernel build, the required firmware blob is absent, or the module is blacklisted in /etc/modprobe.d/. Check dmesg for error messages pointing to the specific cause.
Related guides
How to Back Up Your Linux System
Learn how to back up your Linux system using Timeshift, rsync, Borg, and Restic — then tie it all together with a practical 3-2-1 backup routine.
How to Choose a Linux Distribution
Match a Linux distro to your real needs — desktop, server, rolling vs LTS, hardware quirks, and package ecosystems — without wading through marketing noise.
How to Dual-Boot Linux and Windows
Shrink the Windows partition, install Linux without breaking the bootloader, configure GRUB, and handle Secure Boot — all in the correct order.
10 Things to Do After Installing Linux
Ten essential post-install steps for any Linux desktop: updates, drivers, firewall, codecs, backups, SSH hardening, and service cleanup — all with modern commands.