Systemd Service

Complete Service Setup (Wired + WiFi)

For EAP-TLS on both wired and WiFi interfaces, enable these services:

# Wired 802.1X
sudo systemctl enable wpa_supplicant-wired@enp0s31f6.service
sudo systemctl start wpa_supplicant-wired@enp0s31f6.service

# WiFi 802.1X
sudo systemctl enable wpa_supplicant-wifi@wlan0.service
sudo systemctl start wpa_supplicant-wifi@wlan0.service

# DHCP for all interfaces
sudo systemctl enable dhcpcd
sudo systemctl start dhcpcd

# CRITICAL: Disable iwd (conflicts with wpa_supplicant)
sudo systemctl disable iwd
sudo systemctl stop iwd
sudo systemctl mask iwd  # Prevent accidental start

Verify Service Status

# Check all related services
systemctl is-enabled wpa_supplicant-wired@enp0s31f6  # Should be: enabled
systemctl is-enabled wpa_supplicant-wifi@wlan0       # Should be: enabled
systemctl is-enabled dhcpcd                          # Should be: enabled
systemctl is-enabled iwd                             # Should be: disabled

Wired Service Template

The template service is at /lib/systemd/system/wpa_supplicant-wired@.service:

[Unit]
Description=WPA supplicant daemon (wired interface %I)
Requires=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Before=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/bin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-wired-%I.conf -D wired -i %I
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

WiFi Service Template

Create /etc/systemd/system/wpa_supplicant-wifi@.service:

[Unit]
Description=WPA supplicant WiFi EAP-TLS (%I)
Requires=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Before=network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/bin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant-wifi-%I.conf -i %I
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
WiFi uses -i %I without -D wired flag. The driver auto-detection (nl80211) works for WiFi.

Configuration File Naming Convention

Service Config File

wpa_supplicant-wired@enp0s31f6

/etc/wpa_supplicant/wpa_supplicant-wired-enp0s31f6.conf

wpa_supplicant-wifi@wlan0

/etc/wpa_supplicant/wpa_supplicant-wifi-wlan0.conf

Logs

# Wired logs
sudo journalctl -u wpa_supplicant-wired@enp0s31f6 -f

# WiFi logs
sudo journalctl -u wpa_supplicant-wifi@wlan0 -f

# Show recent authentication (both)
sudo journalctl -u 'wpa_supplicant-*' --since "10 minutes ago"

# DHCP logs
sudo journalctl -u dhcpcd -f

Interface Naming

Interface Description

enp0s31f6

ThinkPad P50 built-in Ethernet

wlan0

Intel WiFi (after iwlwifi driver loads)

eno1

Common server naming

eth0

Legacy naming (requires config)

Troubleshooting Service Failures

# Check why service failed
systemctl status wpa_supplicant-wifi@wlan0
journalctl -xeu wpa_supplicant-wifi@wlan0

# Common issue: interface not ready
# Fix: Ensure WiFi driver is loaded
lsmod | grep iwl
modprobe iwlwifi

# Common issue: config file not found
# Verify config exists
ls -la /etc/wpa_supplicant/wpa_supplicant-wifi-wlan0.conf