Arch Linux does not come with a GUI network manager by default — and that is a feature, not a flaw. iwd (iNet Wireless Daemon) is a modern, lightweight wireless daemon developed by Intel that works beautifully from the terminal. This guide walks you through everything: first-time setup, connecting to a network, managing saved profiles, and fixing the common problems that trip people up.


What Is iwd and iwctl?

iwd is the background daemon that manages your wireless hardware. iwctl is the interactive command-line client you use to talk to it. Together they replace older tools like wpa_supplicant + dhcpcd with a single, clean solution that handles authentication, DHCP, and reconnection automatically.

Component Role
iwd Background daemon — manages Wi-Fi hardware, authentication, roaming
iwctl Interactive CLI to control iwd
/var/lib/iwd/ Where saved network profiles (passwords) are stored

Step 1 — Install and Start iwd

On a fresh Arch install, iwd may not be running yet.

1
2
3
4
5
6
7
8
# Install iwd
sudo pacman -S iwd

# Start the daemon now
sudo systemctl start iwd

# Enable it to start automatically on every boot
sudo systemctl enable iwd

Verify it is running:

1
systemctl status iwd

You should see Active: active (running). If it shows failed, check for conflicts with other network managers (see the Troubleshooting section at the end).


Step 2 — Enter the iwctl Shell

iwctl has an interactive shell mode — the easiest way to work with it. Launch it:

1
iwctl

Your prompt changes to [iwd]#. All commands below are typed inside this shell unless noted otherwise.

To exit at any time:

[iwd]# quit

You can also run one-off commands without entering the shell by passing arguments directly:

1
2
iwctl device list
iwctl station wlan0 scan

Step 3 — Find Your Wireless Interface Name

[iwd]# device list

Sample output:

                            Devices
----------------------------------------------------------------------
  Name                  Address               Powered  Adapter  Mode
----------------------------------------------------------------------
  wlan0                 b8:27:eb:7d:44:9a     on       phy0     station

Your interface name is in the Name column — typically wlan0, wlp2s0, or similar. Note it down — you will use it in every command that follows.


Step 4 — Scan for Available Networks

Before connecting, scan to discover nearby networks:

[iwd]# station wlan0 scan

This command returns immediately — the scan runs in the background. Wait a second, then display the results:

[iwd]# station wlan0 get-networks

Sample output:

                         Available networks
----------------------------------------------------------------------
    Network name                    Security            Signal
----------------------------------------------------------------------
    MyHomeNetwork                   psk                 ****
    OfficeWiFi                      psk                 ***
    CoffeeShop_Guest                open                **
    Neighbor_5G                     psk                 *
  • psk — WPA/WPA2 password-protected
  • open — no password required
  • Signal bars: **** = strongest, * = weakest

Step 5 — Connect to a Network

Connecting to a Password-Protected Network (WPA/WPA2)

[iwd]# station wlan0 connect "MyHomeNetwork"

iwctl will prompt you for the passphrase:

Type the network passphrase for MyHomeNetwork psk.
Passphrase: ▌

Type your password and press Enter. If the passphrase is correct, iwd connects and saves the profile automatically — you will not need to enter it again.

Connecting to an Open Network (No Password)

[iwd]# station wlan0 connect "CoffeeShop_Guest"

No passphrase prompt — it connects immediately.

Passing the Passphrase Inline (Non-Interactive)

Useful in scripts or when you want to skip the prompt:

1
iwctl --passphrase "YourPassword" station wlan0 connect "MyHomeNetwork"

Step 6 — Verify the Connection

Check the current connection status:

[iwd]# station wlan0 show

Sample output:

                         Station: wlan0
----------------------------------------------------------------------
  Settable  Property              Value
----------------------------------------------------------------------
            State                 connected
            Device                wlan0
            Mode                  station
            Connected network     MyHomeNetwork
            IPv4 address          192.168.1.105
            IPv6 address          fe80::ba27:ebff:fe7d:449a
            Scanning              no

State: connected and a listed IPv4 address confirm a successful connection.

You can also verify from outside iwctl:

1
ping -c 3 archlinux.org

Step 7 — Check DHCP (If You Have No IP Address)

iwd handles authentication but does not assign your IP address — that is done by a DHCP client. On most Arch setups this is handled automatically by systemd-networkd or NetworkManager, but on a minimal install you may need to request an IP manually.

Create a network profile for wireless interfaces:

1
sudo nano /etc/systemd/network/25-wireless.network

Add the following content:

1
2
3
4
5
[Match]
Name=wlan0

[Network]
DHCP=yes

Then enable and start the service:

1
2
sudo systemctl enable --now systemd-networkd
sudo systemctl enable --now systemd-resolved

Option B — dhcpcd (manual, quick)

1
sudo dhcpcd wlan0

Enabling Built-In DHCP in iwd

iwd has its own built-in DHCP client that can replace systemd-networkd for wireless entirely. Enable it in /etc/iwd/main.conf:

1
2
sudo mkdir -p /etc/iwd
sudo nano /etc/iwd/main.conf

Add:

1
2
[General]
EnableNetworkConfiguration=true

Restart iwd:

1
sudo systemctl restart iwd

With this option, iwd handles both authentication and DHCP — no separate DHCP daemon needed for Wi-Fi.


Managing Saved Network Profiles

Every network you successfully connect to is saved as a profile in /var/lib/iwd/. Profiles are plain text files named after the network SSID.

View All Saved Networks

[iwd]# known-networks list

Sample output:

                         Known Networks
----------------------------------------------------------------------
    Name                            Type       Hidden  Last connected
----------------------------------------------------------------------
    MyHomeNetwork                   psk        no      Sunday, ...
    OfficeWiFi                      psk        no      Monday, ...

Connect to a Saved Network

iwd reconnects to known networks automatically. To connect manually:

[iwd]# station wlan0 connect "MyHomeNetwork"

No passphrase needed — it reads from the saved profile.

Forget a Network (Remove Saved Profile)

[iwd]# known-networks "MyHomeNetwork" forget

This deletes the saved passphrase. The next connection attempt will ask for the password again.


Connecting to a Hidden Network

If the SSID is not broadcast, use connect-hidden:

[iwd]# station wlan0 connect-hidden "HiddenNetworkSSID"

iwctl will prompt for the passphrase. The hidden network will be saved and auto-connected in the future.


Disconnecting

[iwd]# station wlan0 disconnect

Checking Connection State Without Entering iwctl

Quick status check from a regular terminal prompt:

1
2
3
4
5
6
7
8
# Show connection state
iwctl station wlan0 show

# List all interfaces
iwctl device list

# List known (saved) networks
iwctl known-networks list

Auto-Connect Behavior

Once a network profile is saved, iwd will automatically reconnect to it whenever:

  • The system boots (if iwd.service is enabled)
  • The interface comes back up after being disabled
  • The previously connected network comes back into range after being out of range

No configuration is needed — this is the default behavior.

To disable auto-connect for a specific network:

1
sudo iwctl known-networks "MyHomeNetwork" set-property AutoConnect no

To re-enable it:

1
sudo iwctl known-networks "MyHomeNetwork" set-property AutoConnect yes

Useful iwctl Commands at a Glance

All commands are run inside the [iwd]# shell unless shown with iwctl prefix.

Task Command
List wireless interfaces device list
Scan for networks station wlan0 scan
List available networks station wlan0 get-networks
Connect (with password prompt) station wlan0 connect "SSID"
Connect (passphrase inline) iwctl --passphrase "pass" station wlan0 connect "SSID"
Connect to hidden network station wlan0 connect-hidden "SSID"
Show connection status station wlan0 show
Disconnect station wlan0 disconnect
List saved networks known-networks list
Forget a saved network known-networks "SSID" forget
Disable auto-connect known-networks "SSID" set-property AutoConnect no
Power off wireless device device wlan0 set-property Powered off
Power on wireless device device wlan0 set-property Powered on

Troubleshooting

iwd Fails to Start — Conflict with wpa_supplicant or NetworkManager

Only one wireless daemon can own the hardware at a time. If you have wpa_supplicant or NetworkManager running, they will conflict with iwd.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Check for conflicts
systemctl status wpa_supplicant
systemctl status NetworkManager

# Stop and disable them if present
sudo systemctl stop wpa_supplicant NetworkManager
sudo systemctl disable wpa_supplicant NetworkManager

# Then start iwd
sudo systemctl start iwd

No Wireless Interface Listed in device list

Your Wi-Fi card may be blocked. Check:

1
rfkill list

If you see Soft blocked: yes:

1
2
3
rfkill unblock wifi
# or unblock everything
rfkill unblock all

If you see Hard blocked: yes, a physical switch or BIOS setting is blocking the hardware — check your laptop’s Fn key or BIOS Wi-Fi setting.

Connected but No IP Address

iwd authenticated successfully but no DHCP lease was obtained. Check your DHCP setup:

1
2
3
4
5
6
7
# Is systemd-networkd running?
systemctl status systemd-networkd

# Is dhcpcd running?
systemctl status dhcpcd

# Or enable iwd's built-in DHCP (see Step 7)

Wrong Password — How to Re-Enter It

iwd will refuse to connect and log an error. Forget the profile and reconnect:

[iwd]# known-networks "MyHomeNetwork" forget
[iwd]# station wlan0 connect "MyHomeNetwork"

Slow or Intermittent Connection — Power Management

Linux may aggressively power-manage your Wi-Fi card, causing dropped packets. Check:

1
iwconfig wlan0 | grep "Power Management"

If it shows Power Management:on, disable it:

1
sudo iwconfig wlan0 power off

To make it persistent across reboots, create a udev rule:

1
sudo nano /etc/udev/rules.d/81-wifi-power.rules

Add:

ACTION=="add", SUBSYSTEM=="net", KERNEL=="wlan*", RUN+="/usr/bin/iwconfig %k power off"

A Note on iwd vs wpa_supplicant

wpa_supplicant has been the standard wireless authentication daemon on Linux for over a decade. iwd is newer and takes a more opinionated, self-contained approach — it handles authentication, DHCP (optionally), roaming, and profile management in one daemon. On Arch Linux, iwd is the recommended choice for new setups. It is faster to configure, easier to understand, and actively maintained by Intel.

If you are coming from wpa_supplicant and it is working well for you, there is no urgent reason to switch — but if you are setting up a new Arch system from scratch, start with iwd.