diff --git a/addWifiHeadless.md b/addWifiHeadless.md new file mode 100644 index 0000000..fb3005a --- /dev/null +++ b/addWifiHeadless.md @@ -0,0 +1,84 @@ +With a bit of prep work, this can be achieved relatively simply + +First, create a file, `addwlan.sh`, in the boot partition - contents at the end of the answer + +in `cmdline.txt` on the boot sector you'll want to add (it's a single line by the way) + + systemd.run=/boot/firmware/addwlan.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target + +To the end of the line in `cmdline.txt` + +It should end up looking like + + console=tty1 root=PARTUUID=****** rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=** systemd.run=/boot/firmware/addwlan.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target + +The \*\*\* will be something unique to your situation, DO NOT CHANGE + +This is the contents of addwlan.sh in the boot partition: + +Note: + +* NAME: this will be the name of the `.nmconnection` file created and its `ID` \- note that `UUID` is generated +* SSID: the SSID you want to connect to +* PRIORITY: use negative for higher priority - FYI: default for wifi connections is zero +* HIDDEN: set to `true` if it is hidden +* PASS: leave blank for open AP +* PLAIN: set to 1 if you add the password in plain text, the code will convert it to a passphrase using `wpa_passphrase` otherwise use `PLAIN=0` + +--- + + #!/bin/bash + + # ---- configure connection - change as appropriate + NAME= + SSID= + PRIORITY=0 + HIDDEN=[true|false] + PASS= + PLAIN=1 + # ---- end configure connection + + CONNFILE=/etc/NetworkManager/system-connections/${NAME}.nmconnection + UUID=$(uuid -v4) + + if [ ! -z "${PASS}"]; then + if [ $PLAIN -eq 1 ]; then + PSK="$(wpa_passphrase ${SSID} ${PASS} | grep -T "psk" | grep -v '"' | cut -d= -f 2)" + else + PSK="${PASS}" + fi + fi + + cat <<- EOF >${CONNFILE} + [connection] + id=${NAME} + uuid=${UUID} + type=wifi + autoconnect-priority=${PRIORITY} + [wifi] + mode=infrastructure + ssid=${SSID} + hidden=${HIDDEN} + [ipv4] + dns-priority=100 + method=auto + [ipv6] + dns-priority=50 + addr-gen-mode=default + method=auto + [proxy] + EOF + if [ ! -z "${PASS}" ]; then + cat <<- EOF >>${CONNFILE} + [wifi-security] + key-mgmt=wpa-psk + psk=${PSK} + EOF + fi + chmod 600 ${CONNFILE} + sed -i 's| systemd.run=/boot/firmware/addwlan.sh.*||g' /boot/firmware/cmdline.txt + exit 0 + +Put the SD card back in the pi and reboot. Note, there will be a second reboot once the config is written, so be patient. + +Tested to work on Pi 4 running latest Raspberry Pi Bookworm - should work if you installed 64bit bookworm or trixie - no guarantees if you went for 32 bit \ No newline at end of file