Setting Up WiFi in Arch Linux: From iwd to NetworkManager

Installing the operating system Arch Linux Often intimidates newcomers with its minimalist design and lack of a graphical interface out of the box. After successfully installing the basic package set, the user faces the primary task: gaining internet access to install drivers, a graphical shell, and necessary utilities. Unlike distributions like Ubuntu or Mint, there's no pre-installed network manager that would automatically suggest a list of available access points.

Modern Linux offers several proven solutions to this problem, each with its own advantages depending on your ultimate goal. You can use the built-in tool iwd (iNet wireless daemon), which is the de facto standard for installer archinstall, or immediately install a powerful one NetworkManager with a graphical interface. The choice of method depends on whether you plan to use a system with a graphical environment or are building a lightweight server.

In this guide, we'll examine both approaches in detail, focusing on the nuances of working with wireless interfaces in a headless environment. We'll cover the authorization process, setting up static IP addresses, and resolving common driver issues. Wi-Fi adaptersUnderstanding these mechanisms is critical for any administrator or enthusiast looking to dive deep into the Arch ecosystem.

Preliminary check of hardware and drivers

The first step before any configuration is identifying your wireless adapter. In Arch Linux, the kernel usually contains the necessary modules, but in some cases, especially with proprietary chips, Broadcom or Realtek, manual firmware installation may be required. Without the correct firmware, the device simply won't appear in the system as a network interface.

To begin, run the command ip link in the terminal. You should see a list of network interfaces. Wireless adapters are traditionally referred to as wlan0, wlp2s0 or, while wired ones have a prefix enIf instead of the interface name you see only lo (loopback), this means that the driver is not loaded or the device is disabled at the hardware level.

⚠️ Attention: If the interface appears as DOWN, try to raise it with the command ip link set dev wlan0 upAlso check the physical switch on your laptop or the keyboard shortcut (often Fn+F2), as the WiFi media keys don't always work in Arch without additional daemons.

If there is no interface, use the utility lspci for PCI devices or lsusb for USB adapters to find out the exact chip model. The resulting VenID And DevID will help you find the required firmware package in the repositories. extra or AUR. A package is often required linux-firmware, but for specific cards they may be needed rtw88-firmware or b43-firmware.

Setting up WiFi via iwd and iwctl (Recommended Method)

Project iwd (iNet wireless daemon) is being developed by Intel and is intended to replace the outdated wpa_supplicantIt's distinguished by its minimalist design, speed, and built-in support for modern security standards. It's the preferred choice for Arch Linux, especially if you use the installer. archinstall or are you planning to use systemd-networkd as a backend.

To get started, you need to make sure the service is running. If you're in a Live session or have just installed the system, run:

systemctl start iwd

systemctl start systemd-networkd

Once the daemons are running, you can switch to interactive control mode. Enter the command iwctl in the terminal. The utility interface will prompt you [iwd]#Here, navigation is accomplished through simple commands that allow you to scan networks, connect to them, and save configurations.

  • 📡 device list - displays all detected wireless devices and their current status.
  • 🔍 station wlan0 scan — starts scanning available networks for the wlan0 interface.
  • 📋 station wlan0 get-networks — shows a list of found access points with signal strength.

To connect to the network, use the command station wlan0 connect"Network_Name"The system will ask for a password (Passphrase). If authentication is successful, iwd will automatically create in /var/lib/iwd/ and will try to get an IP address through systemd-networkd (if DHCP is configured). This makes the process as transparent as possible for the user.

☑️ Checking the connection via iwd

Completed: 0 / 4

Using NetworkManager for GUI

If you are installing a desktop environment such as GNOME, KDE Plasma or It's wiser to use XFCE right away. NetworkManagerThis is a universal tool that provides more than just a console utility. nmtui (text interface), but also graphical applets for managing connections after installing the GUI.

Install the required packages using the command:

pacman -S networkmanager network-manager-applet

After installation, you need to activate the service so that it starts automatically at system startup and can manage interfaces:

systemctl enable --now NetworkManager

For setting up WiFi in a console without a graphical shell, a pseudo-graphical interface is ideal nmtuiLaunch it and select "Edit a connection" or "Activate a connection." Navigate using the arrow keys and the Enter key. This is the most user-friendly method for those who don't want to remember command syntax. nmcli.

nmcli command Description of action Example of use
nmcli device wifi list Scanning available networks Shows SSID and signal strength
nmcli device wifi connect Connecting to the network nmcli device wifi connect"Home" password"12345"
nmcli connection show List of saved profiles Checking active connections
nmcli connection delete Deleting a profile Clearing old settings

It is important to note that NetworkManager may conflict with other network managers such as systemd-networkd or iwd (if they actively manage interfaces). It is recommended to leave only one active network management service to avoid chaos in routing and DNS.

📊 Which network management method do you prefer?
iwd (console minimalism)
NetworkManager (universality)
systemd-networkd (for servers)
Wicd (old classic)

Manual configuration via wpa_supplicant

Although iwd And NetworkManager are modern standards, knowledge of working with wpa_supplicant remains a useful skill. It's the "grandfather" of all WiFi daemons in Linux, and it's still used as a backend in many tools or V-builds where every megabyte of memory is crucial.

Manual setup requires creating a configuration file. You'll need to generate a password hash for your network so you don't have to store it in plaintext (although this is optional). Use the utility wpa_passphrase:

wpa_passphrase"MySSID""MyPassword" > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

The resulting file will contain a block network with the SSID and PSK. After that, you need to start the daemon, specifying the path to the config and interface:

wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

Flag -B means running in the background. After successfully associating with an access point, you will still need to obtain an IP address. This is usually done using dhcpcd or systemd-networkd. In Arch Linux, it is often used by default dhcpcd:

dhcpcd wlan0

⚠️ Note: When manually configuring via wpa_supplicant, changes are not automatically saved after a reboot. You must create a corresponding systemd service or add a command to the startup script to enable the network at system startup.

Setting up static IP and DNS

In server scenarios or for specific network configurations, dynamic IP (DHCP) may not be desirable. Arch Linux makes it easy to set up a static address. If you are using systemd-networkd, create a configuration file in /etc/systemd/network/, For example, 20-wireless.network.

Example of file contents for static configuration:

[Match]

Name=wlan0

[Network]

Address=192.168.1.50/24

Gateway=192.168.1.1

DNS=8.8.8.8

DNS=1.1.1.1

After changing the configuration, you need to restart the network service: systemctl restart systemd-networkdMake sure the selected IP address is not already occupied by another device on the network to avoid address conflicts that could result in both devices losing connectivity.

Why might DNS 8.8.8.8 not work?

Some ISPs or corporate networks block third-party DNS servers. If the internet isn't working with a static IP, try specifying your ISP or router's DNS (usually 192.168.1.1).

Diagnostics and problem solving

Even with proper configuration, connection issues may still occur. A common cause is incorrect system time. WPA2/WPA3 security protocols are sensitive to clock misalignment. If the time is out of sync, authentication will fail. Use timedatectl to check and synchronize:

timedatectl set-ntp true

Another common issue is power saving mode. WiFi drivers can disable the adapter to save power, leading to connection drops. This can be disabled in the settings. NetworkManager (parameter wifi.powersave in the config) or through iw:

iw dev wlan0 set power_save off

For in-depth diagnostics, use logs. systemd contain detailed information about the reasons for the connection failure. The command journalctl -u iwd or journalctl -u NetworkManager will show the latest events. Look for words like "failed," "error," or "disconnected."

How to switch between iwd and wpa_supplicant?

It is not possible to run both daemons on the same interface at the same time. To switch, stop the active service (e.g. systemctl stop iwd), then run the other one. Make sure the configuration files don't conflict.

Why is my WiFi visible but not connecting?

Check your network security type. Some older routers use WEP or mixed mode, which modern distributions may block by default. Also, check if your router has MAC address filtering enabled.

How to save a password in plaintext in wpa_supplicant?

You can specify psk="password" instead of a hash in the wpa_supplicant configuration file. However, this is less secure if the file has broad permissions. It is recommended to use the hash generated by wpa_passphrase.