#!/bin/bash set -euo pipefail WIFI_IFACE="wlan0" KNOWN_CONNECTIONS=( "4pi:4pi" "eskimue.de:netplan-wlan0-eskimue.de" ) FALLBACK_AP_CONN="CUNO-AP" SCAN_WAIT_SECONDS=10 get_active_connection() { nmcli -t -f GENERAL.CONNECTION device show "$WIFI_IFACE" 2>/dev/null | head -n 1 | cut -d: -f2- } activate_connection() { local connection_name="$1" nmcli --wait 15 connection up "$connection_name" ifname "$WIFI_IFACE" >/dev/null 2>&1 } is_known_connection() { local active_connection="$1" local entry for entry in "${KNOWN_CONNECTIONS[@]}"; do local connection_name="${entry#*:}" if [[ "$active_connection" == "$connection_name" ]]; then return 0 fi done return 1 } scan_for_known_connection() { local visible_ssids local entry nmcli device wifi rescan ifname "$WIFI_IFACE" >/dev/null 2>&1 || true sleep "$SCAN_WAIT_SECONDS" visible_ssids="$(nmcli -t -f SSID device wifi list ifname "$WIFI_IFACE" 2>/dev/null || true)" for entry in "${KNOWN_CONNECTIONS[@]}"; do local ssid="${entry%%:*}" local connection_name="${entry#*:}" if printf '%s\n' "$visible_ssids" | grep -Fxq "$ssid"; then echo "$connection_name" return 0 fi done return 1 } activate_initial_connection() { local active_connection local selected_connection active_connection="$(get_active_connection)" if is_known_connection "$active_connection"; then return 0 fi if selected_connection="$(scan_for_known_connection)"; then activate_connection "$selected_connection" return 0 fi activate_connection "$FALLBACK_AP_CONN" || true } activate_initial_connection