From 51da29555e6d7bf8d22c220b69afd4c76ec3a71f Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 19 Dec 2022 01:47:30 +0000 Subject: [PATCH] sane-ip-reconnect: fix issue where we'd reconnect to the existing, subpar network --- pkgs/sane-scripts/src/sane-ip-reconnect | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pkgs/sane-scripts/src/sane-ip-reconnect b/pkgs/sane-scripts/src/sane-ip-reconnect index ab422f47..73ea6540 100755 --- a/pkgs/sane-scripts/src/sane-ip-reconnect +++ b/pkgs/sane-scripts/src/sane-ip-reconnect @@ -7,6 +7,14 @@ set -ex sudo iwctl station wlan0 scan sleep 5 + # get networks. remove control characters (colors), then leading info, then take the top-rated network -netname=$(iwctl station wlan0 get-networks | sed 's/\[[0-9;]*m//g' | sed 's/^ [ >]*//g' | sed -n 5p | cut -d' ' -f 1) -sudo iwctl station wlan0 connect "$netname" +networks=$(iwctl station wlan0 get-networks rssi-dbms | sed 's/\[[0-9;]*m//g' | sed 's/ [ >]*/ /g' | sed 's/^ //' | tail -n +5) + +strengths=$(echo "$networks" | grep -o '\-[0-9][0-9]* *$') +best_strength=$(echo "$strengths" | sort -h | tail -n 1) +best_line=$(echo "$networks" | grep -- "$best_strength$") +# network names could have spaces in them if someone's evil, so rather than `cut`, we trim the `psk` and `db` columnds +best_network=$(echo "$best_line" | sed 's/ [a-z][a-z]* -[0-9][0-9]* *$//g') + +sudo iwctl station wlan0 connect "$best_network"