How to Fix WiFi Adapter Not Detected on Fedora

Install the missing WiFi driver firmware using dnf and restart NetworkManager to detect the adapter on Fedora.

You installed Fedora and the WiFi icon is gone

You just finished a fresh install of Fedora Workstation. The desktop loads, the updates check, and you click the network icon. The WiFi toggle is missing. Or it's grayed out with "No WiFi adapter found." You check the router, you check the physical switch on the laptop, and you're stuck staring at a wired cable you don't want to use. This is the classic missing firmware or soft-blocked scenario. Fedora ships with a clean kernel, but proprietary firmware blobs sometimes need a separate handshake to get your hardware talking.

What's actually happening

The Linux kernel contains the driver code that tells the operating system how to talk to your WiFi chip. The firmware is the microcode that lives inside the chip itself. Think of the kernel driver as the translator and the firmware as the native language the hardware speaks. Fedora includes open-source drivers in the kernel, but many manufacturers keep the firmware proprietary. When the kernel loads the driver but can't find the firmware file, the device initializes but refuses to function. The adapter exists, but it's mute.

Sometimes the hardware is there and working, but a switch in the BIOS or a software toggle in rfkill has cut the power. We need to distinguish between three states. The driver is missing, meaning the kernel doesn't have the code to talk to the chip. The firmware is missing, meaning the driver is loaded but the chip won't execute instructions without its microcode. The device is blocked, meaning the hardware is functional but a radio kill-switch has disabled transmission.

Run lspci to see if the kernel even detects the hardware. If the adapter doesn't appear in lspci, the issue is likely a BIOS setting, a hardware failure, or a USB adapter that requires lsusb instead. If the adapter appears but WiFi is dead, follow the steps below to load the correct software stack.

Identify the hardware and check for blocks

Here's how to check whether the kernel sees the adapter and which driver is attached.

lspci -k | grep -A 3 -i network
# WHY: Lists PCI devices, filters for network controllers, and shows kernel driver status.
# The line "Kernel driver in use:" tells you if a driver is active.
# The line "Kernel modules:" lists candidate drivers available in the kernel.
# If "Kernel driver in use:" is blank, the driver hasn't loaded yet.

If you are using a USB WiFi adapter, lspci won't show it. Use lsusb to find the vendor and product ID, then cross-reference with the firmware package names.

Next, check if a software or hardware switch has disabled the radio. This is the most common cause of a "detected but dead" adapter.

rfkill list
# WHY: Displays the block state for all wireless devices.
# "Soft blocked: yes" means a software command disabled the radio.
# "Hard blocked: yes" means a physical switch or BIOS setting disabled it.
# You can fix soft blocks from the terminal. Hard blocks require a physical toggle.

If rfkill shows a soft block, unblock it immediately.

sudo rfkill unblock wifi
# WHY: Clears the software block on WiFi devices.
# This restores the radio state without rebooting.
# Run rfkill list again to confirm "Soft blocked: no".

Reboot before you debug. Half the time the symptom is gone after clearing the block and reloading the module.

Install the missing firmware or driver

If the driver is missing or the firmware is absent, you need to install the correct package. Fedora separates firmware from the kernel to comply with licensing. The package name usually matches the driver name or the chipset vendor.

Here's how to install the firmware for common adapters. Replace the package name with the one matching your hardware.

sudo dnf install kmod-wl
# WHY: Installs the proprietary Broadcom driver as a pre-compiled kernel module.
# 'kmod' packages are preferred over 'akmod' when available.
# 'kmod' installs instantly and works with Secure Boot without extra steps.
# 'akmod' builds the module from source, which requires kernel-devel and build tools.

For Intel WiFi chips, the firmware is often in a separate package.

sudo dnf install iwlwifi-firmware
# WHY: Installs the Intel WiFi firmware blobs.
# The kernel driver 'iwlwifi' is built-in, but the firmware files are separate.
# This package provides the .ucode files the driver requests at boot.

For Realtek chips, you may need a driver module.

sudo dnf install kmod-rtw89
# WHY: Installs the Realtek rtw89 driver module.
# Newer Realtek chips use the rtw89 driver. Older chips may need rtw88.
# Check lspci output for the exact model to pick the right package.

If you are unsure of the package name, search the repository.

dnf search firmware | grep -i wifi
# WHY: Searches package names and descriptions for WiFi-related firmware.
# This helps you find the correct package if the vendor name isn't obvious.
# Look for packages matching your chipset vendor like 'iwlwifi', 'ath10k', or 'brcm'.

Run journalctl -xe after installing firmware. The x flag adds explanatory text and the e flag jumps to the end. Most sysadmins type journalctl -xeu NetworkManager muscle-memory style to see if the service picked up the new hardware.

Handle Secure Boot and module signing

Fedora enables Secure Boot by default. Secure Boot prevents unsigned kernel modules from loading. This affects akmod packages and sometimes kmod packages depending on how they were built.

If you installed an akmod package and the driver still doesn't load, Secure Boot is likely blocking it. The akmod build process creates a module, but that module isn't signed with a key trusted by the firmware. You need to enroll the Machine Owner Key (MOK) or switch to a kmod package.

Here's how to check if Secure Boot is active and blocking modules.

mokutil --sb-state
# WHY: Reports whether Secure Boot is enabled on the system.
# If Secure Boot is enabled, unsigned modules will be rejected.
# 'akmod' modules require enrollment. 'kmod' modules from Fedora are usually pre-signed.

If you must use akmod, Fedora provides a workflow to sign the module. The installation script usually prompts you to set a password for MOK enrollment. If you missed the prompt, you can trigger it manually.

sudo mokutil --import /etc/pki/akmods/certs/public_key.der
# WHY: Imports the akmod signing key for MOK enrollment.
# This prepares the key to be enrolled during the next reboot.
# You will be asked to set a password. Remember this password.

Reboot the system. During boot, a blue MOK management screen will appear. Enter the password you set to enroll the key. After enrollment, the module will load successfully.

Use kmod packages when you want pre-compiled binaries that install instantly and work with Secure Boot out of the box. Use akmod packages when a pre-compiled module isn't available for your kernel version and you have build tools installed. Use rfkill unblock when the hardware is detected but the software toggle has disabled the radio. Use modprobe when you need to manually load a driver to test it before making the change permanent. Use a USB WiFi adapter when the internal card is unsupported and you need a temporary workaround.

Trust the package manager. Manual file edits drift, snapshots stay.

Verify the connection

Once the driver and firmware are loaded, verify that NetworkManager sees the adapter and can scan for networks.

Here's how to confirm the adapter is functional and scanning.

nmcli device wifi list
# WHY: Queries NetworkManager for available WiFi networks.
# If this returns a list of SSIDs, the adapter is functional.
# An empty list or error indicates the issue persists.
# Use 'nmcli device status' to check the device state if the list is empty.

If nmcli returns a list, click the network icon and connect. If the list is empty but lspci shows the driver loaded, check the logs for firmware errors.

journalctl -k | grep -i firmware
# WHY: Filters kernel logs for firmware-related messages.
# Look for "Direct firmware load failed" or "request firmware failed".
# These errors indicate the driver is active but missing the correct .ucode file.

If you see a firmware error, double-check the package name. Some chips require multiple firmware files. The error message will specify the exact filename, like iwlwifi-cc-a0-66.ucode. Search for that filename in the repository.

dnf provides */iwlwifi-cc-a0-66.ucode
# WHY: Finds the package that provides a specific firmware file.
# This is useful when the error message names the missing file directly.
# Install the returned package to resolve the missing firmware.

Common pitfalls and error patterns

Secure Boot blocking akmod is the most frequent trap. If you see modprobe: FATAL: Module wl not found in directory /lib/modules/..., the module build failed or was rejected. Check journalctl -k | grep -i modprobe for the rejection reason. Switch to kmod if available.

Driver conflicts happen with Realtek and Atheros chips. The kernel might load a generic driver that conflicts with the specific one. You may need to blacklist the conflicting module. Config files in /etc/modprobe.d/ are user-modified. Files in /usr/lib/modprobe.d/ ship with the package. Edit /etc/. Never edit /usr/lib/.

# /etc/modprobe.d/blacklist-ath9k.conf
blacklist ath9k
# WHY: Prevents the ath9k driver from loading automatically.
# Use this when ath9k conflicts with ath10k on certain Atheros chips.
# The specific driver will take over and function correctly.

USB adapters sometimes require a reboot to register with the USB subsystem. If lsusb shows the device but dmesg shows no driver activity, unplug and replug the adapter. If that fails, reboot. The kernel caches USB device states and won't reload until a restart.

Check the physical switch. The best driver in the world can't fix a cut wire. Many laptops have a hardware switch or a key combination like Fn+F2 that disables WiFi at the circuit level. rfkill will report this as a hard block. No terminal command can override a hard block.

When to use this approach versus alternatives

Use kmod packages when you want pre-compiled binaries that install instantly and work with Secure Boot without extra steps. Use akmod packages when a pre-compiled module isn't available for your kernel version and you have build tools installed. Use rfkill unblock when the hardware is detected but the software toggle has disabled the radio. Use modprobe when you need to manually load a driver to test it before making the change permanent. Use a USB WiFi adapter when the internal card is unsupported and you need a temporary workaround.

Where to go next