Network - IWD

IWD

Intel’s iNet wireless daemon (iwd) sends wpa-supplicant into well-deserved retirement. Only a tenth the size and much faster, iwd is the successor. It works alone or together with NetworkManager, systemd-networkd, and conman.
In rare cases, connections are lost with iwd. It is then advisable to return to the WPA supplicant.

Further information can be found on the Arch Linux wiki or the debian wiki.

Since siduction 2021.3.0, iwd is used as the standard for establishing connections to WLAN. Our implementation runs with NetworkManager.

Since siduction 2021.1.0, iwd has already been delivered in the flavours Xorg and NoX. If you want, you can install iwd on the other flavours. See below: IWD instead of wpa_supplicant.

Before siduction 2021.1.0: Even with a slightly older snapshot, iwd can be installed (tested with siduction 2018.3.0 and linux-image-5.15.12-1-siduction-amd64). Please also follow the instructions at IWD instead of wpa_supplicant.

Graphical configuration programs

Configuration in terminal

iwd and NetworkManager

  1. The fastest and easiest way to use iwd with NetworkManager is to open a terminal and type this command:

    ~$ nmtui

    This will start the NetworkManager’s text based graphical interface in the terminal. The program should be self-explanatory!

  2. Use the NetworkManager’s command line tool nmcli. Detailed information about this can be found on our manual page NetworkManager in the terminal.

    The following is a brief description of the fastest way to set up a network with the help of NetworkManager on the command line. Provided you have all the information, this one-liner is enough:

    ~$ nmcli dev wifi con "<ssid>" password <password> name "<name>"

    (“ssid” denotes the name of the network.)

    For example:

    nmcli dev wifi con "HomeOffice" password R3allY+v3ry+s3creT name "HomeOffice"

iwd standalone (without NetworkManager)

Intel’s iwd comes with its own command line tool called iwctl. Please only use iwctl if NetworkManager and wpa_supplicant are not installed or both are masked in systemd.

First we should call the help of iwctl to see what is possible. For this, we enter the command iwctl into the terminal and then help into the input prompt.

iwctl help

To find out which Wi-Fi interface we are using, we enter the following command:

[iwd]# device list
              Devices                             *
---------------------------------------------------
Name   Address            Powered  Adapter  Mode
---------------------------------------------------
wlan0  00:01:02:03:04:05  on       phy0     station

In this case, it is “wlan0” and it is running (“powered on”) in “station” mode.

Now we scan for an active network:

[iwd]# station wlan0 scan
[iwd]# station wlan0 get-networks

After that, we can connect to our network:

[iwd]# station wlan0 connect <ssid>

(“ssid” means the name of the network.)

We are asked for the password and we should then be connected to our network. We can check this with station list or station wlan0 get-networks.

[iwd]# station list
    Devices in Station Mode
------------------------------
Name      State       Scanning
------------------------------
wlan0     connected

The whole process can be abbreviated by the following command if you have all the necessary information!

iwctl --passphrase <passphrase> station <device> connect <ssid>

For example:

~$ iwctl --passphrase W1rkl1chS3hrG3h31m station wlan0 connect HomeOffice

IWD instead of wpa_supplicant

For those who want to use iwd as a replacement for wpa_supplicant with a slightly older snapshot than siduction 2021.3.0, please follow the instructions below.

Install IWD

Note:
It is possible that non-free firmware must be installed from a USB stick or via LAN! Under Debian, it is unfortunately not possible to install the NetworkManager (standalone) without wpa_supplicant.

If you want to do this, there are two options. The second one is more sensible and easier.

  1. Install NetworkManager from the sources.
  2. Do not start or mask the wpa_supplicant.service. Since siduction uses systemd, we will not go into how iwd is configured without systemd!

If you want to use iwd without NetworkManager, you don’t have to worry about that, but you have to remove NetworkManager and wpa_supplicant from the disk together with their configuration:

~# apt purge network-manager wpasupplicant

Procedure with NetworkManager installed
and iwd < 1.21-2

Now just run the following commands as root in the terminal to use iwd:

~# apt update
~# apt install iwd
~# systemctl stop NetworkManager.service
~# systemctl disable --now wpa_supplicant.service
~# echo -e '[device]\nwiFi.backend=iwd' > /etc/NetworkManager/conf.d/nm.conf
~# touch /etc/iwd/main.conf
~# echo -e '[General]\nEnableNetworkConfiguration=true \n\n[Network]\nNameResolvingService=systemd' > /etc/iwd/main.conf
~# systemctl enable -now iwd.service
~# systemctl start NetworkManager.service

See if it worked
We display the two configuration files.

~$ cat /etc/NetworkManager/conf.d/nm.conf
[device]
wiFi.backend=iwd
~$ cat /etc/iwd/main.conf
[General]
EnableNetworkConfiguration=true

[Network]
NameResolvingService=systemd

Procedure with NetworkManager installed
and iwd >= 1.21-2

From version 1.21-2 on, iwd brings its own configuration file /etc/iwd/main.conf. The procedure is similar to the one just mentioned with the exception that we do not create the configuration file anymore, but remove the comment sign in front of “EnableNetworkConfiguration=true” in it.

Please execute the following commands as root in the terminal:

~# apt update
~# apt install iwd
~# systemctl stop NetworkManager.service
~# systemctl disable --now wpa_supplicant.service
~# echo -e '[device]\nwiFi.backend=iwd' > /etc/NetworkManager/conf.d/nm.conf
~# sed -i 's/#EnableNetworkConfiguration=true/EnableNetworkConfiguration=true/' /etc/iwd/main.conf
~# systemctl enable -now iwd.service
~# systemctl start NetworkManager.service

See if it worked
We display the two configuration files.

~$ cat /etc/NetworkManager/conf.d/nm.conf
[device]
wiFi.backend=iwd
~$ cat /etc/iwd/main.conf

[...]
[General]
# iwd is capable of performing network configuration on its
# own, including DHCPv4 based address configuration.
# By default this behavior is disabled, and an external
# service such as NetworkManager, systemd-network or
# dhcpclient is required.  Uncomment the following line if
# you want iwd to manage network interface configuration.
#
EnableNetworkConfiguration=true
#
[...]

With the commands described above, you are now able to display Wi-Fi hardware in the terminal nmtui, nmcli, or iwctl, configure it, and connect to a network.
Or you can use the NetworkManager in the graphical user interface. See: graphical-configuration-programs

Back to wpa_supplicant

(Provided NetworkManager and wpa_supplicant are installed.)

~# systemctl stop NetworkManager.service
~# systemctl disable --now iwd.service
~# mv /etc/NetworkManager/conf.d/nm.conf /etc/NetworkManager/conf.d/nm.conf~
~# systemctl unmask wpa_supplicant.service
~# systemctl enable --now wpa_supplicant.service
~# systemctl start NetworkManager.service

Now wpa_supplicant is used to connect to the Wi-Fi hardware.

Last edited: 2023/11/09