Configurar um modem 3G no Windows é simples porque o modem já funciona como pendrive e ao ser conectado carrega um instalador, um discador e pronto. No Linux o driver é dispensado, já que este tipo de dispositivo é suportado nativamente, por isso os fabricantes não se preocupam com seus usuários.
O problema é que algumas vezes os empacotadores da distribuição se esquecem de configurar as regras para que o modem funcione de primeira e ai é necessário recorrer a experiência e conhecimento coletivo para conseguirmos fazer o aparelho funcionar a contendo.
O meu modem,adquirido em dezembro/2007, é um Huawei E226, com plano 3G de 500K da operadora Claro. Desde quando publiquei o texto Conectando com Claro 3G no Ubuntu em Fev/2008 tenho usado o aparelho sem problemas, seja daquela forma explicada no texto, ou – atualmente – via Network Manager.
Uma atualização de sistema e um problema
Ontem pela manhã eu acordei inspirado e decidido a atualizar o meu sistema. O novo Ubuntu Lucid Lynx terá seu lançamento oficial no dia 29/Abr, mas os curiosos e ansiosos de plantão (como eu) já estão atualizando seus sistemas para a versão “Release Candidate” que é a penúltima versão de testes que precede o lançamento oficial.
Ao fazê-lo, meu modem simplesmente deixou de funcionar. Ele não era mais detectado como Modem e sim como um pendrive, ou cd-rom USB.
A busca pela solução temporária
Como eu já tinha feito o modem funcionar uma vez, parti do princípio que seria fácil configurá-lo novamente, mas só não lembrava como. Então o bom e velho Google (o conhecimento coletivo) me ajudou a resolver o problema.
Em uma busca por “modem 3G no Linux” obtive centenas de respostas que em uma leitura dinâmica sobre os primeiros resultados concluí que todas diziam exatamente a mesma coisa e não resolviam o meu problema, exceto uma que em um pequeno detalhe, quase sem o foco merecido, matou a charada.
No texto do Alexandre Fiori [1] é explicado como fazer uma conexão via modem usando wvdial, mas o que me ajudou não foi o seu método de conexão, já que este procedimento eu me lembrava.
O que ajudou foi a linha para ativar o módulo usbserial e assim fazer o modem funcionar como tal. Este era o elo perdido entre o sucesso da conexão que tinha o fracasso pós atualização.
Fazendo um copy-paste do exemplo dele (que funciona para qualquer pessoa quem tenha este mesmo modelo de modem) seria apenas digitar:
sudo modprobe usbserial vendor=0×12d1 product=0×1003
Onde, os números que estão em negrito, são obtidos a partir da saída do comando lsusb. Como se vê:
$ lsusb [...] Bus 002 Device 013: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E270 HSDPA/HSUPA Modem [...]
Conectando à Internet novamente
Feito isto, o modem já está ativado e para confirmar bastou fazer uma conexão via wvdial conforme a explicação do Alexandre[1], via pppconfig (vide o meu texto), ou mesmo via Network-Manager que apresenta um assistente para nova conexão e dispensa maiores detalhes.
O problema estava resolvido, agora basta ativar este módulo, toda vez que o modem for conectado, já que ao reiniciar o computador ele é removido da memória.
A solução definitiva
Alguém poderia sugerir colocar esta linha no /etc/rc.local, ou em um outro script qualquer que carregue no boot, mas esta não é a solução ideal.
O fato de ter ligado o computador não significa que eu queira usar um modem. Carregar qualquer coisa na memória sem utilidade tem várias implicações negativas.
Entre elas cito: desperdício de memória, sobrecarga do sistema (que deverá ficar testando o módulo, dando e recebendo atenções desnecessárias), falha de segurança (se o módulo tiver uma vulnerabilidade, quanto mais tempo ele estiver na memória inutilmente maior será a chance de ser usado para fins maléficos), entre outros.
A solução correta então é carregar o módulo somente quando o modem for conectado a porta USB e novamente alguém poderia pensar em dezenas de maneiras de se fazer um script para tal.
O gerenciador de dispositivos do Linux e suas mensagens
Certamente que alguém do “plano superior” já tinha se deparado com esta necessidade e inventou uma solução chamada UDEV. Eu já escrevi algumas utilidades para o Udev, mas nenhuma delas me foi tão útil quanto esta dica.
De forma simplificada, o Udev é gerenciador de dispositivos do Linux [2]. Entre as suas atribuições, ele é o camarada que nos passa as mensagens vindas do kernel sobre os dispositivos conectados ao seu sistema.
Toda vez que o sistema detecta um novo dispositivo ele gera um “uevent” que é uma mensagem com dados sobre o dispositivo e se necessário executa algumas atividades.
Para não me alongar muito sobre o udev, sugiro dar uma lida nos links [3], [4] e em especial no [5], onde há bastante informação sobre as regras do udev.
Lembre-se então da dica. Se você precisar executar uma atividade ao conectar/desconectar um dispositivo no seu computador, você deve usar o Udev.
Usando o Udev ao nosso favor
O que devemos fazer agora é criar um arquivo de regra que diga ao Udev para carregar o módulo usbserial, todas as vezes que ele detectar o dispositivo com aquele identificador USB (que nós encontramos via comando lsusb).
Como root, crie um arquivo o seguinte conteúdo:
#Regra para ativar o drive USBSerial via Udev
#
#Welington R. Braga – http://www.welrbraga.eti.br
#2010-04-24
#
ACTION==”add”, SUBSYSTEMS==”usb”, ATTRS{idVendor}==”12d1“, ATTRS{idProduct}==”1003“, SYMLINK+=”modem”, RUN+=”/sbin/modprobe usbserial vendor=0×12d1 product=0×1003“
Como é de se esperar, as linhas iniciando com “#” são linhas de comentário e você não precisa digitá-las. Ao digitar, a regra (veja que ela esta toda em uma única linha) esteja atendo aos valores que estão destacados em negrito. Como já disse, estes são os valores que obtive pelo lsusb.
Agora salve o arquivo dentro da pasta /etc/udev/rules.d, com o nome 50-udev-modem-huawei-e226.rules e está feito!
Na verdade, o nome do arquivo pode ser qualquer um de sua preferência. O que importa é que esteja nesta pasta indicada, com a extensão “.rules” e que comece com um número menor que o das regras para identificar drivers de cd-rom (no Ubuntu geralmente é o número 70).
Conectando e concluindo
Uma vez que este arquivo esteja salvo no lugar correto, basta desconectar o modem da porta USB e conecta-lo novamente para que o sistema udev possa reconhecê-lo e carregar o módulo usbserial corretamente.
A forma de conexão fica ao seu critério. Eu particularmente gosto e tenho usado o Network Manager do Gnome, mas como eu já sugeri poderia ser pelo wvdial, pelo pppconfig, Kppp ou qualquer outro método de sua preferência.
Por fim, caso você nunca tenha conectado via modem 3G no seu Linux sugiro dar uma leitura nos textos que já escrevi sobre o assunto e em especial no texto que trato do problema com o DNS.
No mais é só felicidade com a performance do novo Ubuntu.
Referências
[1] Fiori, Alexandre. Ubuntu e claro 3g (hsdpa huawei e226). http://fiorix.wordpress.com/2008/04/19/ubuntu-e-claro-3g-hsdpa-huawei-e226/
[2] Wikipédia. Udev. http://en.wikipedia.org/wiki/Udev
[3] Novaes, Rafael Farias. Configurando Adaptador USBSerial no Ubuntu usando udev. http://www.vivaolinux.com.br/script/Configurando-Adaptador-USBSerial-no-Ubuntu-usando-udev
[4] Morimoto, Carlos. Renomeando interfaces de rede com o udev. http://www.gdhpress.com.br/ferramentas/leia/index.php?p=cap2-26
[5] Drake, Daniel. Writing udev rules. http://reactivated.net/writing_udev_rules.html
Welington,
tive o mesmo problema que vc porém ao digitar:
ACTION==”add”, SUBSYSTEMS==”usb”, ATTRS{idVendor}==”12d1“, ATTRS{idProduct}==”1001“, SYMLINK+=”modem”, RUN+=”/sbin/modprobe usbserial vendor=0×12d1 product=0×1001“
deu o seguinte erro:
ATTRS{idVendor}==”12d1“,: command not found
vc sabe o que pode ser? tem como me ajudar?
Aguardo um retorno
Salve @Bruna ,
Você digitou, ou copiou e colou aqui do blog? Se você copiou e colou então o problema são as aspas (“”).
Por uma questão estética o WordPress (programa gerenciador de conteúdo aqui do blog) altera as aspas padrão (que são em pé) por aspas tipográficas (meio deitadinhas) que são visualmente “mais bonitinhas”, mas não servem em programação e nem em arquivos de configuração, como neste caso.
A solução é simples. Ou você digita tudo, ou copia e cola, mas antes de salvar o arquivo você altera as aspas.
Experimenta esta dica e avise se não funcionar, ok?
[]’s
Não funcionou, mesmo trocando as aspas deu o mesmo erro ;(
@Bruna ,
Não!? Vamos para outra tentativa.
É pra criar um arquivo com este conteúdo. Você não está digitando esta linha no terminal, não, né!?
Tenta seguir este passo a passo:
1 – Teclar [ALT]+[F2], para exibir a janela “Executar Aplicativo”;
2 – Na janela que vai abrir você cola este comando aqui (exatamente como está):
gksudo gedit /etc/udev/rules.d/50-udev-modem-huawei-e226.rules
3 – Após digitar, tecle [ENTER] ou clique no botão “Executar”
4 – A sua senha será solicitada e após vocẽ a digitar o editor de textos será aberto para você com privilégios administrativos;
5 – Cole aquela linha de configuração, no arquivo, altere TODAS as aspas (é só apagar e digita-las novamente)
6 – Feche o editor (clique no botão com [X] no canto da Janela;
7 – Você será avisada que o arquivo ainda não foi salvo e será questionada se quer salvar o arquivo. Clique no botão “Salvar”
8 – O editor de textos se fechará normalmente e já está feito todo o trabalho.
Se ainda não funcionar é só avisar, ok? (mas provavelmente só vou a responder amanhã)
[]s
Kra……deu certo como citado acima….foi a melhor explicação/solução que encontrei !!!
@hmontagem ,
Fico feliz em saber que foi útil pra mais alguém.
Obrigado pela visita e felicidades.
Just want to say what a great blog you got here!
I’ve been around for quite a lot of time, but finally decided to show my appreciation of your work!
Thumbs up, and keep it going!
Welingtin,
realizei o passo que você informou para a bruna, meu linux é o ubuntu 10.04 e salvou normalmente no diretório udv como nova regra, mas ela não é executada como esperado, eu clico no modem para abrir e o arquivo exe não abre.
Saudações @Elson Paim ,
Se entendi bem o que você descreveu, você deve estar tentando abrir o arquivo executável do driver para Windows que está na memória do modem (aquela que funciona como pendrive). Esquece isso. O driver é para Windows apenas e como eu disse no texto o Linux dispensa este driver.
Uma vez que você salvou o arquivo de regra udev (certifique-se de que os idProduct e idVendor correspondem exatamente aos códigos do seu modem e que você substituiu as aspas tipográficas) basta remover o modem da porta USB (se estiver plugado), aguardar um tempo (uns 10s é suficiente), conectá-lo novamente e configurar a conexão via gerenciador de redes do Ubuntu.
A partir daí a conexão passará a ser feita sempre pelo gerenciador de redes do Ubuntu, onde o seu modem será exibido segundos após ser plugado a uma porta USB.
abç