Neste tutorial, vamos aprender como ligar à rede Wi-Fi a partir da linha de comando no Ubuntu 18.04/20.04 servidor e desktop usando wpa_supplicant. Numa rede sem fios doméstica moderna, as comunicações são protegidas com WPA-PSK (chave pré-partilhada) em oposição a WPA-Enterprise, que é concebida para redes empresariais. WPA-PSK é também conhecido como WPA-Personal. wpa_supplicant é uma implementação do componente WPA-supplicant. Um suplicante em LAN sem fios é um software cliente instalado no computador do utilizador final que precisa de ser autenticado para aderir a uma rede.
Passo 1: Encontrar o nome da sua interface sem fios e rede sem fios
Executar iwconfig
comando para encontrar o nome da sua interface sem fios.
iwconfig
wlan0
costumava ser um nome comum para interface de rede sem fios em sistemas Linux sem Systemd. Como o Ubuntu usa Systemd, vai descobrir que a sua interface de rede sem fios é denominada algo como wlp4s0
. Também pode ver que não está associado a nenhum ponto de acesso neste momento.
Se a sua interface sem fios não for mostrada, talvez precise de a trazer à tona com o seguinte comando.
sudo ifconfig wlp4s0 up
Então encontre o nome da sua rede sem fios digitalizando as redes próximas com o comando abaixo. Substitua wlp4s0
pelo seu próprio nome de interface sem fios. ESSID é o identificador do nome da rede.
sudo iwlist wlp4s0 scan | grep ESSID
Passo 2: Ligar à rede Wi-Fi Com WPA_Supplicant
Agora instalar wpa_supplicant
no Ubuntu 18.04/20.04 a partir do repositório de software padrão.
sudo apt install wpasupplicant
Precisamos de criar um ficheiro chamado wpa_supplicant.conf
usando o utilitário wpa_passphrase
wpa_supplicant.conf
é o ficheiro de configuração que descreve todas as redes a que o utilizador quer que o computador se ligue. Execute o seguinte comando para criar este ficheiro. Substitua a frase-chave ESSID e Wi-Fi pela sua própria.
wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee /etc/wpa_supplicant.conf
Nota que na imagem acima, embrulhei o meu ESSID com aspas duplas, porque o meu ESSID contém um espaço em branco.
A saída de wpa_passphrase
comando será canalizado para tee
, e depois escrito para o ficheiro /etc/wpa_supplicant.conf
. Agora utilize o seguinte comando para ligar o seu cartão sem fios a um ponto de acesso sem fios.
sudo wpa_supplicant -c /etc/wpa_supplicant.conf -i wlp4s0
A saída seguinte indica que o seu cartão sem fios está ligado com sucesso a um ponto de acesso.
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 que se estiver a utilizar a edição de desktop Ubuntu, então terá de parar o Network Manager com o seguinte comando, caso contrário causará problemas de ligação ao utilizar o wpa_supplicant.
sudo systemctl stop NetworkManager
E desabilitar o NeworkManager arranque automático no momento do arranque executando o seguinte comando.
sudo systemctl disable NetworkManager-wait-online NetworkManager-dispatcher NetworkManager
Por defeito, o wpa_supplicant corre em primeiro plano. Se a ligação estiver concluída, abrir outra janela de terminal e executar
iwconfig
É possível ver que a interface sem fios está agora associada a um ponto de acesso.
P>P>Pode premir CTRL+C
para parar o processo wpa_supplicant actual e executá-lo em segundo plano adicionando o -B
bandeira.
sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlp4s0
embora estejamos autenticados e ligados à rede sem fios, mas ainda não temos um endereço IP. Para obter um endereço IP privado do servidor DHCP, use o seguinte comando:
sudo dhclient wlp4s0
Agora a sua interface sem fios tem um endereço IP privado, que pode ser mostrado com:
ip addr show wlp4s0
Agora pode aceder à Internet. Para libertar o endereço IP privado, execute
sudo dhclient wlp4s0 -r
Conectar à rede sem fios oculta
Se o seu router sem fios não emite ESSID, então precisa de adicionar a seguinte linha em /etc/wpa_supplicant.conf
ficheiro.
scan_ssid=1
Like below:
network={ ssid="LinuxBabe.Com Network" #psk="12345qwert" psk=68add4c5fee7dc3d0dac810f89b805d6d147c01e281f07f475a3e0195 scan_ssid=1}
Passo 3: Auto Connect At Boot Time
Para nos ligarmos automaticamente à rede sem fios no momento do arranque, precisamos de editar o ficheiro wpa_supplicant.service
. É uma boa ideia copiar o ficheiro de /lib/systemd/system/
directório para /etc/systemd/system/
directório, depois editar o conteúdo do ficheiro, porque não queremos uma versão mais recente de wpa_supplicant
para anular as nossas modificações.
sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service
Editar o ficheiro com um editor de texto de linha de comando, tal como Nano.
sudo nano /etc/systemd/system/wpa_supplicant.service
Encontrar a seguinte linha.
ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
Alterar para o seguinte. Aqui adicionámos o ficheiro de configuração e o nome da interface sem fios ao ficheiro ExecStart
command.
ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlp4s0
Recomenda-se sempre tentar reiniciar o wpa_supplicant quando for detectada uma falha. Adicione o seguinte logo abaixo do ExecStart
line.
Restart=always
Se encontrar a seguinte linha neste ficheiro, comente-a (Adicione o caracter # no início da linha).
Alias=dbus-fi.w1.wpa_supplicant1.service
Guardar e fechar o ficheiro. (Para guardar um ficheiro no editor de texto Nano, prima Ctrl+O
, depois prima Enter
para confirmar. Para sair, prima Ctrl+X
). Em seguida, recarregar systemd.
sudo systemctl daemon-reload
Enable wpa_supplicant service to start at boot time.
sudo systemctl enable wpa_supplicant.service
Tambem precisamos de iniciar dhclient
no momento do arranque para obter um endereço IP privado do servidor DHCP. Isto pode ser conseguido através da criação de uma unidade de serviço systemd para dhclient
.
sudo nano /etc/systemd/system/dhclient.service
P>Coloque o seguinte texto no ficheiro.
Description= DHCP ClientBefore=network.targetAfter=wpa_supplicant.serviceType=forkingExecStart=/sbin/dhclient wlp4s0 -vExecStop=/sbin/dhclient wlp4s0 -rRestart=always WantedBy=multi-user.target
Guardar e fechar o ficheiro. Depois active este serviço.
sudo systemctl enable dhclient.service
Como obter um endereço IP estático
Se quiser obter um endereço IP estático, então precisa de desactivar dhclient.service
.
sudo systemctl disable dhclient.service
Precisamos de utilizar o netplan para configurar um endereço IP estático no Ubuntu 18.04/20.04. Criar um ficheiro de configuração em /etc/netplan/
.
sudo nano /etc/netplan/10-wifi.yaml
Adicionar as seguintes linhas a este ficheiro. Substitua 192.168.0.102
pelo seu endereço IP preferido. Por favor, tenha cuidado com a indentação. Um espaço extra tornaria a configuração inválida.
network: ethernets: wlp4s0: dhcp4: no addresses: gateway4: 192.168.0.1 version: 2
Guardar e fechar o ficheiro. Depois aplicar as configurações.
sudo netplan apply
Também se pode ligar a opção --debug
se não funcionar como esperado.
sudo netplan --debug apply
se houver outra .yaml
ficheiros sob /etc/netplan/
directório, então netplan
fundirá automaticamente configurações de ficheiros diferentes. netplan
utiliza systemd-networkd
como o renderizador de rede backend. Recomenda-se configurar o wpa_supplicant.service
corre antes de systemd-networkd.service
, para que o sistema se associe primeiro com um ponto de acesso Wi-Fi, e depois obtenha um endereço IP privado.
sudo nano /etc/systemd/system/wpa_supplicant.service
Encontra a seguinte linha.
Before=network.target
Alterar para:
Before=network.target systemd-networkd.service
Guardar e fechar o ficheiro.
Outra forma de obter um endereço IP estático é fazendo login na interface de gestão do seu router e atribuindo um IP estático ao endereço MAC da sua placa sem fios, se o seu router suportar esta funcionalidade.
Usando um Hostname para aceder a serviços no Ubuntu
Atualmente, não tem de obter um endereço IP estático para a sua caixa Ubuntu. O Ubuntu pode utilizar mDNS (Multicast DNS) para anunciar o seu hostname à rede local e os clientes podem aceder aos serviços na sua caixa Ubuntu com esse hostname. Este hostname pode sempre ser resolvido para o endereço IP da sua caixa Ubuntu, mesmo que o endereço IP mude.
Para utilizar o mDNS, é necessário instalar avahi-daemon, que é uma implementação de código aberto do mDNS/DNS-SD.
sudo apt install avahi-daemon
Inicie o serviço.
sudo systemctl start avahi-daemon
Activar o arranque automático no momento do arranque.
Avahi-daemon ouve no UDP 5353, pelo que necessita de abrir esta porta na firewall. Se utilizar UFW, então execute o seguinte comando.
sudo ufw allow 5353/udp
Então deve definir um hostname único para a sua caixa Ubuntu com o comando hostnamectl
. Substitua ubuntubox pelo seu hostname preferido, que não deve já ser tomado por outros dispositivos na rede local.
sudo hostnamectl set-hostname ubuntubox
Agora reinicie avahi-daemon.
sudo systemctl restart avahi-daemon
Se verificar o estado com
systemctl status avahi-daemon
pode ver o hostname mDNS, que termina com o domínio .local
.
No computador cliente, também é necessário instalar um software mDNS/DNS-SD.
- Os utilizadores do Linux devem instalar
avahi-daemon
. - Os utilizadores do Windows precisam de activar o serviço Bonjour instalando o serviço de impressão Bonjour ou instalando o iTunes.
- Em macOS, o Bonjour está pré-instalado.
Agora pode aceder aos serviços utilizando o ubuntubox.local
hostname, eliminando a necessidade de verificar e escrever o endereço IP.
Desbloquear Wifi no Raspberry Pi
O Ubuntu ARM OS para Raspberry Pi bloqueia a interface sem fios por defeito. É necessário desbloqueá-lo com:
sudo rfkill unblock wifi
Para desbloqueá-lo no momento do arranque, criar uma unidade de serviço systemd.
sudo nano /etc/systemd/system/unblock-wifi.service
Adicionar-lhe as seguintes linhas.
Description=RFKill Unblock WiFi DevicesRequires=wpa_supplicant.serviceAfter=wpa_supplicant.serviceType=oneshotExecStart=/usr/sbin/rfkill unblock wifiExecStop=RemainAfterExit=yesWantedBy=multi-user.target
Guardar e fechar o ficheiro. Activar o arranque automático no momento do arranque.
sudo systemctl enable unblock-wifi
Descobri que o unblock-wifi.service
deve correr após o arranque do wpa_supplicant.service
, caso contrário não pode desbloquear o wifi. Note que se tiver instalado um ambiente de trabalho, provavelmente há um gestor de rede em execução que pode interferir com a ligação. É necessário desactivá-lo. Por exemplo, utilizo o ambiente de trabalho leve LXQT no Raspberry Pi (sudo apt install lubuntu-desktop
) e preciso de desactivar connman.service e NetworkManager.service.
sudo systemctl disable connman.service NetworkManager.service
Múltiplas Redes Wi-Fi
O /etc/wpa_supplicant.conf
ficheiro de configuração pode incluir múltiplas redes Wi-Fi. wpa_supplicant seleccionará automaticamente a melhor rede com base na ordem dos blocos de rede no ficheiro de configuração, nível de segurança de rede, e força do sinal.
Para adicionar uma segunda rede Wi-Fi, execute
wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee -a /etc/wpa_supplicant.conf
Nota que necessita de utilizar a opção -a
com o comando tee
, que anexará, em vez de apagar o conteúdo original, a nova rede Wifi ao ficheiro.
Wrapping Up
Espero que este tutorial o tenha ajudado a ligar o Ubuntu 18.04/20.04 à rede Wi-Fi a partir da linha de comando com o WPA Supplicant. Como sempre, se achou este post útil, então subscreva a nossa newsletter gratuita para obter mais dicas e truques 🙂