@@ -284,13 +284,29 @@ set_timezone_and_locales() {
284
284
done
285
285
if [[ " ${response} " =~ ^(Y| y)$ ]]; then
286
286
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
+
287
303
# get list of wireless networks
288
304
scanning=0
289
305
broken=1
290
306
while [[ ${scanning} -lt 3 ]]; do
291
307
sleep 0.5
292
308
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' ) )
294
310
if [[ $? == 0 ]]; then broken=0; break ; fi
295
311
done
296
312
# wifi can also fail
@@ -309,15 +325,15 @@ set_timezone_and_locales() {
309
325
if [[ " $input " =~ ^[0-9]{,2}$ ]] ; then break ; fi
310
326
done
311
327
# get password
312
- while [[ 1 ]] ; do
328
+ while [[ -n " ${input} " ]] ; do
313
329
SSID=$( echo ${ARRAY[$input-1]} | cut -d" ," -f2)
314
330
echo " "
315
331
read -r -p " Enter a password for ${SSID} : " password
316
332
break
317
333
done
318
334
319
335
# generate config
320
- cat << - EOF > " ${SDCARD} " /etc/netplan/30-wifis-dhcp.yaml
336
+ cat << - EOF > /etc/netplan/30-wifis-dhcp.yaml
321
337
# Created by Armbian firstlogin script
322
338
network:
323
339
wifis:
@@ -333,14 +349,57 @@ set_timezone_and_locales() {
333
349
# apply to netplan
334
350
systemctl daemon-reload
335
351
netplan apply --timeout 0 2> /dev/null
336
- sleep 5
337
352
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
340
393
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
+
344
403
fi # detected or not detected wireless network
345
404
fi
346
405
echo " "
0 commit comments