iwd (Português)
O iwd (iNet wireless daemon) é um daemon sem fio para Linux escrito pela Intel. O objetivo principal do projeto é otimizar a utilização de recursos, não dependendo de nenhuma biblioteca externa e, em vez disso, utilizando os recursos fornecidos pelo Kernel Linux na máxima extensão possível.
O iwd pode funcionar no modo autônomo ou em combinação com gerentes de rede abrangentes, como ConnMan, systemd-networkd e NetworkManager.
Instalação
Uso
O pacote iwd fornece o programa cliente iwctl
, o daemon iwd
e a ferramenta de monitoramento Wi-Fi iwmon
.
iwgtkAUR fornece um front-end GUI para o iwd e um ícone (de bandeja) indicador.
Inicie/habilite iwd.service
para que possa ser controlado por meio do comando iwctl
ou do iwgtk
.
netdev
ou wheel
podem interagir com iwd. Para usar iwctl ou iwgtk, você precisa adicionar seu usuário a um desses grupos.iwctl
Para obter um prompt interativo, faça:
$ iwctl
O prompt interativo é exibido com um prefixo de [iwd]#
.
- No prompt
iwctl
você pode concluir automaticamente os comandos e nomes de dispositivos pressionandoTab
. - Para sair do prompt interativo, envie EOF pressionando
Ctrl+d
. - Você pode usar todos os comandos como argumentos de linha de comando sem inserir um prompt interativo. Por exemplo:
iwctl device wlan0 show
.
Para listar todos os comandos disponíveis:
[iwd]# help
Conectar a uma rede
Primeiro, se você não souber o nome do seu dispositivo sem fio, liste todos os dispositivos Wi-Fi:
[iwd]# device list
Em seguida, para iniciar a procura por redes (observe que esse comando vai emitir nenhuma saída):
[iwd]# station dispositivo scan
Você pode listar todas as redes disponíveis:
[iwd]# station dispositivo get-networks
Por fim, para conectar-se a uma rede:
[iwd]# station dispositivo connect SSID
station
e Tab
Tab
, os dispositivos disponíveis são mostrados, digite a primeiras letras do dispositivo e Tab
para completar. Do mesmo modo, digite connect
e Tab
Tab
para ver a lista de redes disponíveis. Então, digite as primeiras letras da rede desejada seguida de Tab
para completar o comando.Se uma senha for necessária, você será solicitado a digitá-la. Como alternativa, você pode fornece-la como argumento da linha de comando:
$ iwctl --passphrase senha station dispositivo connect SSID
- O
iwd
armazena automaticamente as senhas da rede no diretório/var/lib/iwd
e os usa para se conectar automaticamente no futuro. Veja #Configuração de rede. - Para conectar-se a uma rede com espaços no SSID, o nome da rede deve estar entre aspas duplas.
- O iwd suporta apenas senhas PSK de 8 a 63 caracteres codificados em ASCII. A seguinte mensagem de erro será fornecida se os requisitos não forem atendidos:
PMK generation failed. Ensure Crypto Engine is properly configured
.
Conecte-se a uma rede usando WPS/WSC
Se sua rede estiver configurada de forma que você possa conectar-se a ela pressionando um botão (Wikipedia:Wi-Fi Protected Setup), verifique primeiro se o seu dispositivo de rede também é capaz de usar este procedimento de configuração.
[iwd]# wsc list
Então, desde que seu dispositivo apareça na lista acima,
[iwd]# wsc dispositivo push-button
e pressione o botão no seu roteador. O procedimento também funciona se o botão foi pressionado antes, menos de 2 minutos antes.
Se sua rede precisar validar um número PIN para conectar-se dessa maneira, verifique o comando help
saída para ver como fornecer as opções corretas para o comando wsc
.
Desconectar de uma rede
Para desconectar-se de uma rede:
[iwd]# station dispositivo disconnect
Mostrar informações do dispositivo e da conexão
Para exibir os detalhes de um dispositivo Wi-Fi, como endereço MAC:
[iwd]# device dispositivo show
Para exibir o estado da conexão, incluindo a rede conectada de um dispositivo Wi-Fi:
[iwd]# station dispositivo show
Gerenciar redes conhecidas
Para listar as redes às quais você se conectou anteriormente:
[iwd]# known-networks list
Para esquecer uma rede conhecida:
[iwd]# known-networks SSID forget
iwgtk
Alternativamente, iwgtkAUR fornece um front-end GUI por meio do qual o iwd pode ser controlado.
A execução de iwgtk
sem nenhum argumento inicia a janela do aplicativo, que pode ser usada para ativar/desativar seus adaptadores e dispositivos, alterar seus modos de operação, visualizar redes disponíveis, conectar-se a redes disponíveis e gerenciar redes conhecidas.
Ícone indicador
Para iniciar o daemon de ícone indicador (na bandeja do sistema) do iwgtk, execute:
$ iwgtk -i
Se o ícone indicador não aparecer, sua bandeja do sistema provavelmente não tem suporte para a API StatusNotifierItem, caso em que você precisa executar uma camada de compatibilidade como snixembed-gitAUR.
As seguintes bandejas do sistema têm suporte a StatusNotifierItem e, portanto, funcionam por padrão:
- KDE Plasma
- swaybar
- xfce4-panel
As bandejas a seguir têm suporte apenas a XEmbed e, portanto, exigem snixembed-gitAUR:
- AwesomeWM
- i3bar
Inicialização automática
O caso de uso mais comum para o iwgtk é iniciar o daemon do indicador toda vez que você efetuar login em sua área de trabalho. Se o seu ambiente de desktop for compatível com o padrão XDG Autostart, isso deve acontecer automaticamente devido ao arquivo iwgtk-indicator.desktop
que é colocado em /etc/xdg/autostart/
pelo pacote AUR.
Alternativamente, um arquivo unit do systemd para iniciar o daemon do indicador é fornecido pelo pacote do AUR. Se o seu ambiente de desktop tiver suporte à unit graphical-session.target
do systemd, então o iwgtk pode ser iniciado automaticamente via systemd habilitando a unit de usuário iwgtk.service
.
Configuração de rede
Por padrão, iwd guarda a configuração de rede no diretório /var/lib/iwd
. O arquivo de configuração é nomeado como rede.tipo
onde rede é o SSID da rede e tipo é o tipo da rede, dentre .open, .psk ou .8021x. O arquivo é usado para guardar o PreSharedKey
criptografado e opcionalmente a Passphrase
e também pode ser criada pelo usuário sem invocar o iwctl
. O arquivo também pode ser usado para outras configurações referentes àquele SSID. Para mais configurações, veja iwd.network(5).
WPA-PSK
Um exemplo pequeno de arquivo para se conectar a uma rede protegida por WPA-PSK ou WPA2-PSK com o SSID "spaceship" e senha "test1234":
/var/lib/iwd/spaceship.psk
[Security] PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
- _
. Se contiver outros caracteres, o nome será um caractere =
seguido pela versão codificada em hexadecimal do SSID.Para calcular a chave pré-compartilhada da senha, um destes dois métodos pode ser usado:
- Inserir a senha em texto simples no arquivo de configuração:
/var/lib/iwd/spaceship.psk
[Security] Passphrase=test1234
- A chave pré-compartilhada será anexada ao arquivo na primeira conexão:
/var/lib/iwd/spaceship.psk
[Security] Passphrase=test1234 PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
- Ou a chave pré-compartilhada pode ser calculada do SSID e a senha usando wpa_passphrase (do wpa_supplicant) ou wpa-pskAUR. Veja wpa_supplicant#Connecting with wpa_passphrase para mais detalhes.
WPA Empresarial
EAP-PWD
Para conectar-se a um ponto de acesso corporativo protegido por EAP-PWD, é necessário criar um arquivo chamado: essid.8021x
no diretório /var/lib/iwd
com o seguinte conteúdo:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=PWD EAP-Identity=seu_e-mail_empresarial EAP-Password=sua_senha [Settings] AutoConnect=True
Se você não deseja se conectar automaticamente ao ponto de acesso, defina a opção como False e conecte manualmente ao ponto de acesso via iwctl
. O mesmo se aplica à senha, se você não quiser armazená-la em texto sem formatação, deixe a opção fora do arquivo e apenas conecte-se ao AP da empresa.
EAP-PEAP
Como o EAP-PWD, você também precisa criar um arquivo essid.8021x
no diretório. Antes de prosseguir com a gravação do arquivo de configuração, este também é um bom momento para descobrir qual certificado CA sua organização usa. Este é um arquivo de configuração de exemplo que usa autenticação de senha MSCHAPv2:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=PEAP EAP-Identity=anonymous@realm.edu EAP-PEAP-CACert=/path/to/root.crt EAP-PEAP-ServerDomainMask=radius.realm.edu EAP-PEAP-Phase2-Method=MSCHAPV2 EAP-PEAP-Phase2-Identity=johndoe@realm.edu EAP-PEAP-Phase2-Password=hunter2 [Settings] AutoConnect=true
As senhas MsCHAPv2 também podem ser armazenadas como um hash criptografado. O hash md4 correto pode ser calculado com:
$ iconv -t utf16le | openssl md4
Insira um fim de arquivo (EOF) após sua senha pressionando Ctrl+d
, não pressione Enter
. O hash resultante precisa ser armazenado dentro da chave EAP-PEAP-Phase2-Password-Hash
.
TTLS-PAP
Como o EAP-PWD, você também precisa criar um arquivo essid.8021x
no diretório. Antes de prosseguir com a gravação do arquivo de configuração, este também é um bom momento para descobrir qual certificado CA sua organização usa. Este é um exemplo de arquivo de configuração que usa autenticação de senha PAP:
/var/lib/iwd/essid.8021x
[Security] EAP-Method=TTLS EAP-Identity=anonymous@uni-test.de EAP-TTLS-CACert=cert.pem EAP-TTLS-ServerDomainMask=*.uni-test.de EAP-TTLS-Phase2-Method=Tunneled-PAP EAP-TTLS-Phase2-Identity=user EAP-TTLS-Phase2-Password=password [Settings] AutoConnect=true
eduroam
eduroam oferece uma configuration assistant tool (CAT), que infelizmente não suporta iwd. No entanto, o instalador, que você pode baixar clicando no botão de download e selecionando sua universidade, é apenas um script Python. É fácil extrair as opções de configuração necessárias, incluindo o certificado e a máscara de domínio do servidor.
A tabela a seguir contém um mapeamento das opções de configuração do iwd para variáveis de script de instalação do CAT eduroam.
Opção de configuração de Iwd | Variável de Script CAT |
---|---|
nome do arquivo | um de Config.ssids
|
EAP-Method |
Config.eap_outer
|
EAP-Identity |
Config.anonymous_identity
|
EAP-PEAP-CACert |
Config.CA
|
EAP-PEAP-ServerDomainMask |
um de Config.servers
|
EAP-PEAP-Phase2-Method |
Config.eap_inner
|
EAP-PEAP-Phase2-Identity |
username@Config.user_realm
|
-
EAP-Identity
pode não ser necessário pelo seu provedor eduroam; nesse caso, você pode ter que usaranonymous@config.realm_do_usuário
nesta área. - Se sua
EAP-PEAP-ServerDomainMask
começa comDNS:
, somente use a parte depois doDNS:
.
Outros casos
Mais exemplos de testes podem ser encontrados nos casos de teste do repositório upstream.
Configuração opcional
O arquivo /etc/iwd/main.conf
pode ser usado para a configuração principal. Veja iwd.config(5).
Desativar a conexão automática para uma rede específica
Criar/editar o arquivo /var/lib/iwd/rede.tipo
. Adicione a seguinte seção a ele:
/var/lib/iwd/spaceship.psk (por exemplo)
[Settings] AutoConnect=false
Desativar verificação periódica para redes disponíveis
Por padrão, quando iwd
estiver desconectado, ele verifica periodicamente as redes disponíveis. Para desativar a verificação periódica (para sempre verificar manualmente), criar/editar o arquivo /etc/iwd/main.conf
e adicione a seguinte seção a ele:
/etc/iwd/main.conf
[Scan] DisablePeriodicScan=true
Ativar configuração de rede embutida
Desde a versão 0.19, o iwd pode atribuir endereços IP e configurar rotas usando um cliente DHCP embutido ou com configuração estática. É uma boa alternativa para clientes DHCP independentes.
Para ativar o recurso de configuração de rede do iwd, crie/edite o arquivo /etc/iwd/main.conf
e adicione a seguinte seção a ele:
/etc/iwd/main.conf
[General] EnableNetworkConfiguration=true
Também é possível definir métricas de rota com RoutePriorityOffset
:
/etc/iwd/main.conf
[Network] RoutePriorityOffset=300
IPv6 support
Desde a versão 1.10, iwd suporta IPv6, mas isso é desabilitado por padrão. Para habilitar, adicione a seguinte linha no arquivo de configuração:
/etc/iwd/main.conf
[Network] EnableIPv6=true
Esta configuração é necessária caso queira usar o DHCPv6 ou IPv6 estático. Pode também ser configurado para redes em específico.
Definindo o endereço IP estático na configuração de rede
Adicione a seguinte seção ao arquivo /var/lib/iwd/rede.tipo
. Por exemplo:
/var/lib/iwd/spaceship.psk
[IPv4] Address=192.168.1.10 Netmask=255.255.255.0 Gateway=192.168.1.1 Broadcast=192.168.1.255 DNS=192.168.1.1
Selecione o gerenciador de DNS
No momento, o iwd suporta dois gerenciadores de DNS -systemd-resolved e resolvconf.
Adicione a seguinte seção ao /etc/iwd/main.conf
para systemd-resolved
:
/etc/iwd/main.conf
[Network] NameResolvingService=systemd
Para resolvconf
:
/etc/iwd/main.conf
[Network] NameResolvingService=resolvconf
Permitir que qualquer usuário leia informações de status
Se você quiser permitir que qualquer usuário leia as informações de status, mas sem poder modificar, você pode criar o seguinte arquivo de configuração do D-Bus:
/etc/dbus-1/system.d/iwd-allow-read.conf
<!-- Allow any user to read iwd status information. Overrides some part of /usr/share/dbus-1/system.d/iwd-dbus.conf. --> <!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <policy context="default"> <deny send_destination="net.connman.iwd"/> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="GetAll" /> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="Get" /> <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.ObjectManager" send_member="GetManagedObjects" /> <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="RegisterSignalLevelAgent" /> <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="UnregisterSignalLevelAgent" /> </policy> </busconfig>
Solução de problemas
Depuração detalhada do TLS
Isso pode ser útil se você tiver problemas para configurar o MSCHAPv2 ou TTLS. Você pode definir o seguinte variável de ambiente via trecho drop-in:
/etc/systemd/system/iwd.service.d/tls-debug.conf
[Service] Environment=IWD_TLS_DEBUG=TRUE
Verifique os logs do iwd posteriormente executando journalctl -u iwd.service
como root.
Reiniciando iwd.service após a inicialização do sistema
Em algumas máquinas, é relatado que o iwd.service
precisa ser reiniciado para funcionar após a inicialização. Veja FS#63912 e o tópico 251432. Isso provavelmente ocorre porque o kernel e os serviços do Linux iniciam muito cedo e o iwd é iniciado antes que a placa de rede sem fio seja ligada. Como solução alternativa, estenda a unit para adicionar um atraso:
[Service] ExecStartPre=/usr/bin/sleep 2
Então recarregue a configuração do gerenciador do systemd.
Problemas de conexão após a reinicialização
Um pool de baixa entropia pode causar problemas de conexão, particularmente perceptíveis após a reinicialização. Veja Random number generation para sugestões para incrementar o pool de entropia.
O dispositivo sem fio não é renomeado pelo udev
Desde a versão 1.0, iwd desabilita a renomeação do dispositivo sem fio. Ele instala o seguinte arquivo de configuração de rede do systemd que previne udev de renomear a interface para wlp#s#
:
/usr/lib/systemd/network/80-iwd.link
[Match] Type=wlan [Link] NamePolicy=keep kernel
Como resultado, o nome do link sem fio wlan#
é mantido após a inicialização. Isto resolve uma condição de corrida entre iwd e udev na renomeação da interface como explicado em iwd udev interface renaming[link inativo 2024-10-12 ⓘ].
Se isso resultar em problemas, tente mascará-lo com:
# ln -s /dev/null /etc/systemd/network/80-iwd.link
Sem DHCP no modo AP
Os clientes podem não receber um endereço IP via DHCP ao conectar-se a iwd no modo de ponto de acesso (AP). Portanto, é necessário habilitar a configuração de rede por iwd nas interfaces gerenciadas:
/etc/iwd/main.conf
[General] EnableNetworkConfiguration=True
O arquivo mencionado deve ser criado se ainda não existir.
Wifi fica desconectando por causa de travamentos no iwd
Alguns usuários experimentam desconexões com WiFi, reconectando-se continuamente, mas se estabilizando eventualmente e conseguindo se conectar.
Os usuários relatam falhas ([1]) de iwd.service
em seu journal.
O principal problema é ter vários serviços conflitantes para gerenciar suas conexões de rede. Para corrigir esse problema, verifique eles foram habilitados ao mesmo tempo por você.
Erro ao carregar a chave privada do cliente
Para carregar arquivos de chave, o iwd requer o módulo de kernel pkcs8_key_parser
. Durante a inicialização, ele é carregado por systemd-modules-load.service(8) usando /usr/lib/modules-load.d/pkcs8.conf
, e esse não será o caso se o iwd acabou de ser instalado.
Se mensagens como Error loading client private key /caminho/da/chave
aparecerem no journal ao tentar se conectar a redes WPA Empresariais, carregue manualmente o módulo:
# modprobe pkcs8_key_parser
Veja também
- Getting Started with iwd[link inativo 2024-10-12 ⓘ]
- Network Configuration Settings[link inativo 2024-10-12 ⓘ]
- Mais exemplos para WPA empresarial
- O tópico do IWD nos fóruns do Arch Linux
- 2017 Update on new WiFi daemon for Linux by Marcel Holtmann - YouTube
- The New Wi-Fi Experience for Linux - Marcel Holtmann, Intel - YouTube
- How to set up a simple access point with iwd[link inativo 2024-10-12 ⓘ]