forked from finn/tinyboard
fix(setup-network): collect all user input before switching AP to prevent SSH session drop mid-prompt
This commit is contained in:
@@ -123,14 +123,31 @@ case "$NET_OPT" in
|
||||
WPA_CONF=$(wpa_passphrase "$NEW_SSID" "$NEW_PASS") \
|
||||
|| die "Failed to generate WPA config — check SSID and password."
|
||||
|
||||
info "Currently connected to: ${CURRENT_SSID:-none}"
|
||||
info "Switching to: ${NEW_SSID}"
|
||||
warn "Your SSH session will drop. Reconnect once the device joins '${NEW_SSID}'."
|
||||
echo ""
|
||||
read -rp "Proceed? [Y/n]: " CONFIRM
|
||||
CONFIRM="${CONFIRM:-y}"
|
||||
[[ "${CONFIRM,,}" == "y" ]] || { info "Aborted."; exit 0; }
|
||||
|
||||
EXISTING_IDS=$(wpa_cli -i "$WIFI_IFACE" list_networks 2>/dev/null | awk 'NR>1 {print $1}')
|
||||
if [[ -z "$EXISTING_IDS" ]] && ! wpa_cli -i "$WIFI_IFACE" status >/dev/null 2>&1; then
|
||||
die "wpa_supplicant is not running on ${WIFI_IFACE}. Start it first."
|
||||
fi
|
||||
|
||||
for EID in $EXISTING_IDS; do
|
||||
wpa_cli -i "$WIFI_IFACE" disable_network "$EID" >/dev/null 2>&1 || true
|
||||
done
|
||||
|
||||
NETWORK_ID=$(wpa_cli -i "$WIFI_IFACE" add_network 2>/dev/null | tr -d '[:space:]')
|
||||
[[ "$NETWORK_ID" =~ ^[0-9]+$ ]] || die "wpa_supplicant is not running on ${WIFI_IFACE}. Start it first."
|
||||
[[ "$NETWORK_ID" =~ ^[0-9]+$ ]] || die "Failed to add network — wpa_supplicant may not be running."
|
||||
|
||||
PSK=$(echo "$WPA_CONF" | awk -F= '/^\s*psk=/{print $2}' | grep -v '"' | tr -d '[:space:]')
|
||||
|
||||
wpa_cli -i "$WIFI_IFACE" set_network "$NETWORK_ID" ssid "\"${NEW_SSID}\"" >/dev/null
|
||||
wpa_cli -i "$WIFI_IFACE" set_network "$NETWORK_ID" psk "${PSK}" >/dev/null
|
||||
wpa_cli -i "$WIFI_IFACE" enable_network "$NETWORK_ID" >/dev/null
|
||||
wpa_cli -i "$WIFI_IFACE" set_network "$NETWORK_ID" freq_list "2412 2417 2422 2427 2432 2437 2442 2447 2452 2457 2462" >/dev/null
|
||||
wpa_cli -i "$WIFI_IFACE" select_network "$NETWORK_ID" >/dev/null
|
||||
|
||||
info "Waiting for association..."
|
||||
@@ -138,11 +155,12 @@ case "$NET_OPT" in
|
||||
for i in $(seq 1 10); do
|
||||
sleep 2
|
||||
STATUS=$(wpa_cli -i "$WIFI_IFACE" status 2>/dev/null | awk -F= '/^wpa_state=/{print $2}')
|
||||
if [ "$STATUS" = "COMPLETED" ]; then
|
||||
CONN_SSID=$(wpa_cli -i "$WIFI_IFACE" status 2>/dev/null | awk -F= '/^ssid=/{print $2}')
|
||||
if [ "$STATUS" = "COMPLETED" ] && [ "$CONN_SSID" = "$NEW_SSID" ]; then
|
||||
ASSOCIATED=true
|
||||
break
|
||||
fi
|
||||
warn "Attempt $i/10 — state: ${STATUS:-unknown}"
|
||||
warn "Attempt $i/10 — state: ${STATUS:-unknown}, ssid: ${CONN_SSID:-none}"
|
||||
done
|
||||
|
||||
if [ "$ASSOCIATED" = "false" ]; then
|
||||
|
||||
Reference in New Issue
Block a user