slitaz-tools annotate boxes/wifi-box @ rev 745

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