petits-scripts-persos/wifi_chooser
2022-03-11 13:43:21 +01:00

73 lines
1.5 KiB
Bash
Executable File

#!/bin/sh
# choose a wifi signal in range and try to connect to it
verb=0
action=start
while true ; do
case "$1" in
"-v")
verb=1
;;
"stop")
action=stop
;;
"start") ;;
"") break ;;
*)
echo "Invalid parameter '$1'"
break;;
esac
shift
done
# Remaining args are garbage
if [ "$#" -ne 0 ] ; then
echo "Usage: $0 [-v] [start|stop]"
echo "-v verbose output"
echo "start or stop the wifi"
exit -1
fi
title="Wifi Selector"
id=""
notify () {
if [ -z "$id" ] ; then
id="$(dunstify -p "$title" "$@")"
else
dunstify -r "$id" "$title" "$@"
fi
}
# Stop the wifi if asked
if [ "$action" == "stop" ] ; then
nmcli radio wifi off
notify "Wifi stopped"
exit "$?"
fi
# Else, start it if needed
if ( nmcli radio wifi | grep disabled > /dev/null ) ; then
notify "Turning on"
nmcli radio wifi on
sleep 2
fi
notify "Scanning networks in range..."
nmcli device wifi rescan
ssid="$(nmcli -f IN-USE,SSID,BARS d wifi list | dmenu -l 8)"
ssid="$(echo "${ssid:2:-5}" | sed 's/^ *//g' | sed 's/ *$//g')"
# We get a clean version of SSIDs. It is a fix to connect to wifis that begin or end with spaces
ssid="$(nmcli -f SSID -m multiline -t -c no d wifi list | grep -F "$ssid")"
ssid="${ssid:5}"
[ $verb -gt 0 ] && echo "ssid: $ssid"
[ -z "$ssid" ] && notify "No SSID selected" && exit 1
notify "Connecting to $ssid"
out="$(nmcli d wifi connect "$ssid" 2>&1 | grep -i error)"
res="$?"
[ -z "$out" ] && notify "Connected :)" || notify "Error connecting :(\n$out"