diff options
Diffstat (limited to 'scripts/wifi')
-rwxr-xr-x | scripts/wifi | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/scripts/wifi b/scripts/wifi new file mode 100755 index 0000000..5c54acc --- /dev/null +++ b/scripts/wifi @@ -0,0 +1,202 @@ +#!/bin/bash + +# Helper script to activate/desactivate WLAN from command line + +# Usage : +# wifi connect <ssid> <passphrase> +# wifi disconnect <ssid> +# wifi scan +# wifi status + +##################################################### + +### global vars ### + +CONNMAN=/usr/sbin/connmanctl + +script=$(basename $0) +configpath=/var/lib/connman # connman config directory +ssid="" # ssid of wifi network to reach +passphrase="" # passphrase of wifi network to reach +service="" # service identifier of the network service to reach +fullservice="" # <ssid><service> + +function error() { + echo ERROR: "$@" >&2 + cat << EOF >&2 +Usage: + $script connect <ssid> [passphrase] + $script disconnect [ssid] + $script scan + $script status +EOF + exit 1 +} + +function wifi_enable() { + command=$($CONNMAN technologies | grep -A 4 wifi | sed -n '4p') + + if [[ $command == *True ]]; then + echo ">>> Wifi is already enabled ... Ok" + else + echo ">>> Enabling wifi ..." + command=$($CONNMAN enable wifi) + if [[ $command == Enabled* ]]; then + echo $command + else + echo ">>> Cannot enable wifi !" + exit 1 + fi + fi +} + +function wifi_disable() { + $CONNMAN disable wifi +} + +function wifi_scan() { + echo -e "\n>>> Scanning for available wifi networks..." + $CONNMAN scan wifi +} + +function wifi_connected() { + command=$($CONNMAN technologies | grep -A 4 wifi | sed -n '5p') + + if [[ $command == *True ]];then + echo -e "\n>>> Already connected to a wifi network" + return 0 + fi + return 1 +} + +function wifi_status() { + echo -e "\n>>> Wifi status:" + $CONNMAN technologies | grep -A 4 wifi + echo -e "\n>>> Available SSIDs:" + $CONNMAN services | grep wifi_ +} + +function wifi_config() { + echo -e "\n>>> Setting up wifi connection..." + + retries=5 + + while [ 1 ]; do + $CONNMAN scan wifi + echo -e "\n>>> Available SSIDs:" + $CONNMAN services | grep wifi_ + + fullservice=$($CONNMAN services | cut -c 5- | sed 's/ \+ /:/g' | grep "$ssid:") + if [[ -n $fullservice ]]; then + break + fi + + retries=$(( retries - 1 )) + if [[ $retries -gt 0 ]]; then + echo "waiting for $ssid to appear..." + sleep 5 + continue + fi + echo "Target ssid not found !" + exit 1 + done + + ssid=$(echo "$fullservice" | awk -F: '{print $1}') + service=$(echo "$fullservice" | awk -F: '{print $2}') + + echo "Target ssid found - config is :" + echo "SSID : $ssid" + echo "Service Id : $service" + echo "Passphrase : $passphrase" + + cat <<EOF >"$configpath/$ssid.config" +[service_$service] +Name = $ssid +Type = wifi +Passphrase = $passphrase +EOF + echo "Configuration written" +} + +function wifi_connect() { + echo -e "\n>>> Performing connection ..." + output=$($CONNMAN connect $service) + + if [[ $output == Connected* ]];then + echo "...Ok." + echo $output + else + echo "...connection failed !" + echo $output + + wifi_disconnect + echo "Check your SSID or your passphrase" + exit 1 + fi +} + +function wifi_disconnect() { + + if [[ -z "$ssid" ]]; then + $CONNMAN services | cut -c5- | sed 's/ \+ /:/g' | ( while read line; do + ssid=$(cut -f1 -d':' <<<$line) + serv=$(cut -f2 -d':' <<<$line) + if [[ "$serv" =~ ^wifi_ && -f "$configpath/$ssid.config" ]]; then + echo "Disconnecting $serv" + $CONNMAN disconnect $serv + echo "Cleaning config $ssid.config" + rm -rf "$configpath/$ssid.config" + fi + done ) + return 0 + fi + + service=$($CONNMAN services | cut -c 5- | sed 's/ \+ /:/g' | grep "^$ssid:" | awk -F: '{print $2}') + if [[ -z "$service" ]]; then + echo "... unknown service" + rm -rf "$configpath/$ssid.config" # clear config in all cases + return 1 + fi + + output=$($CONNMAN disconnect $service) + rm -rf "$configpath/$ssid.config" # clear config in all cases + if [[ $output == Disconnected* ]];then + echo "...Ok." + echo $output + else + echo "...disconnection failed !" + echo $output + return 1 + fi +} + +case $1 in + connect) + ssid=$2 + passphrase=$3 + [ -z "$ssid" ] && error "No ssid defined !" + wifi_enable + wifi_connected && exit 0 + wifi_config + wifi_connect + ;; + disconnect) + ssid=$2 + wifi_disconnect + wifi_disable + ;; + scan) + wifi_enable + wifi_scan + wifi_status + ;; + status) + wifi_status + ;; + connected) + wifi_connected && exit 0 + exit 1 + ;; + *) + error "Command line doesn't have any option !" +esac |