====== Raspberry Pi problem: dhcpcd not starting wpa_supplicant ======
I got a problem with a **Realtek RTL8188EUS** UBS WiFi dongle, into a **Raspberry Pi Model A+**, running **Rasbpian 2017-11-29 Stretch Lite** (based on Debian 9.1).
The **new method used** by Raspbian to configure the network interfaces involves **dhcpcd**, so the **/etc/network/interfaces** should be almost empty, with just the following:
source-directory /etc/network/interfaces.d
There are no **allow-hotplug** or **auto** sections anymore; everything should be managed by **dhcpcd**, even the start of **wpa_supplicant**. Which indeed was failing.
First of all I added some debug to **dhcpcd**: just adding the option **%%-d%%** to the **dhcpcd** //ExecStart// into **/etc/systemd/system/dhcpcd.service.d/wait.conf**. After executing **systemctl daemon-reload** and a reboot, this was the log:
daemon.debug dhcpcd[772]: dhcpcd-6.11.5 starting
daemon.debug dhcpcd[772]: udev: starting
daemon.info dhcpcd[772]: dev: loaded udev
daemon.debug dhcpcd[772]: wlan0: executing `/lib/dhcpcd/dhcpcd-run-hooks' PREINIT
daemon.debug dhcpcd[772]: wlan0: executing `/lib/dhcpcd/dhcpcd-run-hooks' NOCARRIER
daemon.info dhcpcd[772]: wlan0: waiting for carrier
daemon.err dhcpcd[772]: timed out
daemon.debug dhcpcd[772]: forking to background
So no **wpa_supplicant** was fired, the **wlan0** interface does not //sense the carrier// and **dhcpcd** refuses to configure it. It seems that dhcpcd does not aknowledge that it is a WiFi adapter, so we have to force it. Just add an interface section into **/etc/dhcpcd.conf**:
interface wlan0
env ifwireless=1
env wpa_supplicant_driver=nl80211,wext
the driver specification is required, **otherwise wpa_supplicant will die** with the error message
nl80211: Driver does not support authentication/association or connect commands
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
wlan0: Failed to initialize driver interface
After a reboot everything worked as expected, which is confirmed by the **wpa_supplicant process running**:
wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0 -Dnl80211,wext
Notice that the configuration file used is **/etc/wpa_supplicant/wpa_supplicant.conf**, but if one named **wpa_supplicant-wlan0.conf** exists, it will be preferred.
===== Alternative: wpa_supplicant started by systemd =====
The default is to start **wpa_supplicant** via **dhcpcd**, as seen above. But if you want, you can force **systemd** to start the service independently.
You have to start the //interface-specific// service against the name **wlan0**, so make the following:
mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
systemctl enable wpa_supplicant@wlan0.service
After a reboot you should see the wpa_supplicant process running, and dhcpcd will configure wlan0 happily.
===== Web References =====
* [[https://www.raspberrypi.org/forums/viewtopic.php?t=191061|Raspbian Stretch: Wifi not starting on boot]]