Working with wireless networks in Linux-based operating systems often faces the problem of a lack of out-of-the-box drivers. Unlike proprietary systems, where vendors often provide ready-made packages, in the open source world, hardware support depends on the community and the willingness of manufacturers to provide specifications. That's why the first step when connecting a new adapter or troubleshooting connection stability is to find out how to install the Wi-Fi driver in Linux and whether it's compatible with your system.
Understanding which one exactly driver The information used for your network interface is critical for troubleshooting. Without precise information about the chipset model and the kernel module used, it's impossible to find up-to-date instructions for installing or updating software. Users often encounter situations where the interface is visible to the system but doesn't activate, or the connection speed isn't as advertised.
In this article, we'll review proven hardware identification methods, explore using the terminal to obtain detailed information, and learn how to interpret the data obtained. You'll learn how to distinguish an embedded module from a USB dongle, how to check the kernel module loading status, and where to find missing components for your distribution.
Using the lspci utility for internal adapters
Most modern laptops and desktop motherboards are equipped with integrated Wi-Fi modules that connect via the PCI Express bus. Linux has a standard command-line utility for obtaining information about such devices. lspciIt queries the PCI controller and displays a list of all devices connected to it, including network controllers.
To filter out unnecessary information and see only network devices, you need to use a filter key. Enter the command lspci | grep -i network or more specific lspci | grep -i wirelessIn the output, you'll see a line containing the vendor and device ID, and often the chipset model name. For example, this might be a line mentioning Intel Corporation or Realtek Semiconductor Co., Ltd..
⚠️ Note: If the lspci command returns no results for Wi-Fi, this does not always mean the hardware is missing. The device may be disabled at the BIOS/UEFI level or blocked by a switch on the laptop case (RF-kill).
To get the most detailed information, including the kernel driver used (if loaded), you should add the key -k (kernel). Team lspci -k | grep -iA 3 wireless will show not only the device, but also the lines Kernel driver in use (driver used) and Kernel modules (available modules). This is a key diagnostic step: if the "Kernel driver in use" line is missing, the driver for your device is not loaded or installed.
Diagnosing USB Wi-Fi adapters with lsusb
The situation with external USB adapters is radically different from internal cards. They don't use the PCI bus, so the lspci utility won't detect them. To diagnose USB devices in Linux, use the command lsusbIt displays a list of all connected USB controllers and devices, including hubs, keyboards, and network adapters.
Run the command lsusb in the terminal. In the list, you need to look for lines containing the words "Wireless," "Wi-Fi," "802.11," or the names of well-known network chip manufacturers, such as MediaTek, Ralink, Atheros or RealtekEach device is identified by a pair of hexadecimal numbers following the word ID, for example, ID 0bda:b812These numbers (Vendor ID and Product ID) are the unique passport of the device.
Knowing these identifiers allows you to accurately determine the exact chip inside the adapter's plastic case, as the same brand (e.g., TP-Link) may use different chipsets in different revisions of the same model. The driver selection depends on the chipset, not the brand name on the box. If the standard command doesn't provide enough detail, use lsusb -v for Verbose mode, but be prepared for a large volume of output.
Why is Vendor ID and Product ID important?
These codes make it possible to find drivers even for unknown Chinese adapters. A search for "Linux driver ID 0bda:b812" often yields more accurate results than searching by adapter model, as models can change names, while the chip ID remains the same.
Analysis of loaded kernel modules and network interfaces
Once we've determined the physical presence of a device, we need to understand how the operating system interacts with it at the software level. In Linux, drivers are often implemented as kernel modules. The utility lsmod displays a list of all loaded modules. However, since the list can be huge, it is better to use the command lsmod | grep -i wifi or search by the names of popular drivers, such as iwlwifi (for Intel), ath (for Atheros) or rtl (for Realtek).
A more informative tool for network interfaces is the utility ip or outdated but still popular ifconfig. Team ip link show will display all network interfaces. Wi-Fi adapters are usually referred to as wlan0, wlp2s0 or similar (prefix wl (indicates wireless). If the interface is listed, the basic driver is loaded and the device is recognized by the system as a network device.
To obtain detailed information about a specific interface and its associated driver in modern distributions (Ubuntu, Fedora, Debian), the utility is excellent lshw. Team sudo lshw -C network will produce a structured report. In the field configuration you will find a line driver=driver_nameThis is the most direct way to answer the question "which driver is being used right now."
| Team | Purpose of use | Key information in the conclusion | Required rights |
|---|---|---|---|
lspci -k |
Search for PCI devices and drivers | Kernel driver in use | Regular (user) |
lsusb |
Search for USB devices | ID_vendor:ID_product | Regular (user) |
lshw -C network |
Detailed information about the network | configuration: driver=... | Root (sudo) |
nmcli dev |
NetworkManager Device Status | DEVICE, TYPE, STATE | Regular (user) |
Using the modinfo utility for deep analysis
When the driver name is already known (for example, you found iwlwifi via lspci), it becomes necessary to find out its version, license, and supported parameters. A utility is designed for this purpose. modinfoIt reads metadata directly from the kernel module file (.ko), providing technically accurate information.
Run the command modinfo <module_name>, For example, modinfo iwlwifiIn the output you will see the line filename, indicating the physical location of the driver file on the system. The line version will report the module version, which is useful for comparing with documentation or searching for bugs. You can also find the parameter here firmware, which specifies which specific firmware file is required for the device to operate.
☑️ Driver check
Particular attention should be paid to the parameter firmwareIt often happens that the driver itself is in the kernel, but the firmware file (binary blob), which should be in the directory, is missing. /lib/firmwareIf modinfo points to a firmware file that isn't present in the system, Wi-Fi won't work even if the driver is loaded. In this case, you'll need to install the package. linux-firmware or download a specific firmware file manually.
Graphical methods and NetworkManager
Not all users are fans of the command line, and fortunately, modern graphical shells provide tools for basic diagnostics. In desktop environments using NetworkManager (GNOME, Cinnamon, MATE) can access information through the GUI. However, the GUI often hides technical details, such as the kernel module name.
However, the command line utility nmcli (NetworkManager command line interface), which is often bundled, can be very useful and is less complex than lspci. The command nmcli device show will display detailed information about each device. Find the section where GENERAL.TYPE equal wifiThere will be a field in this section. GENERAL.DRIVER, which will directly indicate the module used.
Some distributions (such as Linux Mint or Ubuntu) also include an "Additional Drivers" application. It automatically scans the system for proprietary hardware (often Broadcom or some Realtek brands) and offers to install suitable drivers from the repositories. This is the easiest option for beginners, although it doesn't always provide detailed technical information about what was installed.
⚠️ Note: Graphical utility interfaces may vary depending on the distribution version and Desktop Environment. If you can't find the information you need in the menu, using the terminal (lspci, lsmod commands) is the most reliable and universal method.
What to do if the driver is not found or does not work
The situation where the Linux system does not detect the Wi-Fi adapter or cannot find the driver is not uncommon, especially with new hardware or exotic USB devices. If lspci or lsusb show the device, but the driver does not load (there is no line "Kernel driver in use"), the first thing to do is check for the presence of the package linux-firmwareThe lack of microcode is the most common cause of malfunction.
If the firmware is present but the driver is missing, it's possible your distribution is too old for the new hardware, or conversely, the hardware is too new. In such cases, searching by device ID (for USB) or Device ID (for PCI) on specialized resources, such as linux-hardware.org or forums for a specific distribution. Often, the solution involves updating the kernel to a newer version (the HWE kernel in Ubuntu) or manually compiling the driver from source (DKMS).
For Ubuntu and derivatives users there is a utility ubuntu-drivers. Team sudo ubuntu-drivers devices will scan your system and tell you if there are recommended drivers for your hardware. If the list is empty but the device is present, it's likely supported by the default kernel, and the issue lies in the configuration or firmware.
Frequently Asked Questions (FAQ)
How do I know if my Wi-Fi is blocked by software or hardware?
Use the command rfkill listIt will show the status of all wireless devices. If you see "Soft blocked: yes," then the blocking is software-based (can be removed with the command rfkill unblock wifi). If "Hard blocked: yes" is displayed, then there is a physical switch or key combination (Fn+F...) on the case that needs to be activated.
Where can I find a driver if it's not in the repositories?
The official source is the chipset manufacturer's website (not necessarily the adapter's), but Linux drivers are most often posted on GitHub. Search for "linux driver [chip model] github." The following website is also helpful: wireless.wiki.kernel.org, where the support status of various chips is maintained.
Can a system update break Wi-Fi?
Yes, this is possible. When updating the kernel, dynamically compiled modules (DKMS) must be rebuilt. If this process is interrupted or a header compatibility error occurs, Wi-Fi may stop working after a reboot. In this case, booting to the previous kernel version via the GRUB menu helps.
Why doesn't lsusb see my USB Wi-Fi adapter?
If the adapter is not displayed even in lsusb, check the physical connection. Try a different USB port (preferably USB 2.0, as some older adapters don't work well with 3.0). Also, check the kernel logs with the command dmesg | tail immediately after connecting the device - there may be messages about power errors or an unidentified device.