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