Fix WiFi not working

WiFi issues on Fedora are usually caused by a missing firmware package, a disabled interface, or a stuck NetworkManager service, and most can be resolved without rebooting.

You rebooted and the WiFi icon is grayed out

You rebooted after a dnf upgrade and the WiFi icon in the system tray is grayed out. Or you just plugged in a USB adapter and the network settings show no wireless devices. The wired connection works, but the wireless radio is silent. This happens often enough that the fix is usually a quick check of the block state, a missing firmware blob, or a driver that failed to load cleanly. A botched driver reload can drop your SSH session. Run these steps from a local terminal or a backup VM if you can.

The stack and where it breaks

The kernel sees the hardware, but something is stopping the data from flowing. Think of the WiFi interface like a radio station. The hardware is the antenna. The driver is the tuner. The firmware is the instruction manual the tuner needs to decode the signal. The block state is the power switch. If the switch is off, the tuner doesn't matter. If the tuner is broken, the antenna is useless. If the manual is missing, the tuner sits idle. Fedora separates these layers to keep the system modular. When WiFi dies, one of these layers has disconnected.

The stack flows from hardware up to userspace. The BIOS exposes the device via ACPI. The kernel loads a driver module. The driver requests a firmware file from /lib/firmware/. The firmware programs the hardware. NetworkManager takes over to handle scanning, authentication, and DHCP. If the interface is missing, the break is in the kernel or firmware layer. If the interface exists but won't connect, the break is in NetworkManager or the block state.

Check the block state

The first check is always the block state. Linux uses rfkill to manage radio frequency devices. A block can be soft or hard. A soft block comes from software. A hard block comes from hardware, like a physical switch, a function key combination, or a BIOS setting. The kernel respects both. If either is set, the radio stays off.

Here is how to list all radio devices and see their current state.

rfkill list all
# list all radio devices and their block state
# output shows ID, name, type, and soft/hard block status
# look for lines containing "Wireless LAN" or "wlan"

If you see Soft blocked: yes, the software has disabled the radio. This often happens after a suspend/resume cycle or a kernel update that resets the state. Unblock it with the command below.

rfkill unblock wifi
# unblock all devices of type wifi
# this clears the soft block flag in the kernel
# the radio should power on immediately

If you see Hard blocked: yes, software cannot override the block. Check the laptop for a physical switch or a function key like Fn+F2. Some laptops disable the radio when the lid is closed. If the hard block persists, check the BIOS settings. Some UEFI firmware has a "Wireless Device Enable" option that must be set to enabled.

Check the physical switch before typing commands. A laptop lid sensor can kill the radio.

Verify the interface exists

If the block state is clear, check whether the kernel has created the network interface. The interface name usually starts with wlp for PCI cards or wlan for USB adapters. If the interface is missing, the driver did not load, or the firmware failed.

Here is how to list all network interfaces, including those that are down.

ip link show
# show all network interfaces including down ones
# look for names starting with wlp or wlan
# if no wireless interface appears, the driver is not loaded

If the interface is missing, check the kernel logs for errors. The dmesg output shows hardware initialization messages. Look for lines mentioning your WiFi card or firmware load failures.

dmesg | grep -iE 'wifi|wlan|firmware'
# filter kernel ring buffer for wireless related messages
# look for errors like "failed to load firmware"
# this output points to the missing component

A common error looks like this:

iwlwifi 0000:03:00.0: firmware: direct-loading firmware iwlwifi-cc-a0-66.ucode failed with error -2

The error failed with error -2 means the firmware file is missing. The kernel tried to load iwlwifi-cc-a0-66.ucode and could not find it. This requires installing the firmware package.

If the interface is missing, the kernel never initialized it. Firmware or driver is the culprit.

Install firmware and reload the driver

Fedora ships firmware packages in the standard repositories. The linux-firmware package contains binary blobs for thousands of devices. These blobs are not open source code. They are compiled instructions provided by hardware vendors that the kernel driver uses to program the device. Fedora includes these in the main repository because the alternative is a non-functional system. The package is large, often over 200 MB, because it covers almost every card Fedora supports.

Here is how to install the main firmware package and refresh the metadata.

sudo dnf install linux-firmware
# install the linux-firmware package
# this package contains blobs for Intel, Realtek, and others
# dnf upgrade --refresh is the normal weekly maintenance command

For Broadcom cards, the firmware is in a separate package. The broadcom-wl package provides the proprietary driver and firmware. Secure Boot may block this module. If you see modprobe: ERROR: could not insert 'wl': Required key not available, you must enroll the Machine Owner Key using mokutil. This is a one-time process per system.

sudo dnf install broadcom-wl
# install the Broadcom proprietary driver
# this package includes the wl kernel module
# secure boot may require mokutil enrollment

After installing firmware, the kernel does not automatically re-read the firmware directory. You must unload and reload the driver module. This forces the driver to request the firmware again. If you are connected via SSH, this will drop the connection. Run this from a local terminal.

Here is how to find the driver name and reload it.

lspci -k | grep -A3 Network
# show PCI devices and kernel driver in use
# grep for Network to filter wireless cards
# the "Kernel driver in use" line shows the module name

Once you have the driver name, reload it. Replace iwlwifi with your actual driver name.

sudo modprobe -r iwlwifi && sudo modprobe iwlwifi
# unload the driver to clear bad state
# reload the driver to pick up new firmware
# the && ensures reload only happens if unload succeeds

Reload the driver after installing firmware. The kernel won't re-read the firmware directory automatically.

Reset NetworkManager state

If the interface exists and is unblocked, but connections fail, NetworkManager may have lost track of the state. NetworkManager manages the connection lifecycle. It handles scanning, authentication, DHCP, and DNS. When you run nmcli device wifi connect, NetworkManager creates a connection profile. This profile is stored in /etc/NetworkManager/system-connections/. The file contains the SSID, security type, and password. NetworkManager reads these files on startup and automatically reconnects to known networks.

Config files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/. If you edit connection files manually, run nmcli connection reload to apply changes without restarting the service.

Here is how to restart NetworkManager to reset the connection state.

sudo systemctl restart NetworkManager
# restart the service to reset connection state
# this does not drop wired connections usually
# systemctl status NetworkManager shows recent log lines

Always check the status before restarting. The systemctl status command shows recent log lines and the current state in one view. This helps you see if the service is crashing or just stuck.

Restart NetworkManager only after checking the interface state. Restarting the service won't fix a missing driver.

Verify the connection

Once the interface is up and NetworkManager is running, verify the connection. Use nmcli to scan for networks and connect. nmcli is the command-line interface for NetworkManager. It is faster than the GUI for troubleshooting and works over SSH.

Here is how to scan for available networks.

nmcli device wifi list
# scan for available networks
# output shows SSID, signal strength, and security
# if the list is empty, the interface may still be blocked

If the list shows networks, connect to one. The command below connects and saves the profile.

nmcli device wifi connect "MyNetwork" password "mypassword"
# connect to the specified SSID
# saves the connection profile for auto-connect
# the profile persists across reboots

Run nmcli connection show to see saved profiles. The connection persists across reboots.

Common pitfalls

Secure Boot on Fedora is enabled by default on many UEFI systems. This means the kernel will refuse to load any kernel module that is not signed with a key trusted by the firmware. The broadcom-wl package and some iwlwifi variants may require you to enroll a Machine Owner Key. If you see modprobe: ERROR: could not insert 'wl': Required key not available, Secure Boot is blocking the module. You must reboot into the MokManager interface to enroll the key. This is a one-time process per system.

Dual booting with Windows can cause hardware lock issues. Windows Fast Startup leaves the WiFi card in a suspended state when you shut down. Fedora cannot claim the device because Windows still holds the lock. Disable Fast Startup in Windows to prevent this. Go to Power Options and turn off "Turn on fast startup".

SELinux denials rarely affect WiFi, but they can block NetworkManager from reading configuration files. If you see connection failures after changing permissions, check the logs. SELinux denials show up in journalctl -t setroubleshoot with a one-line summary. Read those before disabling SELinux. The journalctl -xe command reads better than journalctl alone. The x flag adds explanatory text and the e flag jumps to the end. Most sysadmins type journalctl -xeu NetworkManager muscle-memory style.

Disable Windows Fast Startup if you dual boot. It locks the WiFi card and Fedora cannot claim it.

When to use which tool

Use rfkill unblock wifi when the interface exists but rfkill list reports Soft blocked: yes. Use sudo dnf install linux-firmware when dmesg shows a firmware load failure or the interface is missing entirely. Use modprobe -r followed by modprobe when you have updated firmware and need the kernel to load the new blob. Use sudo systemctl restart NetworkManager when the interface is up and associated but IP address assignment fails. Use mokutil --sb-state when you suspect Secure Boot is preventing a proprietary driver from loading.

Where to go next