In questo tutorial, stiamo per imparare come connettersi alla rete Wi-Fi da riga di comando su Ubuntu 18.04/20.04 server e desktop utilizzando wpa_supplicant. In una moderna rete wireless domestica, le comunicazioni sono protette con WPA-PSK (pre-shared key) al contrario di WPA-Enterprise, che è progettato per le reti aziendali. WPA-PSK è anche conosciuto come WPA-Personal. wpa_supplicant è un’implementazione del componente WPA supplicant. Un supplicant nella LAN wireless è un software client installato sul computer dell’utente finale che ha bisogno di essere autenticato per unirsi ad una rete.
Step 1: Trova il nome della tua interfaccia wireless e della rete wireless
Esegui il comando iwconfig
per trovare il nome della tua interfaccia wireless.
iwconfig
wlan0
era un nome comune per l’interfaccia di rete wireless sui sistemi Linux senza Systemd. Poiché Ubuntu usa Systemd, troverete che la vostra interfaccia di rete wireless si chiama qualcosa come wlp4s0
. Puoi anche vedere che non è associata a nessun punto di accesso in questo momento.
Se la tua interfaccia wireless non viene visualizzata, forse hai bisogno di farla apparire con il seguente comando.
sudo ifconfig wlp4s0 up
Poi trova il nome della tua rete wireless scansionando le reti vicine con il comando qui sotto. Sostituite wlp4s0
con il nome della vostra interfaccia wireless. ESSID è l’identificatore del nome della rete.
sudo iwlist wlp4s0 scan | grep ESSID
Step 2: Collegarsi alla rete Wi-Fi con WPA_Supplicant
Ora installate wpa_supplicant
su Ubuntu 18.04/20.04 dal repository del software predefinito.
sudo apt install wpasupplicant
Dobbiamo creare un file chiamato wpa_supplicant.conf
usando l’utilità wpa_passphrase
wpa_supplicant.conf
è il file di configurazione che descrive tutte le reti a cui l’utente vuole che il computer si connetta. Esegui il seguente comando per creare questo file. Sostituite ESSID e Wi-Fi passphrase con i vostri.
wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee /etc/wpa_supplicant.conf
Nota che nello screenshot di sopra, ho avvolto il mio ESSID con doppie virgolette, perché il mio ESSID contiene uno spazio bianco.
L’output del comando wpa_passphrase
sarà convogliato in tee
, e poi scritto nel file /etc/wpa_supplicant.conf
. Ora usa il seguente comando per connettere la tua scheda wireless al punto di accesso wireless.
sudo wpa_supplicant -c /etc/wpa_supplicant.conf -i wlp4s0
Il seguente output indica che la tua scheda wireless è collegata con successo a un punto di accesso.
Successfully initialized wpa_supplicantwlp4s0: SME: Trying to authenticate with c5:4a:21:53:ac:eb (SSID='LinuxBabe.Com Network' freq=2437 MHz)wlp4s0: Trying to associate with c5:4a:21:53:ac:eb (SSID='LinuxBabe.Com Network' freq=2437 MHz)wlp4s0: Associated with c5:4a:21:53:ac:ebwlp4s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0wlp4s0: WPA: Key negotiation completed with c5:4a:21:53:ac:eb wlp4s0: CTRL-EVENT-CONNECTED - Connection to c5:4a:21:53:ac:eb completed
Nota che se stai usando l’edizione desktop di Ubuntu, allora devi fermare Network Manager con il seguente comando, altrimenti causerà problemi di connessione quando usi wpa_supplicant.
sudo systemctl stop NetworkManager
E disabilitare l’avvio automatico di NeworkManager all’avvio eseguendo il seguente comando.
sudo systemctl disable NetworkManager-wait-online NetworkManager-dispatcher NetworkManager
Di default, wpa_supplicant viene eseguito in primo piano. Se la connessione viene completata, allora aprite un’altra finestra di terminale ed eseguite
iwconfig
Vedete che l’interfaccia wireless è ora associata ad un access point.
Si può premere CTRL+C
per fermare il processo wpa_supplicant corrente ed eseguirlo in background aggiungendo il flag -B
.
sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlp4s0
Anche se siamo autenticati e connessi alla rete wireless, ma non abbiamo ancora un indirizzo IP. Per ottenere un indirizzo IP privato dal server DHCP, usate il seguente comando:
sudo dhclient wlp4s0
Ora la vostra interfaccia wireless ha un indirizzo IP privato, che può essere mostrato con:
ip addr show wlp4s0
Ora potete accedere a Internet. Per rilasciare l’indirizzo IP privato, eseguire
sudo dhclient wlp4s0 -r
Connettersi alla rete wireless nascosta
Se il router wireless non trasmette ESSID, allora è necessario aggiungere la seguente linea nel file /etc/wpa_supplicant.conf
.
scan_ssid=1
Come sotto:
network={ ssid="LinuxBabe.Com Network" #psk="12345qwert" psk=68add4c5fee7dc3d0dac810f89b805d6d147c01e281f07f475a3e0195 scan_ssid=1}
Step 3: Connessione automatica all’avvio
Per connettersi automaticamente alla rete wireless all’avvio, dobbiamo modificare il file wpa_supplicant.service
. E’ una buona idea copiare il file dalla directory /lib/systemd/system/
alla directory /etc/systemd/system/
, quindi modificare il contenuto del file, perché non vogliamo che una versione più recente di wpa_supplicant
sovrascriva le nostre modifiche.
sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service
Modificare il file con un editor di testo a riga di comando, come Nano.
sudo nano /etc/systemd/system/wpa_supplicant.service
Trovare la seguente linea.
ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
Cambiarla come segue. Qui abbiamo aggiunto il file di configurazione e il nome dell’interfaccia wireless al comando ExecStart
.
ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlp4s0
Si raccomanda di provare sempre a riavviare wpa_supplicant quando viene rilevato un errore. Aggiungere quanto segue proprio sotto la linea ExecStart
.
Restart=always
Se si trova la seguente linea in questo file, commentarla (Aggiungere il carattere # all’inizio della linea).
Alias=dbus-fi.w1.wpa_supplicant1.service
Salvare e chiudere il file. (Per salvare un file nell’editor di testo Nano, premere Ctrl+O
, poi premere Enter
per confermare. Per uscire, premere Ctrl+X
.) Quindi ricaricare systemd.
sudo systemctl daemon-reload
Enable wpa_supplicant service to start at boot time.
sudo systemctl enable wpa_supplicant.service
Abbiamo anche bisogno di avviare dhclient
al boot per ottenere un indirizzo IP privato dal server DHCP. Questo può essere ottenuto creando un’unità di servizio systemd per dhclient
.
sudo nano /etc/systemd/system/dhclient.service
Inserire il seguente testo nel file.
Description= DHCP ClientBefore=network.targetAfter=wpa_supplicant.serviceType=forkingExecStart=/sbin/dhclient wlp4s0 -vExecStop=/sbin/dhclient wlp4s0 -rRestart=always WantedBy=multi-user.target
Salvare e chiudere il file. Poi abilitare questo servizio.
sudo systemctl enable dhclient.service
Come ottenere un indirizzo IP statico
Se si vuole ottenere un indirizzo IP statico, allora è necessario disabilitare dhclient.service
.
sudo systemctl disable dhclient.service
Abbiamo bisogno di usare netplan per configurare un indirizzo IP statico su Ubuntu 18.04/20.04. Creare un file di configurazione sotto /etc/netplan/
.
sudo nano /etc/netplan/10-wifi.yaml
Aggiungere le seguenti righe a questo file. Sostituite 192.168.0.102
con il vostro indirizzo IP preferito. Fate attenzione all’indentazione. Uno spazio in più renderebbe la configurazione non valida.
network: ethernets: wlp4s0: dhcp4: no addresses: gateway4: 192.168.0.1 version: 2
Salva e chiudi il file. Poi applica le configurazioni.
sudo netplan apply
Puoi anche attivare l’opzione --debug
se non funziona come previsto.
sudo netplan --debug apply
Se ci sono altri .yaml
file sotto la /etc/netplan/
directory, allora netplan
unirà automaticamente le configurazioni di file diversi. netplan
usa systemd-networkd
come renderer di rete backend. Si raccomanda di configurare il wpa_supplicant.service
viene eseguito prima del systemd-networkd.service
, in modo che il sistema si associ prima con un punto di accesso Wi-Fi, poi ottenga un indirizzo IP privato.
sudo nano /etc/systemd/system/wpa_supplicant.service
Trova la seguente linea.
Before=network.target
Cambiala in:
Before=network.target systemd-networkd.service
Salva e chiudi il file.
Un altro modo per ottenere un indirizzo IP statico è quello di accedere all’interfaccia di gestione del router e assegnare un IP statico all’indirizzo MAC della scheda wireless, se il router supporta questa funzione.
Usare un nome host per accedere ai servizi su Ubuntu
In realtà, non è necessario ottenere un indirizzo IP statico per la propria macchina Ubuntu. Ubuntu può utilizzare mDNS (Multicast DNS) per annunciare il suo nome host alla rete locale e i clienti possono accedere ai servizi sulla vostra casella Ubuntu con questo nome host. Questo hostname può sempre essere risolto all’indirizzo IP della vostra scatola Ubuntu, anche se l’indirizzo IP cambia.
Per utilizzare mDNS, è necessario installare avahi-daemon, che è un’implementazione open-source di mDNS/DNS-SD.
sudo apt install avahi-daemon
Avviare il servizio.
sudo systemctl start avahi-daemon
Abilitare l’avvio automatico all’avvio.
sudo systemctl enable avahi-daemon
Avahi-daemon ascolta su UDP 5353, quindi è necessario aprire questa porta nel firewall. Se usate UFW, eseguite il seguente comando.
sudo ufw allow 5353/udp
Poi dovreste impostare un hostname unico per la vostra casella Ubuntu con il comando hostnamectl
. Sostituite ubuntubox con il vostro hostname preferito, che non dovrebbe essere già preso da altri dispositivi nella rete locale.
sudo hostnamectl set-hostname ubuntubox
Ora riavviate avahi-daemon.
sudo systemctl restart avahi-daemon
Se si controlla lo stato con
systemctl status avahi-daemon
si può vedere l’hostname mDNS, che termina con il dominio .local
.
Sul computer client, è anche necessario installare un software mDNS/DNS-SD.
- Gli utenti Linux dovrebbero installare
avahi-daemon
. - Gli utenti Windows devono abilitare il servizio Bonjour installando il servizio di stampa Bonjour o installando iTunes.
- Su macOS, Bonjour è preinstallato.
Ora è possibile accedere ai servizi utilizzando il ubuntubox.local
hostname, eliminando la necessità di controllare e digitare l’indirizzo IP.
Sbloccare il Wifi su Raspberry Pi
Il sistema operativo Ubuntu ARM OS per Raspberry Pi blocca l’interfaccia wireless per impostazione predefinita. Dovete sbloccarla con:
sudo rfkill unblock wifi
Per sbloccarla all’avvio, create un’unità di servizio systemd.
sudo nano /etc/systemd/system/unblock-wifi.service
Aggiungi le seguenti righe.
Description=RFKill Unblock WiFi DevicesRequires=wpa_supplicant.serviceAfter=wpa_supplicant.serviceType=oneshotExecStart=/usr/sbin/rfkill unblock wifiExecStop=RemainAfterExit=yesWantedBy=multi-user.target
Salva e chiudi il file. Abilitare l’avvio automatico all’avvio.
sudo systemctl enable unblock-wifi
Ho scoperto che il unblock-wifi.service
deve essere eseguito dopo l’avvio del wpa_supplicant.service
, altrimenti non può sbloccare il wifi. Nota che se hai installato un ambiente desktop, probabilmente c’è un gestore di rete in esecuzione che può interferire con la connessione. È necessario disabilitarlo. Per esempio, io uso l’ambiente desktop leggero LXQT su Raspberry Pi (sudo apt install lubuntu-desktop
) e devo disabilitare connman.service e NetworkManager.service.
sudo systemctl disable connman.service NetworkManager.service
Reti Wi-Fi multiple
Il file di configurazione /etc/wpa_supplicant.conf
può includere più reti Wi-Fi. wpa_supplicant selezionerà automaticamente la rete migliore in base all’ordine dei blocchi di rete nel file di configurazione, al livello di sicurezza della rete e alla potenza del segnale.
Per aggiungere una seconda rete Wi-Fi, esegui
wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee -a /etc/wpa_supplicant.conf
Nota che devi usare l’opzione -a
con il comando tee
, che aggiungerà, invece di cancellare il contenuto originale, la nuova rete Wifi al file.
Concludendo
Spero che questo tutorial vi abbia aiutato a connettere Ubuntu 18.04/20.04 alla rete Wi-Fi da linea di comando con WPA Supplicant. Come sempre, se hai trovato questo post utile, allora iscriviti alla nostra newsletter gratuita per ottenere altri suggerimenti e trucchi 🙂