Skip to content

Commit 2b494ae

Browse files
committed
Add support for multiple wireless devies at firstlogin
1 parent c0c3102 commit 2b494ae

File tree

1 file changed

+68
-9
lines changed

1 file changed

+68
-9
lines changed

packages/bsp/common/usr/lib/armbian/armbian-firstlogin

+68-9
Original file line numberDiff line numberDiff line change
@@ -284,13 +284,29 @@ set_timezone_and_locales() {
284284
done
285285
if [[ "${response}" =~ ^(Y|y)$ ]]; then
286286

287+
# We could have multiple devices
288+
if (( $(grep -c . <<<"$WIFI_DEVICE") > 1 )); then
289+
scanning=0
290+
while [[ ${scanning} -lt 3 ]]; do
291+
scanning=$(( scanning + 1 ))
292+
echo -e "\nMultiple wireless adaptors detected. Choose primary:\n"
293+
WIFI_DEVICES=($(printf '%s\n' "${WIFI_DEVICE[@]}" | sed 's/^[ \t]*//' | sed 's/"//g' | sed 's/ESSID://' | awk 'BEGIN{FS=OFS=","} {$NF=++count OFS $NF} 1'))
294+
for str in ${WIFI_DEVICES[@]}; do echo $str | sed "s/,/ \t /g"; done
295+
echo ""
296+
read -r -p "Enter a number of wireles adaptor: " input
297+
if [[ "$input" =~ ^[0-9]{,2}$ && -n "$input" ]] ; then break; fi
298+
done
299+
[[ -z $input ]] && input=1
300+
WIFI_DEVICE=$(echo ${WIFI_DEVICES[$input-1]} | cut -d"," -f2)
301+
fi
302+
287303
# get list of wireless networks
288304
scanning=0
289305
broken=1
290306
while [[ ${scanning} -lt 3 ]]; do
291307
sleep 0.5
292308
scanning=$(( scanning + 1 ))
293-
ARRAY=($(iwlist ${WIFI_DEVICE} scanning 2> /dev/null | egrep 'ESSID' | sed 's/^[ \t]*//' | sed 's/"//g' | sed 's/ESSID://' | awk 'BEGIN{FS=OFS=","} {$NF=++count OFS $NF} 1'))
309+
ARRAY=($(iwlist ${WIFI_DEVICE} scanning 2> /dev/null | egrep 'ESSID' | sed 's/^[ \t]*//' | sed 's/"//g' | sed 's/ESSID://' | sed '/^$/d' | sort | uniq | awk 'BEGIN{FS=OFS=","} {$NF=++count OFS $NF} 1'))
294310
if [[ $? == 0 ]]; then broken=0; break; fi
295311
done
296312
# wifi can also fail
@@ -309,15 +325,15 @@ set_timezone_and_locales() {
309325
if [[ "$input" =~ ^[0-9]{,2}$ ]] ; then break; fi
310326
done
311327
# get password
312-
while [[ 1 ]] ; do
328+
while [[ -n "${input}" ]] ; do
313329
SSID=$(echo ${ARRAY[$input-1]} | cut -d"," -f2)
314330
echo ""
315331
read -r -p "Enter a password for ${SSID}: " password
316332
break
317333
done
318334

319335
# generate config
320-
cat <<- EOF > "${SDCARD}"/etc/netplan/30-wifis-dhcp.yaml
336+
cat <<- EOF > /etc/netplan/30-wifis-dhcp.yaml
321337
# Created by Armbian firstlogin script
322338
network:
323339
wifis:
@@ -333,14 +349,57 @@ set_timezone_and_locales() {
333349
# apply to netplan
334350
systemctl daemon-reload
335351
netplan apply --timeout 0 2>/dev/null
336-
sleep 5
337352

338-
# exit if connection is suffesful
339-
if [[ -n $(iw "${WIFI_DEVICE}" link 2> /dev/null | grep "$SSID") ]]; then broken=0; break; fi
353+
# wireless link probing
354+
pinging=10
355+
broken=1
356+
WIRELESSLINK=""
357+
echo ""
358+
while [[ ${pinging} -gt 1 && -n "${input}" && -n "${password}" ]]; do
359+
pinging=$(( pinging - 1 ))
360+
printf "\rProbing wireless link ($pinging)"
361+
WIRELESSLINK=$(iw "${WIFI_DEVICE}" link 2> /dev/null | grep "$SSID")
362+
sleep 2
363+
# exit if connection is suffesful
364+
if [[ "${WIRELESSLINK}" == *$SSID* ]]; then
365+
broken=0
366+
break
367+
fi
368+
done
369+
370+
if [[ ${broken} == 1 ]]; then
371+
echo -e "\n\nWireless link was \x1B[91mnot detected\x1B[0m. Wrong password or weak signal."
372+
fi
373+
# get public IP probing
374+
broken=1
375+
pinging=10
376+
377+
while [[ ${pinging} -gt 1 && -n "${input}" && -n "${password}" && "${WIRELESSLINK}" == *$SSID* ]]; do
378+
pinging=$(( pinging - 1 ))
379+
printf "\rProbing internet connection ($pinging)"
380+
PUBLIC_IP=$(curl --max-time 5 -s https://ipinfo.io/ip)
381+
if [[ -n "$PUBLIC_IP" ]]; then
382+
broken=0
383+
break
384+
else
385+
sleep 5
386+
fi
387+
done
388+
echo ""
389+
390+
if [[ ${broken} == 0 ]]; then
391+
break
392+
fi
340393
done
341-
if [[ ${broken} == 1 ]]; then
342-
echo -e "\n\x1B[91mUnable to connect to Access Point\x1B[0m.\n"
343-
fi
394+
395+
if [[ ${broken} == 1 ]]; then
396+
echo -e "\n\x1B[91mUnable to connect to Access Point\x1B[0m.\n"
397+
rm -f /etc/netplan/30-wifis-dhcp.yaml
398+
netplan apply --timeout 0 2>/dev/null
399+
systemctl daemon-reload
400+
break
401+
fi
402+
344403
fi # detected or not detected wireless network
345404
fi
346405
echo ""

0 commit comments

Comments
 (0)