|
|
Riga 1: |
Riga 1: |
| {{Versioni compatibili|Tutte le versioni di Debian}}
| |
| __TOC__
| |
| ==Gestire automaticamente configurazioni wifi multiple==
| |
|
| |
|
| Chi si sposta frequentemente con il proprio portatile ha, spesso, la necessità di collegarsi a reti wifi differenti, ma editare ogni volta il file <code>/etc/network/interfaces</code> per cambiare la configurazione dell'interfaccia wireless può risultare alquanto fastidioso. Per questo motivo alcuni si affidano a tool grafici per gestire diverse configurazioni di rete, ma questi strumenti non sono esenti da difetti e, talvolta, possono avere comportamenti imprevedibili. Un'altra valida soluzione è quella di usare [[ Switchconf ]], sicuramente più affidabile, che però richiede un intervento manuale per la scelta della configurazione adatta al luogo in cui ci si trova.<br/>
| |
| Questa guida vuole proporre una soluzione alternativa, completamente automatica, al problema della gestione delle configurazioni wifi multiple, utilizzando <code>/etc/network/interfaces</code> come unico file di configurazione e un piccolo script in perl.
| |
|
| |
| ==Le interfacce logiche==
| |
|
| |
| Normalmente siamo abituati a vedere nel file <code>/etc/network/interfaces</code> una configurazione simile alla seguente
| |
| <pre>
| |
| iface eth0 inet static
| |
| address 192.168.0.2
| |
| netmask 255.255.255.0
| |
| network 192.168.0.0
| |
| broadcast 192.168.0.255
| |
| gateway 192.168.0.1
| |
| </pre>
| |
| dove <code>eth0</code> è il nome dell'interfaccia fisica a cui la configurazione si riferisce.<br/>
| |
| Per abilitare una configurazione come questa basta lanciare il comando
| |
| <pre>
| |
| # ifup eth0
| |
| </pre>
| |
| Non tutti sanno, però, che è perfettamente lecito scrivere
| |
| <pre>
| |
| iface rete_casa inet static
| |
| address 192.168.0.2
| |
| netmask 255.255.255.0
| |
| network 192.168.0.0
| |
| broadcast 192.168.0.255
| |
| gateway 192.168.0.1
| |
| </pre>
| |
| dove il nome dell'interfaccia fisica è sostituito da un nome di fantasia (rete_casa).<br/>
| |
| Per rendere operativa una configurazione del genere si userà sempre il comando <code>ifup</code> creando l'associazione tra l'interfaccia logica e una interfaccia fisica. Ad esempio con
| |
| <pre>
| |
| ifup eth0=rete_casa
| |
| </pre>
| |
| viene attivata e configurata l'interfaccia fisica eth0 come specificato per l'interfaccia logica rete_casa.
| |
|
| |
| ==Rendere automatica la configurazione wifi==
| |
|
| |
| A questo punto è facile capire come sia possibile, utilizzando le interfacce logiche, creare in /etc/network/interfaces tutte le configurazioni wifi che ci servono. Vediamo come, però, possiamo automatizzare la scelta della configurazione corretta in base al luogo in cui ci troviamo.<br/>
| |
| Ipotizziamo di voler configurare il nostro portatile in modo che si connetta automaticamente a due reti: wifi_casa e wifi_lavoro.
| |
| In /etc/network/interfaces scriveremo qualcosa di simile a
| |
| <pre>
| |
| iface wifi_casa inet dhcp
| |
| wpa-driver wext
| |
| wpa-ssid "wifi_casa"
| |
| wpa-psk "ddff442dg4"
| |
|
| |
| iface wifi_lavoro inet dhcp
| |
| wireless-essid wifi_lavoro
| |
| wireless-channel 1
| |
| wireless-key "6303727062"
| |
| </pre>
| |
| facendo attenzione che il nome dell'interfaccia logica corrisponda allo [http://it.wikipedia.org/wiki/SSID SSID] della rete a cui la configurazione si riferisce. Creiamo, poi, in <code>/root/wifiup.pl</code> (o in un altro percorso a piacere) lo script in perl che, in base al risultato della scansione delle reti disponibili, attiverà la giusta configurazione.<br/>
| |
| Il contenuto dello script è il seguente:
| |
| <pre>
| |
| #!/usr/bin/perl -w
| |
| ####################################################################################
| |
| # #
| |
| # wifiup.pl 2009 Scritto da Metaldaze (Cristiano Inturri) #
| |
| # #
| |
| ####################################################################################
| |
| # ultima modifica: 19/02/2010
| |
|
| |
| use strict;
| |
|
| |
| my $interface = shift or die "Specificare il nome dell\'interfaccia wifi\n";
| |
|
| |
| my @knownNetwork = "";
| |
|
| |
| my $foundNetwork = "";
| |
| my $knownNetwork;
| |
| my @iwlist = "";
| |
|
| |
| if ($interface eq "-h" or $interface eq "--help") {
| |
| print "USO: wifiup.pl interfaccia\nOPZIONI:\n\t--h --help\tVisualizza questo messaggio\n";
| |
| exit 0;
| |
| }
| |
|
| |
| die "ERRORE: L\'interfaccia $interface non fa riferimento ad un dispositivo wifi\n" if ( `iwconfig $interface 2>&1` !~ /ESSID/ );
| |
|
| |
| foreach (`grep iface /etc/network/interfaces`) {
| |
| push(@knownNetwork,$1) if /iface\s+(.*)\s+inet/;
| |
| }
| |
|
| |
| system("ifconfig $interface up");
| |
| push(@iwlist,$_) foreach (`iwlist $interface scan | grep ESSID`);
| |
| foreach $knownNetwork (@knownNetwork) {
| |
| foreach (@iwlist) {
| |
| $foundNetwork = $knownNetwork if /$knownNetwork/;
| |
| }
| |
| }
| |
| if ($foundNetwork eq "") {
| |
| print "wifiup.pl: Nessuna rete wifi conosciuta.\n";
| |
| } else {
| |
| print "wifiup.pl: Configuro $interface per la rete $foundNetwork.\n";
| |
| system("ifup $interface=$foundNetwork");
| |
| }
| |
| </pre>
| |
| Rendiamo <code>wifiup.pl</code> eseguibile con
| |
| <pre>
| |
| # chmod +x wifiup.pl
| |
| </pre>
| |
| A questo punto possiamo testarne il funzionamento tenendo presente che lo script richiede come argomento il nome dell'interfaccia wifi. Ad esempio
| |
| <pre>
| |
| # /root/wifiup.pl wlan0
| |
| </pre>
| |
| Ora dobbiamo fare in modo che il nostro script venga eseguito ad ogni avvio di Debian. Per fare questo basta inserire il comando in <code>/etc/rc.local</code>.
| |
|
| |
| {{ warningbox|Lo script funziona solo nel caso in cui l'access point non nasconda lo SSID della rete wifi. }}
| |
| ----
| |
| Autore: [[Utente:Metaldaze|Metaldaze]]
| |
| [[Categoria:Wireless]]
| |
| [[Categoria:Networking]]
| |