Intro

iwd is an alternative to wpasupplicant. IWD itself is considered stable since debian Bookworm / 11, is supported as backed by both ConnMan and NetworkManager, however the NetworkManager backend is considered in an experimental state (as of NetworkManager v1.32.12).

Further information below will focus on using NetworkManager with IWD. (Please note that IWD heavily relies on linux features which means you may benefit from using a more recent kernel version.)

Please consider reading the Upstream Wiki for more in-depth and up to date information.

Prerequisites

The IWD backend is available in upstream NetworkManager but disabled by default, both at build-time and run-time. The network-manager package has enabled the IWD backend at build-time, but depends on runtime-competing daemon pkg:wpasupplicant. This means you can test using IWD backend by enabling it at runtime yourself.

Enabling IWD backend

To enable the IWD backend you need to:

Append the following snippet in /etc/NetworkManager/NetworkManager.conf

[device]
wifi.backend=iwd

Please also refer to the upstream IWD information page on NetworkManager.

Connecting through iwctl

Interactive mode

Start the interactive mode:

$ iwclt

To list the help menu:

[iwd]# help

To get the wireless device name:

[iwd]# device list

Sample output:

                                    Devices                                    
--------------------------------------------------------------------------------
  Name                Address             Powered   Adapter   Mode      
--------------------------------------------------------------------------------
  wlan0               0c:98:e6:b2:ad:d5   on        phy0      station   

Network scanning:

[iwd]# station wlan0 scan

To list available networks:

[iwd]# station wlan0 get-networks

To connect:

[iwd]# station wlan0 connect "SSID"

Then enter the passphrase when prompted.

Connection stat:

[iwd]# station wlan0 show

To disconnect:

[iwd]# station wlan0 disconnect

Command line arguments

Without entering the interactive mode, the above command can be executed from shell by supplying -- as follows:

$ iwctl -- device list
$ iwctl -- station wlan0 scan
$ iwctl -- station wlan0 get-networks
$ iwctl --passphrase "mysecret" station wlan0 connect "SSID"
$ iwctl -- station wlan0 show
$ iwctl -- station wlan0 disconnect

Known issues

As of 2021-10-02 the following issues with using IWD as backend for NetworkManager are:

Pease also refer to the NetworkManager issue tracker.

Feedback about your success or failure with IWD is warmly welcome! Please file a bug report.

Troubleshooting

If you're having problems getting wifi working in NetworkManager with the IWD backend enabled, please make sure the IWD service is running. See systemctl status iwd