Parrot Linux Wi-Fi Not Working: Drivers, Firmware and Fixes

If your Parrot Linux Wi-Fi is not working, the cause is almost always one of four things: the kernel has no driver for your wireless chipset, the driver loads but its firmware file is missing, the radio is blocked by rfkill or a hardware switch, or NetworkManager is misconfigured. This guide works through each of them in order, starting with checks that take thirty seconds and ending with the DKMS driver builds that take a few minutes. Everything below applies to Parrot OS 7.x, which is built on Debian 13, and none of it requires reinstalling the system. Before you start, plug in an Ethernet cable or tether your phone over USB if you can, because several fixes need to download packages.

Step 1: Identify the Wi-Fi chipset

You cannot fix a driver problem without knowing which chip you have. Internal cards show up on the PCI bus, USB dongles on the USB bus. Run both commands and read the output carefully:

lspci -nnk | grep -A3 -i 'network|wireless'
lsusb

The -k flag is the useful part: under each device, Kernel driver in use tells you which module is handling it, and Kernel modules lists what is available. If you see a device but no Kernel driver in use line, the kernel has no driver bound to it. The vendor and device ID in square brackets, for example [8086:2725], is what you search for when a package name is not obvious. Parrot keeps a list of chipsets that are known to work on its supported Wi-Fi chipsets page, and the broader supported hardware page covers laptops as a whole.

Next, confirm whether the kernel created a wireless interface at all:

ip link
iw dev

An interface named wlan0, wlp3s0 or similar means the driver is working and the problem is further up the stack. No wireless interface at all means a driver or firmware problem, which Steps 3 and 4 cover.

Step 2: Quick checks that fix half of all cases

Parrot ships with rfkill, and a soft block is the single most common reason a laptop that worked yesterday has no Wi-Fi today. The airplane-mode key, a lid switch or a stale NetworkManager state can all leave the radio off.

rfkill list
nmcli radio wifi
nmcli device status

If any line says Soft blocked: yes, clear it. If it says Hard blocked: yes, the block is a physical switch or a BIOS setting and no command will override it; check the function keys and the firmware setup screen.

sudo rfkill unblock all
nmcli radio wifi on
sudo systemctl restart NetworkManager

While you are here, make sure NetworkManager is actually the service managing the interface. On a default Parrot install it is, but if you have experimented with systemd-networkd, wicd or manual wpa_supplicant configs, two services can fight over the same device. nmcli device status showing the interface as unmanaged is the tell-tale sign; look in /etc/NetworkManager/conf.d/ and /etc/network/interfaces for leftover rules.

Step 3: Install missing firmware when Parrot Linux Wi-Fi is not working

Most modern Wi-Fi chips need a binary firmware blob loaded at boot. The driver is in the kernel, but the blob lives in a separate package, and if it is missing the interface silently never appears. The kernel log tells you exactly which file it wanted:

sudo dmesg | grep -iE 'firmware|iwlwifi|rtw|ath1|brcm|mt76'

A line such as failed to load iwlwifi-ty-a0-gf-a0-72.ucode or Direct firmware load for rtw88/... failed is your answer. Match the driver name to the firmware package:

Driver in dmesgTypical vendorPackage to install
iwlwifiIntelfirmware-iwlwifi
rtw88, rtw89, rtl8xxxu, r8169Realtekfirmware-realtek
ath9k, ath10k, ath11k, ath12kQualcomm Atherosfirmware-atheros
brcmfmac, brcmsmacBroadcomfirmware-brcm80211
mt76, mt7921e, mt7925eMediaTekfirmware-misc-nonfree

Install the one you need, then reload the driver instead of rebooting:

sudo apt update
sudo apt install firmware-iwlwifi
sudo modprobe -r iwlwifi && sudo modprobe iwlwifi

Swap iwlwifi for your driver name. If you are not sure which package contains a specific file, apt-file finds it: sudo apt install apt-file && sudo apt-file update && apt-file search rtw8822c_fw.bin. Debian documents the firmware situation in detail on its firmware wiki page, and the same package names apply to Parrot because the repositories track Debian.

One subtle variant: the firmware package is installed but too old for a very new chip. Parrot 7.4 moved to the Linux 7.1 kernel, and a newer kernel can request firmware versions that an older firmware package does not yet contain. Run a full system upgrade with parrot-upgrade first; firmware packages update along with everything else.

Step 4: Chipsets that need an out-of-tree driver

Two families of hardware are not covered by the stock kernel and need a DKMS module, which is source code compiled against your running kernel.

Broadcom BCM43xx cards

Older Broadcom cards found in many MacBooks and Dell laptops use the proprietary wl driver:

sudo apt install linux-headers-amd64 broadcom-sta-dkms
sudo modprobe -r b43 ssb bcma brcmsmac
sudo modprobe wl

The modprobe -r line matters: the open-source drivers claim the card first and the proprietary one will not bind while they are loaded. To make that permanent, add the four names to a file in /etc/modprobe.d/ with a blacklist line each.

Realtek USB adapters (8812AU, 8814AU, 8821CU and friends)

These are the adapters most people buy for monitor mode and packet injection in a home lab, and they are also the ones most likely to be dead out of the box, because their drivers have never been merged into the mainline kernel. Search the repository for a DKMS package that matches your chip before downloading anything from GitHub:

apt search dkms | grep -i -E 'rtl|realtek|88'

Install the matching package together with the kernel headers. If no package exists for your exact chip, a build from the vendor or community source tree is the fallback; keep the make and dkms steps out of /root and remember that every kernel upgrade will trigger a rebuild. If that rebuild fails after parrot-upgrade, the symptom is Wi-Fi vanishing right after a reboot, and dkms status shows which module did not build.

Step 5: Secure Boot blocks unsigned modules

On a UEFI machine with Secure Boot enabled, the kernel refuses to load any module that is not signed with a trusted key. Every DKMS module you build yourself falls into that category, so the driver compiles fine and still never loads. The log line to look for is Key was rejected by service or module verification failed:

mokutil --sb-state
sudo dmesg | grep -i 'verification|rejected'

You have two choices: disable Secure Boot in the firmware setup, which is the simplest option on a dedicated testing laptop, or enrol your own Machine Owner Key with mokutil --import and sign the module. Disabling is fine for a lab machine; if you dual boot with Windows and rely on BitLocker, read up on recovery keys before flipping the switch.

Step 6: Wi-Fi connects but keeps dropping or is very slow

A connection that works for a minute and then stalls is usually power management, not a driver bug. NetworkManager enables Wi-Fi power saving by default on many laptops and some chipsets handle it badly. Turn it off with a drop-in file:

sudo tee /etc/NetworkManager/conf.d/wifi-powersave.conf <<'EOF'
[connection]
wifi.powersave = 2
EOF
sudo systemctl restart NetworkManager

The value 2 disables power saving; 3 enables it. Other things worth trying, one at a time so you know which one helped:

  • Disable MAC address randomisation for a specific network if the router drops the client: nmcli connection modify "YourSSID" wifi.cloned-mac-address permanent.
  • Pin the band if the card struggles with 6 GHz or band steering: nmcli connection modify "YourSSID" wifi.band a forces 5 GHz, bg forces 2.4 GHz.
  • Disable 802.11n/ac aggregation on Intel cards that show lots of Microcode SW error lines in dmesg: create /etc/modprobe.d/iwlwifi.conf with options iwlwifi 11n_disable=1 and reload the module.
  • Check for interference from USB 3.0 devices on 2.4 GHz; moving a USB adapter to a short extension cable away from the port often fixes it.

If the whole system feels sluggish rather than just the network, the fixes in the guide to speeding up Parrot Linux are a better starting point.

Step 7: Connected to Wi-Fi but no internet

When NetworkManager shows the connection as active but nothing loads, the radio is fine and you are debugging IP, DNS or a firewall. Work up the stack:

ip addr show wlan0
ip route
ping -c 3 1.1.1.1
ping -c 3 debian.org
resolvectl status 2>/dev/null || cat /etc/resolv.conf

No IP address means DHCP failed; try sudo nmcli connection up "YourSSID" and watch journalctl -u NetworkManager -f in a second terminal. Pinging the IP works but the hostname fails means DNS; check whether a stale /etc/resolv.conf points at an old resolver. On Parrot specifically, two things catch people out. First, if you have been using AnonSurf, make sure it is fully stopped, because it rewrites DNS and routes everything through Tor; sudo anonsurf stop and a NetworkManager restart put things back. Second, a strict nftables or ufw ruleset that blocks outbound DHCP or DNS looks exactly like a Wi-Fi fault. Temporarily disable the firewall to test, then fix the rule.

Wi-Fi inside VirtualBox or VMware

A Parrot virtual machine never sees the host’s Wi-Fi card. The hypervisor presents a virtual Ethernet adapter, and the guest connects through that whether the host is on Wi-Fi or cable. So iw dev showing no wireless interface inside a VM is normal, not a bug. If you need a real wireless interface in the guest for monitor mode, pass a USB adapter through to the VM; the guest then sees the dongle and the driver rules in Steps 3 and 4 apply inside the guest. The VirtualBox installation guide covers the network adapter settings for the common cases.

Wi-Fi on a live USB

The live image includes the same firmware packages as the installed system, so a chip that works installed should work live. The difference is that changes do not survive a reboot unless you set up persistence, so a DKMS driver you build in the live session disappears when you shut down. If you only need Wi-Fi during installation, tethering a phone over USB is the quickest workaround, because USB tethering uses a generic driver that works on practically every chip.

When nothing works

Collect the output of lspci -nnk, lsusb, rfkill list, uname -r and the firmware lines from dmesg, and post them where the Parrot community answers questions; the community page lists the active channels. A post with those five outputs gets answered far faster than one that just says the Wi-Fi is broken. If the card is very new and no driver exists yet, a cheap USB adapter with a well-supported chip such as an Atheros AR9271 or a MediaTek MT7612U is a reliable stopgap that also happens to support monitor mode.

FAQ

Why did Wi-Fi stop working after parrot-upgrade?

Almost always a kernel upgrade. Either a DKMS module failed to rebuild for the new kernel, which dkms status will show, or the new kernel needs a firmware version your firmware package does not have yet. Boot the previous kernel from the GRUB advanced menu to confirm, then fix the module or update the firmware package.

Does Parrot Linux support monitor mode on built-in Wi-Fi?

It depends entirely on the chipset, not on Parrot. Many Intel cards can capture in monitor mode but cannot inject packets; Atheros and some Realtek and MediaTek chips support both. Run iw list | grep -A8 'Supported interface modes' and look for monitor in the list. Only test on networks you own or are authorised to assess.

Is it safe to install non-free firmware on Parrot?

Yes in the practical sense: the firmware packages come from the Debian archive and are the same files the hardware vendor ships for every operating system. They are not open source, which is why Debian keeps them in a separate repository component, but there is no realistic way to use most modern Wi-Fi hardware without them.