Pages : 1
#1 Le 16/09/2006, à 16:02
- kaworu
[script] connexion WIFI
Comme je bouge souvent avec mon laptop, je dois me connecter à bcp de réseaux wifi. J'ai jamais réussi à me connecter avec les inits scripts, et je voulais apprendre bash, alors j'ai fait un petit script de connexion wifi qui connait plusieurs points d'accès etc. Comme tous les pts d'accès dont j'ai besoins (et comme la majorité d'entre eux) c'est une configuration DHCP. Si qqn à besoin d'une connexion à IP fixe, on peut toujours rajouter une fonction et une variable..
Ce script à besoins des programmes suivants :
- wirelesstools
- dhcpcd (parce que j'ai jamais pu sentir dhclient, mais c'est facilement modifiable)
Voilà le script :
#!/sbin/runscript
#
# /etc/init.d/net.wifi
#*************************************************************************
# This program is free software; you can redistribute it and/or *
# modify it under the terms of the GNU General Public License *
# as published by the Free Software Foundation; either version 2 *
# of the License, or (at your option) any later version. *
# *
# This program is distributed in the hope that it will be useful, *
# but WITHOUT ANY WARRANTY; without even the implied warranty of *
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
# GNU General Public License for more details. *
# *
# You should have received a copy of the GNU General Public License *
# along with this program; if not, write to the Free Software *
# Foundation, Inc., 51 Franklin Street, Fifth Floor, *
# Boston, MA 02110-1301, USA. *
#*************************************************************************
wifi_scan() {
ebegin "begining the scan"
# recherche d'un ssid connu :
echo -n " "
for conf_files in /etc/conf.d/wifi.* ; do
echo -n "." && sleep 0.1
source $conf_files
scan_die="` iwlist $interface scan | grep ${ESSID} | tail -n1 | cut -d'"' -f 2`"
if [ "${scan_die}" = "${ESSID}" ]; then
break
else
unset ESSID KEY
fi
done
echo
if [ -z "${ESSID}" ]; then
einfo "No ESSID found or no config file!"
eend 0
else
einfo "found the followed essid : ${ESSID}"
eend 0
fi
}
dhcp_request() {
ebegin "DHCP request"
if [ -f "/var/run/dhcpcd-$interface.pid" ]; then
rm -f /var/run/dhcpcd-$interface.pid
fi
dhcpcd $interface -h "$computer_name" -t $time_limit
ip_dhcp=$(ifconfig $interface | grep "inet addr:" | cut -d ":" -f 2 | cut -d " " -f 1)
if [ "$ip_dhcp" != "" ]; then
echo " IP adress: $ip_dhcp"
fi
eend 0
}
wifi_configure(){
einfo "iwconfig"
# definition d'un essid quelconque, certaines carte "marchent" mieux comme ca ...
iwconfig $interface essid "foobar" && sleep 0.1
if [ -z ${KEY} ]; then
iwconfig $interface essid ${ESSID}
else
iwconfig $interface essid ${ESSID} key ${KEY}
fi
# on attend 3 secondes, le temps que la carte s'associe.
echo -n " "
for i in 1 2 3 4 5 6 ; do
echo -n "." && sleep 0.5
done
echo
eend 0
}
fill_unset_var() {
interface="wlan0"
computer_name=$(hostname)
time_limit=60
}
stop() {
ebegin "stop wifi"
fill_unset_var
[ -f /etc/conf.d/net.wifi.conf ] && source /etc/conf.d/net.wifi.conf
ifconfig $interface down &>/dev/null
if [ -f "/var/run/dhcpcd-$interface.pid" ]
then
rm -f /var/run/dhcpcd-$interface.pid
fi
[ -z "$modules_rmmod" ] || modprobe -r $modules_rmmod
einfo "done !"
eend 0
sleep 1
}
start() {
ebegin "starting wifi"
fill_unset_var
[ -f /etc/conf.d/net.wifi.conf ] && source /etc/conf.d/net.wifi.conf
[ -z "$modules_modprobe" ] || modprobe $modules_modprobe && sleep 2
wifi_scan
if [ -z "${ESSID}" ]; then
einfo "exiting"
svc_stop
else
wifi_configure
dhcp_request
if [ "$ip_dhcp" = "" ]; then
einfo "No IP adress ! :("
else
einfo "you're connected, Enjoy!"
fi
fi
eend 0
sleep 1
}
restart() {
svc_stop
svc_start
}
Il faut ensuite un fichier de configuration, qui est /etc/conf.d/net.wifi.conf (je vous donne le mien comme exemple :
# interface : l'interface wifi, par défaut (si pas configuré dans ce fichier) : wlan0
interface="eth1"
# le nom du PC envoyé lors de la requête DHCP. par défaut : le nom de votre machine
computer_name="ka_at_gentoo"
# le temps limite pour la requête DHCP. par défaut : 60 sec
time_limit="20"
# les modules sont facultatifs. Si les variables ne sont pas déclarée alors le script ne se chargera pas de charger/décharger des modules.
modules_modprobe="ipw2200"
modules_rmmod="ipw2200 ieee80211_crypt_wep"
Et finalement un fichier par ESSID qu'il faut appeler /etc/conf.d/wifi.CE_QUE_VOUS_VOULEZ. Le nom définira l'ordre de préférence. par exemple /etc/conf.d/wifi.__1__maison sera préféré par le script (si les 2 sont disponibles) à wifi.__2__ecole car il sera le premier étudié. voilà par exemple chez moi :
# le nom du SSID
ESSID="ka_linksys"
# la clé WEP si c'est une phrase clé
#KEY="s:MA_PHRASE"
# la clé WEP en 64b
KEY="18fa4b6a83"
# si pas de clé wep, ne pas définir $KEY ou le laisser vide :
#KEY=""
Comme on dit :
Hope this can help !
n'hésitez pas pour les question / corrections
Dernière modification par kaworu (Le 18/09/2006, à 21:39)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#2 Le 16/09/2006, à 20:15
- canard
Re : [script] connexion WIFI
loin de moi l'idée de vouloir critiquer ton script mais perso j'utilise network manager qui permet la meme chose: je passe du reseau filaire au wifi de mon boulot, le wifi à la maison ou chez mes parents / beau-parents.....
Bref ça fait un peu la meme chose....;)
Evidemment ça t'a permis d'apprendre à programmer en bash et ça c'est une TRES bonne idée.:D
A+
Hors ligne
#3 Le 16/09/2006, à 21:45
- kaworu
Re : [script] connexion WIFI
C'est surement plus simple d'utiliser network manager et il doit permettre plus de trucs, mais quand j'ai écris ce script je tournais sous Gentoo qui utilise des init script que j'ai jamais réussi à configurer (laptop). ça m'a permis de faire un script qui marche sur toutes les distribs (hyper portable quoi), que j'ai pu réutiliser sous Ubuntu (que j'utilise sur mon desktop) et sous SuSE (autre Desktop) sans réapprendre un utilitaire par distrib. De plus ce script permet de rmmod les modules wifi automatiquement si on est pas connecté (je trouve plus logique, pour mes cartes réseaux/PCMCIA/MMC etc je préfère mettre en module dans le kernel, et loader uniquement quand y'a besoin via mes scripts persos), ce que peu d'init script/utilitaire permettent de faire (bon sûrement possible en bidouillant un peu).
Voilà l'avantage que d'autres pourrait en tirer, et aussi d'apprendre un peu bash et de l'améliorer
Dernière modification par kaworu (Le 16/09/2006, à 21:56)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#4 Le 18/09/2006, à 11:11
- bartmarley
Re : [script] connexion WIFI
J'ai essayé ton script, et je ne comprends pas pourquoi ça ne marche pas chez moi sous kde.
je suis toujours obligé de faire
sudo rmmod acx
sudo modprobe acx firmware_ver=1.2.0.30
puis d'utiliser l'assistant wifi pour me connecter.
J'ai bien installé dhcpcd et les wirelesstools sont bien installés puisque la commande "iwconfig marche".
Voici les scripts que j'ai mis:
# interface : l'interface wifi, par défaut (si pas configuré dans ce fichier) : wlan0
interface="wlan0"
# le nom du PC envoyé lors de la requête DHCP. par défaut : le nom de votre machine
computer_name="ubuntu"
# le temps limite pour la requête DHCP. par défaut : 60 sec
time_limit="30"
# les modules sont facultatifs. Si les variables ne sont pas déclarée alors le script ne se chargera pas de charger/décharger des modules.
#modules_modprobe="ipw2200"
#modules_rmmod="ipw2200 ieee80211_crypt_wep"
modules_modprobe="acx firmware_ver=1.2.0.30"
modules_rmmod="acx"
# le nom du SSID
ESSID="Freebox"
# la clé WEP si c'est une phrase clé
#KEY="s:MA_PHRASE"
# la clé WEP en 64b
KEY="d53df3c98c"
# si pas de clé wep
#KEY=""
j'accepterais volontiers un petit coup de main de ta part pour voir où ça plante.
Merci
Hors ligne
#5 Le 18/09/2006, à 12:31
- kaworu
Re : [script] connexion WIFI
Salut!
EDIT : je crois que j'ai mal compris, passe direct à l'étape 1
- ce que tu me dis, c'est que au démarrage tu dois faire
sudo rmmod acx
sudo modprobe acx firmware_ver=1.2.0.30
avant de pouvoir te connecter ?
Si c'est le cas, il suffit de mettre ces deux commande dans /etc/init.d/local.start (suis pas sûr du fichier, mais il doit avoir un truc du genre) pour que ce soit fait automatiquement à chaque fois que tu démarre ton ordi. Si j'ai mal compris, peut tu faire ce qui suit :
1) Il faut biensûr que tu mette ce script d'initialisation au démarrage, installe le paquet sysvconfig qui permet de gerer les init script ou alors utilise update.rc (man update.rc si tu ne sais pas comment il marche).
2) que donne l'output de
sudo /etc/init.d/net.wifi start
3) on va s'assurer que les fichiers sont à la bonne place. Que donne :
cat /etc/conf.d/net.wifi.conf
cat /etc/conf.d/wifi.*
4) tu as bien executé le script en root ?
Dernière modification par kaworu (Le 18/09/2006, à 12:41)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#6 Le 18/09/2006, à 21:04
- bartmarley
Re : [script] connexion WIFI
merci, avec sysvconfig ça a l'air de marcher!
Par contre je vais lacher kde et retourner sous gnome donc je vais pas trop avoir l'occasion de tester la chose régulièrement.
encore merci
Hors ligne
#7 Le 18/09/2006, à 21:35
- kaworu
Re : [script] connexion WIFI
y'a pas de soucis, ce script marche sous n'importe quel interface graphique (même sans interface graphique d'ailleur).
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#8 Le 19/09/2006, à 00:34
- bartmarley
Re : [script] connexion WIFI
il marche peut-être sous n'importe quelle interface graphique mais en tout cas sous gnome j'en ai pas besoin puisque ma connexion wifi s'établit toute seule
Hors ligne
#9 Le 27/04/2007, à 00:00
- Amael_H
Re : [script] connexion WIFI
Merci beaucoup pour ton code ! Ca marche impeccable sur ma Kubuntu 7.04 fraichement installée, et ton code est d'une qualité irreprochable ! Config super simple, résultats garantis
Pages : 1