quinta-feira, 11 de dezembro de 2008

Wireless no Debian

Com a queda nos preços de equipamentos de informática e em especial dos laptops e netbooks é cada vez maior o número desses equipamentos no nosso meio. Esses dias mesmo, na casa de um amigo, nos surpreendemos ao perceber que na casa estavam ligados sete laptops e apenas um desktop.

Junto com os laptops passamos a consumir um outro tipo de tecnologia: a rede sem fios.

Atualmente quase todo equipamento que se preze tem pelo menos uma conexão desse tipo, das quais posso destacar: WiFi e Bluetooth.

Com essa demanda é cada vez mais comum usuari@s Debian se depararem com o problema de drivers para placas de rede WiFi.

Esse problema pode ser facilmente resolvido (ou minimizado) se antes da aquisição do equipamento a pessoa fizer uma pesquisa para saber quais são 100% compatíveis com o GNU/Linux. O Debian mantêm, em sua wiki, uma lista de reports das experiências de usuari@s com vários equipamentos. Vale apena conferir se você está planejando comprar um e não esteja afim de um bom desafio na hora de configurar alguns dispositivos. Além desses reports existe uma lista com todos os dispositivos PCI suportados por Debian e uma lista com todos os dispositivos USB suportados por Debian.

Algumas pessoas me perguntaram, algumas vezes, por qual motivo é mais fácil configurar dispositivos no Ubuntu do que no Debian ou ainda, por qual motivo, sendo o Ubuntu baseado em Debian, ele consiga identificar e instalar um número maior de dispositivos que o próprio Debian. Isso se deve ao compromisso Debian de distribuir apenas software que seja 100% livre, o que impede que o sistema instale, automaticamente, drivers e plugins proprietários, como o Flash e o Java, por exemplo.

Voltando à questão da instalação das placas de redes WiFi no Debian quero aproveitar para deixar claro que boa parte do que se segue é uma tradução livre da wiki Debian sobre WiFi e que ela é uma ótima fonte a ser consultada durante o processo de instalação de uma placa dessas.

Esse post não trata da instalação de uma ou de outra placa específica, mas dos caminhos a serem percorridos para que se possa instalar, de formas diferentes, esses dispositivos. É preciso que você entenda que o que determina qual é o modelo da sua placa WiFi é um componente eletrônico conhecido por Chipset. É possível encontrar o mesmo chipset em várias marcas diferentes. Por isso não tente encontrar o driver para seu dispositivo baseando-se apenas na marca do equipamento. Procure pelo driver para o chipset. Veremos como identificá-lo logo mais.

Ferramentas que você irá precisar

Você irá precisar de algumas ferramentas para que possa instalar e configurar sua WiFi de forma mais fácil. Todas elas já foram empacotadas para o Debian e todas estão nos repositórios oficiais, bastando que você execute o processo de instalação de pacotes normalmente.

wireless-tools - conjunto de ferramentas que permite a configuração de parâmetros específicos da WiFi. É nesse pacote que encontra-se, por exemplo, o comando iwconfig. Se você selecionou a opção Notebook durante a instalação do Debian em seu computador, esse pacote já estará instalado.

network-manager - veja a wiki sobre o NetworkManager. Observe que existem pacotes adicionais que precisam ser instalados dependendo do gerenciador de janelas que você estiver usando. Por padrão o Debian instala Gnome como gerenciador de janelas, portanto, nesse caso, não esqueça de instalar o network-manager-gnome também.

module-assistant - essa ferramenta será util caso você precise criar um pacote com o driver da placa WiFi.

wpasupplicant - necessária para conexão em redes com chave WPA e/ou WPA2.

Existe a possbilidade de instalar esses pacotes pelo modo gráfico, utilizando-se do Synaptic, mas se você acha mais rápido fazer pela linha do Bash, como eu faço, seguem os comandos (rode-os como root):

aptitude update
aptitude install wireless-tools network-manager module-assistant wpasupplicant network-manager-gnome
Link
Identificando o chipset do seu dispositivo

A primeira coisa que você precisa saber é qual o chipset do seu dispositivo. Existem, basicamente, três tipos pelos quais um dispositivo WiFi pode ser conectado em seu equipamento. São eles: cartão PCI, cartão USB e cartão PCMCIA. Caso não saiba qual o tipo de conexão seu dispositivo usa, uma dica que pode mudar sua vida: leia o manual que acompanha o equipamento. Lá tem tudo detalhado. Não tem o manual? Que tal o site do fabricante? Mas claro, você pode tentar todas as formas sugeridas abaixo, caso considere mais fácil

Se seu dispositivo for PCI

A forma mais fácil que conheço para identificar o chipset de um dispositivo é utilizando-se do comando lspci assim (não precisa ser root):

lspci -nn

Ele irá mostrar todos os dispositivos PCI conectados ao seu computador. Caso queira filtrar e ver apenas os dispositivos de rede pode usar o comando:

lspci -nn | grep Ethernet

Veja o exemplo da saída produzida no meu Asus Eee PC 900:

01:00.0 Ethernet controller [0200]: Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter [168c:001c] (rev 01)
03:00.0 Ethernet controller [0200]: Attansic Technology Corp. L2 100 Mbit Ethernet Adapter [1969:2048] (rev a0)

A primeira placa identificada é a minha WiFi. Uma Atheros. O nome do dispositivo é Atheros AR242x 802.11abg. O [168c:001c] é uma assinatura do chipset. Ela ajuda bastante caso seja necessário encontrar um driver específico. Experimente, por exemplo, fazer uma pesquisa no Google usando as palavras chaves Debian Atheros 168c:001c Instalar e observe os resultados.

Caso o resultado do comando lspci retorne algo como "Unknown device" será preciso atualizar seu pci-id local. Isso pode ser feito assim (root):

update-pciids

Outra maneira de obter informações sobre seu dispositivo é através do discover. Discover é um sistema de identificação de hardware baseado na biblioteca libdiscover2. O Discover fornece uma interface flexível que programas podem usar para mostrar uma ampla gama de informação sobre o hardware instalado num sistema GNU/Linux. Além de mostrar informações, o Discover possui suporte para detecção de hardware durante a inicialização. Ele não vem instalado por padrão, portanto é necessário instalar o pacote (root):

aptitude update
aptitude install discover

E para obter informações com ele (root):

discover --vendor-id --model-id pci | uniq

Um exemplo da saída no meu computador (filtrei apenas a placa WiFi):

168c 001c Atheros Communications Inc. AR242x 802.11abg Wireless PCI Express Adapter
168c 001c Atheros Communications Inc. AR5006EG 802.11 b/g Wireless PCI Express Adapter

Não deixe de conferir a wiki sobre WiFi no Debian e a wiki sobre como identificar dispositivos PCI. Você irá encontrar informações até mesmo para identificar dispositivos pelo modo gráfico.

Se seu dispositivo for USB

Se para identificar um PCI o comando é o lspci, nada mais lógico do que usar o lsusb (não precisa ser root):

lsusb

O comando discover pode ser usando assim (root):

discover --vendor-id --model-id usb

Não deixe de conferir a wiki sobre WiFi no Debian e a wiki sobre como identificar dispositivos USB. Você irá encontrar informações até mesmo para identificar dispositivos pelo modo gráfico.

Se seu dispisitivo for PCMCIA ou CardBus

Pode ser necessário instalar um dos dois pacotes: pcmciautils ou pcmcia-cs. Os dois servem para identificar esse tipo de dispositivo. A diferença é que o primeiro é usado em kernel de versão igual ou superior a 2.6.13 e o segundo em kernel mais antigo.

Para ver qual a versão do seu kernel e saber qual dos dois pacotes instalar use o comando (não precisa ser root):

uname -r

Para identificar o dispositivo você pode utilizar os comandos assim:

pccardctl ident
pccardctl info
pccardctl status

Mas, para a felicidade, a maioria das placas pcmcia de 32 bits são reconhecidas pelo comando lspci.

Não deixe de conferir a wiki sobre WiFi no Debian e a wiki sobre como identificar dispositivos PCMCIA. Você irá encontrar informações até mesmo para identificar dispositivos pelo modo gráfico.

Verificando se o dispositivo WiFi está funcionando

Antes de sair pela Internet afora em busca do driver para seu dispositivo vamos verificar se ele está funcionando, pois nesse caso é só alegria.

Se você instalou o NetworkManager e, assim como eu, utiliza o Gnome (sei que no KDE também funciona) e sua placa WiFi foi identificada pelo kernel clique no ícone (próximo ao relógio) com a imagem de dois computadores. É provável que uma lista de sinais de wireless estejam disponíveis para que você possa se conectar por aquelas que estiverem abertas ou para as quais você possui a chave de acesso.

Caso você queira fazer a configuração manual (não instale o NetworkManager pois ele ficará substituindo suas configurações manuais) os comandos são (root):

Para identificar o nome dado ao dispositivo:

iwconfig

Esse comando irá listar quais dispositivos de rede instalados suportam Wireless. Veja a saída ao ser usado no meu computador:

lo no wireless extensions.

eth0 no wireless extensions.

wifi0 no wireless extensions.

ath0 IEEE 802.11g ESSID:"" Nickname:""
Mode:Managed Frequency:2.462 GHz Access Point: Not-Associated
Bit Rate:1 Mb/s Tx-Power:17 dBm Sensitivity=1/1
Retry:off RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=0/70 Signal level=-94 dBm Noise level=-94 dBm
Rx invalid nwid:4899 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Nesse exemplo o dispositivo recebeu o nome de ath0. Nos exemplos dos comandos abaixo vou usar esse nome para me referir ao dispositivo. Lembre-se de mudar ath0 para o nome dado ao seu dispositivo.

Para colocar o dispositivo pronto para uso:

ifconfig ath0 up

Para identificar redes sem fio disponíveis:

iwlist ath0 scan

Veja a saída desse comando ao ser usado no meu computador:

ath0 Scan completed :
Cell 01 - Address: 00:21:29:69:7C:6E
ESSID:"RedeFulanaDeTal"
Mode:Master
Frequency:2.437 GHz (Channel 6)
Quality=4/70 Signal level=-91 dBm Noise level=-95 dBm
Encryption key:on
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s
12 Mb/s; 48 Mb/s
Extra:bcn_int=100
Cell 02 - Address: 00:21:55:C2:56:C0
ESSID:"RedeDoZezinhoLuizinhoHuguinho"
Mode:Master
Frequency:2.462 GHz (Channel 11)
Quality=32/70 Signal level=-63 dBm Noise level=-95 dBm
Encryption key:on
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 6 Mb/s; 9 Mb/s
11 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
48 Mb/s; 54 Mb/s
Extra:bcn_int=100
IE: WPA Version 1
Group Cipher : TKIP
Pairwise Ciphers (1) : TKIP
Authentication Suites (1) : PSK
Extra:wme_ie=dd180050f2020101810003a5000027a500004254bc0062436600

Encontramos duas redes. Todas duas protegidas por chaves (Encryption key:on). A segunda usa WPA.

Para conectar-se em uma rede sem fios:

Determinando o nome da rede:
iwconfig ath0 essid "RedeDoZezinhoLuizinhoHuguinho"

Esse nome é apresentado na saída do comando iwlist.

Fornecendo a chave de acesso:
Você pode usar um dos padrões abaixo:

iwconfig ath0 key s:password
iwconfig ath0 key restricted s:password

Existem outras opções. Leia o man do iwconfig (man iwconfig) para ver todas as formas possíveis de se usar a opção key.

Atribuindo um IP à sua WiFi:
Você pode atribuir o IP manualmente:

ifconfig ath0 xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx

Por exemplo:

ifconfig ath0 10.1.1.7 netmask 255.0.0.0

Ou através de um servidor DHCP:

dhclient ath0

Caso queira apronfudar-se nas ferramentas Wireless um link legal, mensionado na wiki Debian, é o Wireless Tools for Linux. Você pode precisar saber como autenticar em wpa utilizando o PSK TKIP.

Instalando dispositivos WiFi não detectados automaticamente pelo sistema mas suportados pelo madwifi

Se o pessoal do MadWiFi.org escreveu um driver para o seu dispositivo você pode utilizá-lo de uma forma até que fácil. Primeiro você terá que alterar seu sources.list para que o gerenciador de pacotes possa instalar pacotes non-free (não livres). Para isso (root):

nano /etc/apt/sources.list

Você deve encontrar uma linha parecida com essa:

deb http://ftp.us.debian.org/debian/ sid main

ou

deb http://ftp.us.debian.org/debian/ lenny main

ou ainda

deb http://ftp.us.debian.org/debian/ etch main

Altere para que no final ela tenha non-free no final da linha como, por exemplo:

deb http://ftp.us.debian.org/debian/ sid main contrib non-free

Agora proceda assim (root):

aptitude update
aptitude install module-assistant madwifi
module-assistant prepare
module-assistant a-i madwifi

Esses comandos irão instalar os módulos para o driver das placas WiFi suportadas pelo MadWiFi.

Depois do pacote instalado você precisa carregar o módulo da sua placa WiFi. Na wiki sobre WiFi no Debian você tem uma lista com o nome do módulo. Basta usar o comando modprobe. Supondo que sua WiFi é uma Atheros o comando seria (root):

modprobe ath_pci

Você pode verificar se o módulo está carregado assim (não precisa ser root):

lsmod | grep ath_pci

Instalando dispositivos WiFi não detectados automaticamente pelo sistema mas suportados pelo NdisWrapper

Você chegou até aqui e nada de ver sua placa WiFi funcionar. Infelizmente alguns fabricantes desses dispositivos (e de outros também) não fornecem detalhes sobre como escrever um driver para seus dispositivos e não fornecem drivers que funcionem no GNU/Linux. Há duas coisas que você pode fazer nesse caso: a primeira é não comprar qualquer equipamento desses fabricantes e a segunda, caso você tenha caído nessa roubada, é tentar usar o NdisWrapper para tentar instalar drivers feitos para o Microsoft Windows no seu Debian.

Baixe o driver da sua WiFi disponibilizado pelo fabricante. Você irá precisar deles. Crie um diretório e descompacte o arquivo lá. Se ele for em .CAB (use o cabextract) terá que descompactá-lo. Faça isso até que encontre os arquivos .INF do driver.

Para instalar o ndiswrapper proceda assim (root):

aptitude install module-assistant wireless-tools
m-a prepare && m-a update
m-a a-i ndiswrapper
modprobe ndiswrapper
echo ndiswrapper >> /etc/modules

Para instalar drivers usando o ndiswrapper:

(root):

Vou considerar que você baixou e descompactou o driver em /home/junio/driverTal. Não esqueça de adaptar o exemplo à sua realidade.

mkdir /usr/local/driverTal/
cp /home/junio/driverTal/*.INF /usr/local/driverTal/

(não precisa ser root):

ndiswrapper -i /usr/local/driverTal/driverTal.INF

Para verificar se foi instalado use (não precisa ser root):

ndiswrapper -l

Se estiver correto deve aparecer algo parecido com:

installed drivers:
driverTal driver installed, hardware (0000:0000) present

Existe a possibilidade de usar o ndiswrapper pelo modo gráfico. Se lhe interessar dê uma olhada no ndisgtk.

Caso precise de mais informações sobre os dispositivos instalados, no seu computador, experimente o comando lshw. Ele pode ser usado sem ser root, mas obtêm mais informações quando executado por ele.

Vamos que vamos!