#!/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)" out="$(nmcli con up "$ssid" 2>&1 | grep -i error)" res="$?" # 10 If the connexion does not exist already # # 4 If the SSID got multiple bad connexion names # if [ "$res" -ne 0 ] ; then out2="$out" out="$(nmcli device wifi connect "$ssid" 2>&1 | grep -i error)" res="$?" fi if [ -n "$(echo $out | grep -i 'secrets were required')" ] ; then out2="$out2$out" notify "Need password" pass="$(zenity --password)" out="$(nmcli device wifi connect "$ssid" --password "$pass" 2>&1 | grep -i error)" res="$?" fi [ -z "$out" ] && notify "Connected :)" || notify "Error connecting :(\n$out\n$out2"