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