admin:linux:cli:wpa_supplicant

Connect to a wireless network with wpa_supplicant

If your usual GUI program to connect to wifi networks, e.g. wicd or NetworkManager is not available, you can connect to a wireless network by manually scanning and editing wpa_supplicant's config files.

see also: Arch Wiki on wpa_supplicant

Run this on a root shell. sudo will not suffice:

wpa_supplicant -B -i INTERFACE -c <(wpa_passphrase MYSSID PASSPHRASE)

Find wireless interfaces with iw list.

/etc/systemd/network/INTERFACE.network
[Match]
Name=INTERFACE

[Network]
DHCP=yes
/etc/wpa_supplicant/wpa_supplicant-INTERFACE.conf
ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1

network={
    ssid="MYSSID"
    psk="MYSUPERSECUREPASSWORD"
    priority=1
}

start that shit up:

systemctl enable systemd-networkd
systemctl enable wpa_supplicant@INTERFACE
systemctl start systemd-networkd
systemctl start wpa_supplicant@INTERFACE

Do you have an IP address? Check this with ip a. If not, you have to obtain an IP via dhcpcd INTERFACE or set it manually with ip a add ADDRESS dev INTERFACE.

Could be that your /etc/resolv.conf doesn't list any DNS servers. Either add this:

/etc/resolv.conf
nameserver 127.0.0.1

(replace 127.0.0.1 with the IP address of your router/DNS server)

or use systemd-resolved:

mv /etc/resolv.conf /etc/resolv.conf.before-the-systemd-nation-attacked
systemctl enable --now systemd-resolved

systemd-resolved populates the /etc/resolv.conf with known DNS servers automagically, but you can still add them manually:

…
DNS=1.2.3.4
FallbackDNS=5.6.7.8
…
  • Last modified: 2024-07-05 14:31