51 lines
1.1 KiB
Bash
Executable File
51 lines
1.1 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
NMCLI=(nmcli -f 'SSID,RATE,BARS,SECURITY' dev wifi)
|
|
CON=("${NMCLI[@]}" connect)
|
|
|
|
RESCAN=0
|
|
function rescan() {
|
|
if [ "$RESCAN" = 1 ]; then
|
|
return 1
|
|
fi
|
|
RESCAN=1
|
|
"${NMCLI[@]}" list --rescan yes > /dev/null
|
|
readarray -t NET <<< "$("${NMCLI[@]}" list | awk '!w[$1]++' | tail -n+2)"
|
|
}
|
|
|
|
function connect() {
|
|
local pass
|
|
|
|
if ! "${CON[@]}" "$1"; then
|
|
case "$?" in
|
|
4)
|
|
pass="$(zenity --entry --text "Enter password for $1")"
|
|
"${CON[@]}" "$1" password "$pass"
|
|
;;
|
|
10)
|
|
rescan && connect "$@"
|
|
;;
|
|
esac
|
|
fi
|
|
kill -36 "$(cat "$HOME/.cache/pidofbar")"
|
|
exit
|
|
}
|
|
|
|
if [ -n "$1" ]; then
|
|
connect "$1"
|
|
fi
|
|
|
|
readarray -t NET <<< "$("${NMCLI[@]}" list | awk '!w[$1]++' | tail -n+2)"
|
|
while true; do
|
|
n="$(printf '%s\n' "${NET[@]}" rescan | dmenu -i -l 10)"
|
|
if [ -z "$n" ]; then
|
|
exit
|
|
fi
|
|
if [ "$n" = rescan ]; then
|
|
RESCAN=0
|
|
rescan
|
|
else
|
|
connect "$(awk '{print $1}' <<< "$n")"
|
|
fi
|
|
done
|