Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/09/2006, à 17: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 wink

Dernière modification par kaworu (Le 18/09/2006, à 22:39)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#2 Le 16/09/2006, à 21: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, à 22: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 wink

Dernière modification par kaworu (Le 16/09/2006, à 22:56)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#4 Le 18/09/2006, à 12: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, à 13:31

kaworu

Re : [script] connexion WIFI

Salut!
EDIT : je crois que j'ai mal compris, passe direct à l'étape 1 wink
- 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, à 13:41)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#6 Le 18/09/2006, à 22: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, à 22: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, à 01: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, à 01: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 smile