slitaz-tools annotate tinyutils/wifibox @ rev 687

Add new wifibox using Yad for quick wifi connection (Full and advanced config via TazPanel)
author Christophe Lincoln <pankso@slitaz.org>
date Wed Feb 29 02:13:33 2012 +0100 (2012-02-29)
parents
children 1053731d6dc3
rev   line source
pankso@687 1 #!/bin/sh
pankso@687 2 #
pankso@687 3 # Small Wifi utility to quicly connect to a network. Easy network connection is
pankso@687 4 # most important, this tool provide a quick way to connect or change wifi
pankso@687 5 # settings while full network configuration is done in TazPanel.
pankso@687 6 #
pankso@687 7 # Copyright (C) 2012 SliTaz GNU/Linux - GNU gpl v2
pankso@687 8 #
pankso@687 9 # Authors : Christophe Lincoln <pankso@slitaz.org>
pankso@687 10 #
pankso@687 11
pankso@687 12 # Only for root.
pankso@687 13 if [ $(id -u) != 0 ]; then
pankso@687 14 exec tazbox su $(basename $0)
pankso@687 15 exit 0
pankso@687 16 fi
pankso@687 17
pankso@687 18 # Internationalization
pankso@687 19 . /usr/bin/gettext.sh
pankso@687 20 TEXTDOMAIN='wifibox'
pankso@687 21 export TEXTDOMAIN
pankso@687 22
pankso@687 23 # Start a wifi connection
pankso@687 24 start_wifi() {
pankso@687 25 sed -i \
pankso@687 26 -e s'/^DHCP=.*/DHCP="yes"/' \
pankso@687 27 -e s'/^STATIC=.*/STATIC="no"/' \
pankso@687 28 -e s'/^WIFI=.*/WIFI="yes"/' \
pankso@687 29 /etc/network.conf
pankso@687 30 ifconfig $WIFI_INTERFACE up
pankso@687 31 iwconfig $WIFI_INTERFACE txpower auto
pankso@687 32 /etc/init.d/network.sh start
pankso@687 33 }
pankso@687 34
pankso@687 35 # Catch essids and format output for GTK tree. We get the list of
pankso@687 36 # networks by Cell and without spaces.
pankso@687 37 detect_wifi() {
pankso@687 38 if [ -d /sys/class/net/$WIFI_INTERFACE/wireless ]; then
pankso@687 39 ifconfig $WIFI_INTERFACE up
pankso@687 40 echo -e "any\nN/A\nnone\n-"
pankso@687 41 for i in $(iwlist $WIFI_INTERFACE scan | sed s/"Cell "/Cell-/ | grep "Cell-" | awk '{print $1}')
pankso@687 42 do
pankso@687 43 scan=$(iwlist $WIFI_INTERFACE scan last | \
pankso@687 44 awk '/(Cell|ESS|Qual|Encry|IE: WPA|WPA2)/ {print}' | \
pankso@687 45 sed s/"Cell "/Cell-/ | grep -A 5 "$i")
pankso@687 46 essid=$(echo $scan | cut -d '"' -f 2)
pankso@687 47 if echo "$scan" | grep -q Quality; then
pankso@687 48 quality=$(echo $scan | sed 's/.*Quality=\([^ ]*\).*/\1/' | sed 's/.*Quality:\([^ ]*\).*/\1/')
pankso@687 49 else
pankso@687 50 quality="-"
pankso@687 51 fi
pankso@687 52 cryto=$(echo $scan | sed 's/.*key:\([^ ]*\).*/\1/')
pankso@687 53 # Check encryption type
pankso@687 54 if echo "$scan" | grep -q WPA*; then
pankso@687 55 cryto="WPA"
pankso@687 56 fi
pankso@687 57 # Connected or not connected...
pankso@687 58 if ifconfig | grep -A 1 $WIFI_INTERFACE | \
pankso@687 59 grep -q inet && iwconfig $WIFI_INTERFACE | \
pankso@687 60 grep ESSID | grep -q -w "$essid"; then
pankso@687 61 status=connected
pankso@687 62 else
pankso@687 63 status="-"
pankso@687 64 fi
pankso@687 65
pankso@687 66 echo -e "$essid\n$quality\n$cryto\n$status"
pankso@687 67 done
pankso@687 68 fi
pankso@687 69 }
pankso@687 70
pankso@687 71 # Prompt for password or connect
pankso@687 72 connect_main() {
pankso@687 73 case $keytype in
pankso@687 74 WPA|WEP)
pankso@687 75 title=$(gettext "Wifi connection")
pankso@687 76 text=$(gettext "Connection to:")
pankso@687 77 yad --form --width=520 --height=140 \
pankso@687 78 --center --on-top --window-icon="network-wireless" \
pankso@687 79 --image="network-wireless" --image-on-top \
pankso@687 80 --title="$title" --text="$text <b>$essid</b>" \
pankso@687 81 --field="$keytype $(gettext "Password:"):H" ;;
pankso@687 82 none) continue ;;
pankso@687 83 *) exit 0 ;;
pankso@687 84 esac
pankso@687 85 }
pankso@687 86
pankso@687 87 connect() {
pankso@687 88 main=$(connect_main)
pankso@687 89 ret=$?
pankso@687 90 # Deal with --button values
pankso@687 91 case $ret in
pankso@687 92 1) exit 0 ;;
pankso@687 93 *) continue ;;
pankso@687 94 esac
pankso@687 95 /etc/init.d/network.sh stop
pankso@687 96 sleep 1
pankso@687 97 key=$(echo "$main" | cut -d '|' -f 1)
pankso@687 98 sed -i \
pankso@687 99 -e s"/^WIFI_ESSID=.*/WIFI_ESSID=\"$essid\""/ \
pankso@687 100 -e s"/^WIFI_KEY=.*/WIFI_KEY=\"$key\"/" \
pankso@687 101 -e s"/^WIFI_KEY_TYPE=.*/WIFI_KEY_TYPE=\"$keytype\"/" \
pankso@687 102 /etc/network.conf
pankso@687 103 start_wifi
pankso@687 104 }
pankso@687 105
pankso@687 106 # Main GUI box function with pure Yad spec
pankso@687 107 wifi_main() {
pankso@687 108 title=$(gettext "Wifi network")
pankso@687 109 text=$(gettext "<b>Connect to a wifi network</b> \(Double click to connect\)")
pankso@687 110 detect_wifi | yad --list --width=520 --height=300 \
pankso@687 111 --center --on-top --window-icon="network-wireless" \
pankso@687 112 --image="network-wireless" --image-on-top \
pankso@687 113 --title="$title" --text="$text" \
pankso@687 114 --column "$(gettext "essid Name")" --column "$(gettext "Quality")" \
pankso@687 115 --column "$(gettext "Encryption")" --column "$(gettext "Status")" \
pankso@687 116 --button="Start wifi:4" --button="Stop wifi:3" \
pankso@687 117 --button="Configuration:2" --button="gtk-close:1"
pankso@687 118 }
pankso@687 119
pankso@687 120 # Main function
pankso@687 121 wifi() {
pankso@687 122 # Store box results
pankso@687 123 main=$(wifi_main)
pankso@687 124 ret=$?
pankso@687 125 # Deal with --button values
pankso@687 126 case $ret in
pankso@687 127 1) exit 0 ;;
pankso@687 128 2) tazweb http://tazpanel:82/network.cgi?wifi && exit 0 ;;
pankso@687 129 3) /etc/init.d/network.sh stop && exit 0 ;;
pankso@687 130 3) start_wifi && exit 0 ;;
pankso@687 131 *) continue ;;
pankso@687 132 esac
pankso@687 133 if [ -n "$main" ]; then
pankso@687 134 essid=$(echo "$main" | cut -d "|" -f 1)
pankso@687 135 keytype=$(echo "$main" | cut -d "|" -f 3)
pankso@687 136 connect
pankso@687 137 fi
pankso@687 138 }
pankso@687 139
pankso@687 140 #
pankso@687 141 # Script commands
pankso@687 142 #
pankso@687 143
pankso@687 144 case "$1" in
pankso@687 145 usage|help|-*)
pankso@687 146 echo "$(gettext "Usage:") $(basename $0) [interface]" ;;
pankso@687 147 *)
pankso@687 148 . /etc/network.conf
pankso@687 149 [ -n "$1" ] && WIFI_INTERFACE="$1"
pankso@687 150 wifi ;;
pankso@687 151 esac
pankso@687 152
pankso@687 153 exit 0
pankso@687 154