Why Linux Won't Connect to WiFi: Deep Troubleshooting

The situation where the Linux operating system refuses to establish a connection to a wireless network is familiar to many users switching from Windows or macOS. Unlike proprietary systems, where drivers are often built in by the hardware manufacturer, in the open source world, support hardware may require manual configuration. The problem could be due to missing firmware for your network adapter, or a conflict between network management services attempting to take control of the device.

Initial diagnostics require understanding what exactly is going on: the system doesn't see wireless networks at all, sees them but doesn't connect, or connects but doesn't transmit traffic. Often, the root cause lies in wpa_supplicant or NetworkManager, which may not work correctly due to errors in the configuration files. It's also worth considering that some distributions disable WiFi card power management by default, which leads to constant connection drops.

It's important not to panic and to rule out possible causes step by step, starting with checking the adapter's physical condition and ending with analyzing system logs. In this article, we'll examine key failure scenarios and provide specific troubleshooting commands, allowing you to restore stable internet access.

Drivers and hardware compatibility

The most common reason why Linux won't connect to WiFi is missing or incorrectly installed drivers. Unlike Windows, where drivers are often included on a disc or downloaded from the manufacturer's website, in Linux they must be integrated into the kernel or installed separately. If your network adapter is very new or, conversely, very old, the standard driver kernel module may not support its functionality in full.

First, you need to identify the model of your network controller. Use the terminal and enter the command lspci for internal cards or lsusb For USB adapters. In the output, look for lines with the words "Wireless," "WiFi," "802.11," or manufacturer names like Broadcom, Realtek, or Intel. If the device is displayed but labeled "Unclaimed" or "Network controller" without further details, the driver is missing.

⚠️ Attention: Some proprietary drivers (such as those for Broadcom) require an internet connection via an Ethernet cable or USB modem to install, as they are not included in the default distribution's free repository.

After identifying the hardware, check the status of the loaded kernel modules. The command lsmod | grep -i wifi or lsmod | grep -i net will show which modules are active. If the module you need isn't loaded, try doing it manually via modprobe, but most often the problem is solved by installing the package linux-firmware or a specific driver through your distribution's package manager.

Interface status diagnostics

If the drivers are installed but there's no connection, you need to check the interface status itself. It's often the case that the interface is in the "DOWN" state or blocked by software. Use the utility for diagnostics. ip, which is a modern replacement for the outdated ifconfigEnter . ip link show and find your wireless interface, it's usually called wlan0, wlp2s0 or similar.

If you see a label next to the interface name NO-CARRIER or lack of a label UP, which means the interface isn't activated. It's also worth checking whether the radio module is blocked by the system. rfkillThis utility manages software and hardware switches for wireless devices. Run the command rfkill list allto see the blocking status.

The table below lists the main blocking conditions and how to resolve them:

Lock type Status in rfkill Unlock command Cause
Hardware blocked yes Switch on the body Physical toggle switch or Fn key
Soft blocked yes rfkill unblock wifi OS software ban
Unblocked no Not required The interface is ready to work

If the interface is blocked programmatically ("Soft blocked"), the command sudo rfkill unblock wifi should remove the restriction. However, if the blocking is hardware-based ("hard blocked"), software methods won't help—you'll need to look for a physical switch on the laptop case or a key combination with an antenna icon.

☑️ Interface diagnostics

Completed: 0 / 4

Network management service conflicts

In modern Linux distributions, WiFi connection is most often handled by NetworkManager, however, it may work in the background wpa_supplicant or systemd-networkdA conflict occurs when two services attempt to control the same interface simultaneously. This is a classic situation where one service "sees" the network and attempts to connect, while the other service drops the connection, believing the interface is free.

To identify a conflict, check the status of the services. On systemd-based systems, use the command systemctl status NetworkManager And systemctl status wpa_supplicantIf you see that both services are active and trying to manage the interface wlan0, you need to disable one of them. Usually NetworkManager is the preferred choice for desktop environments as it provides a user-friendly graphical interface and applets.

To disable unnecessary service use sudo systemctl stop wpa_supplicant and disable autostart via sudo systemctl disable wpa_supplicant, but only if you are sure that it is not required for NetworkManager to work in your configuration. In some cases, wpa_supplicant is a backend for NetworkManager, and disabling it will result in WiFi being completely inoperable.

⚠️ Attention: Before stopping network services, make sure you have access to the system via console (TTY) or Ethernet cable, as you may lose remote access to the server.

How can I determine which service is managing an interface?

Use the `nmcli device status` command. If the device is marked as "unmanaged", it means NetworkManager is ignoring it, and it is likely being managed by another service or the /etc/network/interfaces configuration.

Configuration and password issues

Even with proper hardware and drivers, a configuration error can prevent a connection. Users often encounter incorrect password entry, but Linux has a nuance: keyboard sensitivity at the time of entry. If you enter a password in console mode or through nmtui, make sure that the desired layout is active and the character case complies with the router requirements.

Another common issue is the encryption method. Some older routers use WEP or mixed mode WPA/WPA2, while modern Linux distributions may require a more secure one by default. WPA3 or pure WPA2-PersonalIf you see messages like "Association rejected" or "Authentication failed" in the logs, try changing the security settings on your router or explicitly specifying the encryption method in the configuration file.

To manually connect and check the password, you can use the utility wpa_passphraseIt generates a password hash, which can then be used in the configuration. This helps eliminate character encoding errors.

wpa_passphrase"SSID_network""Password" > /etc/wpa_supplicant/wpa_supplicant.conf

It's also worth checking your IPv4 and IPv6 settings. If your router isn't distributing addresses via DHCP and your Linux machine isn't configured with a static IP address, you won't be able to connect. Make sure you've selected automatic address acquisition (DHCP) in NetworkManager settings if you're not using a static addressing scheme.

📊 What encryption method does your network use?
WPA2-Personal
WPA3-SAE
WPA/WPA2 Mixed
WEP (Open)
Don't know

Energy saving and signal stability

One of the hidden causes of unstable WiFi or constant disconnections is the Linux kernel's aggressive power-saving policy. The system may attempt to conserve power by disabling the WiFi adapter during periods of low activity, leading to connection drops and lengthy reconnection times. This is especially true for laptops running on battery power.

To check your current power saving settings, you can use the utility iwconfigFind the "Power Management" line. If it says "on," try disabling this feature. To temporarily disable it, use the command sudo iwconfig wlan0 power off (replacing wlan0 to the name of your interface). If this solves the problem, the setting must be made permanent through the TLP or NetworkManager configuration.

In addition, it is worth paying attention to the signal level and the noise level of the air. Team iwlist wlan0 scanning will show available networks and signal level. If the signal level is below -75 dBm, connection issues may occur. In this case, changing the channel on your router to a less congested one (for example, 1, 6, or 11 for the 2.4 GHz band) may help.

⚠️ Attention: Disabling power saving will increase your laptop's power consumption. If battery life is more important than network stability, set up a rule to only turn off the power when connected to AC power.

System log analysis

When all visual diagnostic methods have been exhausted, the truth lies in the system logs. Linux maintains detailed logs of network services, and this is where the exact cause of a failure can be found. To view the logs in real time, use the command journalctl with filtering by NetworkManager service or kernel.

Run the command sudo journalctl -f -u NetworkManager and try connecting to the network. Look for keywords in the message stream: "error," "fail," "firmware," and "association." For example, the message "firmware: failed to load" indicates a problem with the firmware files, while "reason=3" (DE_AUTH_LEAVING) may indicate a problem with the router or driver.

For more detailed analysis, you can increase the logging level. Create a configuration file for NetworkManager (for example, in /etc/NetworkManager/conf.d/debug.conf) and add a logging section with the DEBUG level. After restarting the service, the logs will become much more detailed, which will help forum experts quickly determine the root of the problem.

sudo journalctl -u NetworkManager --since"5 minutes ago"

Don't ignore kernel messages (dmesg). WiFi drivers often output critical errors directly to the kernel buffer, which may not be reported to the network management service log. The command dmesg | grep -i firmware is often decisive in finding missing firmware.

Why doesn't Linux see my WiFi adapter even though it works in Windows?

Most likely, Linux lacks proprietary firmware for your adapter. In Windows, the driver contains all the necessary binaries, but in Linux, they are often packaged separately. linux-firmware or require manual installation from repositories.

How do I know which driver I need for my WiFi?

Use the command `lspci -k` or `lsusb -v`. The output will indicate the chipset model (for example, Realtek RTL8821CE). By searching for this model online and searching for "Linux driver," you'll find instructions for installing a specific driver, often from GitHub.

Can I use an Android smartphone as a WiFi adapter for Linux?

Yes, this is possible using USB Tethering. Connect your phone with a cable, enable "Tethering" (USB tethering) in Android settings, and Linux will detect it as a wired Ethernet connection, sharing internet from your phone's WiFi.