89 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.0 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)"
 | |
| 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"
 |