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 |