}

Fix "RTNETLINK answers: Operation not possible due to RF-kill" in Linux

Fix "RTNETLINK answers: Operation not possible due to RF-kill" in Linux

When you run ip link set wlan0 up or ifconfig wlan0 up and see:

RTNETLINK answers: Operation not possible due to RF-kill

the interface is being blocked by the RF-kill subsystem. The network interface is not broken — it is intentionally prevented from transmitting radio signals. This article explains what RF-kill is and how to unblock the interface.

What is RF-kill

RF-kill is a Linux kernel mechanism that controls wireless radio transmitters. It exists for two reasons: regulatory compliance (some environments prohibit wireless transmission) and power management. The kernel tracks the state of every wireless device through the rfkill subsystem.

There are two independent types of blocks:

Block type Controlled by How to clear
Software block Kernel / user space rfkill unblock command
Hardware block Physical switch or firmware Physical switch on the device

A device can be blocked by either type, or both at once. A software block can be lifted from the command line. A hardware block cannot be changed in software — it requires a physical action (flipping a switch, pressing a key combination) or a firmware update.

Step 1: Check the current rfkill state

Install the rfkill utility if it is not present (it is part of the util-linux package on most distributions and is usually already installed):

rfkill list

Example output when WiFi is soft-blocked:

0: phy0: Wireless LAN
    Soft blocked: yes
    Hard blocked: no
1: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no

Example output when WiFi is hard-blocked (physical switch off):

0: phy0: Wireless LAN
    Soft blocked: yes
    Hard blocked: yes

If Hard blocked: yes appears, see the hardware switch section below. If only Soft blocked: yes appears, continue to step 2.

Step 2: Remove the software block

To unblock WiFi specifically:

sudo rfkill unblock wifi

To unblock all radio devices at once (Bluetooth, WiFi, WiMAX, etc.):

sudo rfkill unblock all

After running this, verify the state:

rfkill list

Both Soft blocked and Hard blocked should now show no (assuming no hardware block exists). Now bring the interface up:

sudo ip link set wlan0 up

Or with the older ifconfig:

sudo ifconfig wlan0 up

Step 3: If the hardware block is active

If rfkill list shows Hard blocked: yes, the software command cannot help. The block is coming from either a physical switch or the device firmware.

Check for a physical WiFi switch on the laptop. Many older laptops have a dedicated slider switch on the front or side, or a function key combination (commonly Fn+F2, Fn+F3, or similar) that toggles the wireless radio. The key usually has a wireless antenna icon.

On some laptops, the BIOS/UEFI has a setting to enable or disable the wireless adapter. Reboot into the UEFI settings (usually by pressing F2 or Delete at startup) and look for a wireless or network section.

On some Dell and HP laptops, a killswitch triggered in the BIOS can cause a persistent hardware block that survives reboots. In this case the BIOS setting must be changed to lift the block.

After enabling the physical switch or changing the BIOS setting, boot back into Linux and run rfkill list again. If the hardware block is now gone, run rfkill unblock wifi to also clear any lingering software block.

NetworkManager approach

If you are using NetworkManager, you can re-enable WiFi through nmcli without touching rfkill directly:

nmcli radio wifi on

This issues the rfkill unblock call internally. You can check the radio state with:

nmcli radio wifi

Which returns enabled or disabled. If it returns disabled even after running nmcli radio wifi on, and rfkill list shows a hardware block, the physical switch issue must be resolved first.

Kernel module approach

In rare cases, a WiFi driver module loads with the radio disabled. Some drivers expose a module parameter to control this. For example, the ath9k driver has a nohwcrypt parameter, and some Realtek drivers have power management parameters that can interfere.

Check which module is driving the interface:

sudo lshw -C network
# or
ls -la /sys/class/net/wlan0/device/driver

Check module parameters:

systool -v -m ath9k 2>/dev/null | grep -i rfkill

If a module parameter is causing the block, you can pass a different value at load time:

sudo modprobe -r ath9k
sudo modprobe ath9k

Then check rfkill list again.

Making the unblock persist across reboots

By default rfkill unblock wifi takes effect immediately but does not survive a reboot if the system re-applies a software block on startup.

On systems using NetworkManager, enabling WiFi through nmcli radio wifi on writes the state to NetworkManager's configuration, which is restored at boot. This is the most reliable method.

If you are not using NetworkManager, you can add the unblock command to a systemd service or to /etc/rc.local. The cleaner approach is a systemd oneshot service:

# /etc/systemd/system/rfkill-unblock-wifi.service
[Unit]
Description=Unblock WiFi rfkill at boot
After=network-pre.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/rfkill unblock wifi
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Enable it:

sudo systemctl daemon-reload
sudo systemctl enable rfkill-unblock-wifi.service

Summary

The "RTNETLINK answers: Operation not possible due to RF-kill" error means the wireless interface is blocked by the rfkill subsystem. The fix depends on the block type:

  • Software block only: run sudo rfkill unblock wifi and then bring the interface up.
  • Hardware block: flip the physical WiFi switch, use the laptop's function key combination, or check BIOS/UEFI settings.
  • NetworkManager: use nmcli radio wifi on as a simpler alternative.
  • Persistence: use NetworkManager's built-in state management or a systemd service to ensure the unblock survives reboots.