domingo, 13 de setembro de 2009

Internet 3G Vivo com modem MF100 no Opensuse Linux

Depois de Meses sem colocar nada nesse blog, aproveito pra escrever algo que é de extrema utilidade, que com certeza ajuda bastante gente, e que é algo que faz muito perderem algumas horas de labuta até que se consiga fazer funcionar. Eu mesmo perdí bastante tempo, consultei vários posts de vários forums, consultei o guiadohardware e, enfim, eles foram úteis, mas a maioria deles so falava de alguns modems específicos em algumas distribuições específicas. Ou melhor, quase que na totalidade, falavam sobre ubuntu 9.x.x e modem MF626, que é do mesmo fabricante do aqui tratado MF100, mas que não é exatamente o mesmo. O MF100 é este exibido na foto que se segue
E que os leitores, é claro, me perdoarão pela edição medíocre.
Devo dizer que este tutorial foi feito baseado em meus procedimentos numa distro opensuse 11.1 de 64 bits, o que no entanto não quer dizer que não funcione em outras variantes mais antigas desta distro, ou em sistemas de 32 bits, já que não se necessita de drivers - ou melhor, o único necessário já está embutido no sistema - e o esqueleto geral dos arquivos e dispositivos do opensuse mudou muito pouco (se mudou) desde que se começou a usar o udev lá pela versão 10.

A princípio, quando meteres o dito modem na usb, ele o reconhecerá como um cdrom usb, igualzinho como ocorre no windows. Daí ele monta e lá tem um softwarezinho que é pra ser igualzinho a aquele que tem pro windows mesmo, de conexão, que cria um ícone na sua área de trabalho e talz.. Meu conselho é que se ignore este, por que eu mesmo não o ví em sequer um instante funcionar. Primeiro tens que instalar uma biblioteca do qt3 pra ele mostrar a cara e depois ele não vai funcionar mesmo! Fica lá a vida toda tentando conectar e nunca conecta.

Então, o que primeiro vais precisar, é, lógico, daqueles pacotes básicos de conexão, tais quais o pppd e wvdial. Eles já vem como default na maioria das instalações, e se não vieram, não se preocupe, pois eles estão disponíveis nos repositórios padrões. Precisarás também de um pequeno software chamado usb_modeswitch que foi feito independentemente por um cara aí, e que serve pra fazer teu sistema parar de enxergar o modem como um cd, e passar a enxergar como um modem mesmo. Como indica o nome. Ele está disponível nos repositórios padrões do opensuse, bastando, como root, executar num terminal qualquer:
#>zypper in usb_modeswitch

E obviamente, confirmar a instalação. Ou se preferires, vai pelo Yast mesmo e instala isso aí.
O usb_modeswitch tem um arquivo de configuração, a saber /etc/usb_modeswitch.conf
Neste, haverá linhas comentadas (com '#' ou ';') e linhas descomentadas. Isto é, este arquivo deve estar coerente com o tipo de modem que tu tens, já que esse usb_modeswitch serve pra vários e vários modems. Minha experiência mostra que o MF100 é similar a um outro modelo, o MF628+, que por sua vez é similar ao MF628 e portanto, comentando tudo neste arquivo e deixando a sessão do MF628+ descomentada, teu modem irá funcionar. O arquivo ficaria assim:
Depois, tens que instalar uma regra para o udev rodar o usb_modeswitch automaticamente a cada vez que tu plugares o modem. Lí em muitos lugares, configurações milaborantes, mas pra mim bastou (e funfou) criar o arquivo /etc/udev/rules.d/95-ZTE-MF100.rules com o seguinte conteúdo:

SUBSYSTEM=="usb", SYSFS{idProduct}=="2000", SYSFS{idVendor}=="19d2", RUN+="/usr/sbin/usb_modeswitch"



Rodas um /etc/init.d/haldaemon restart para que ele carregue essas configurações. Ou reinicia mesmo (to na duvida se isso é realmente necessário).
Daí agora, o sistema deve entener que se plugou um modem usb no sistema, e deverá carregar seu driver(usbserial) automaticamente. Se isto não ocorrer, poderá usar ao invés da linha citada acima, esta:

SUBSYSTEM=="usb", SYSFS{idProduct}=="2000", SYSFS{idVendor}=="19d2", RUN+="/usr/sbin/usb_modeswitch", RUN+="/sbin/modprobe usbserial vendor=0x19d2 product=0x2000"

Só a título de curiosidade, esses parâmetros '2000' e '19d2' são conseguidos através do comando lsusb. Se teu modem for diferente, quem sabe analisando a identificação no lsusb e modificando o arquivo citado de acordo, funcione...
Serão criados os devices /dev/ttyUSB0, /dev/ttyUSB1 e /dev/ttyUSB0. Se deres um ls em /dev e aparecer esses três aí, tá tudo Ok e agora podes finalmente configurar seu discador predileto para acessar a internet. Aqueles mesmo que você usava nos tempos de internet discada. Os discadores devem ser configurados para usar o modem em /dev/ttyUSB2. Abaixo, uma configuração para o wvdial,(/etc/wvdial.conf) funcionou assim:

[Dialer Defaults]
Modem = /dev/ttyUSB2

Baud = 921600

DialCommand = ATDT
Check Def Route = on

FlowControl = Hardware(CRTSCTS)
Username = vivo

Password = vivo

Phone = *99#

Stupid mode = 1

Auto Reconnect = on
Auto DNS = on

Init1 = ATZ

Init2 = ATQ0 V1 E1 S0=0 &C1 &D2

Init3 = AT+CGDCONT=1,"IP","zap.vivo.com.br"

ISDN = 0
Modem Type = Analog Modem


A terceira linha do init (Init3) não me foi estritamente necessária, mas há quem diga que é. Eu particularmente não gosto muito do wvdial porque tem que ser rodado num terminal e como root (posso estar enganado novamente). Usei o kppp, mas antes de poder usá-lo, o sistema diz que o executável /usr/sbin/pppd deve ter o bit setuid setado, o que pode ser feito com:

>#chmod u+s /usr/sbin/pppd

Daí agora, jaz! Toda a configuração que eu fiz para o kppp foi baseada neste arquivo do wvdial e pode ser resumida pelos dois screenshots que se seguem.




Se depois disso,quiseres ainda experimentar usar o discador da vivo (que tem a vantagem de permitir o envio de sms), faz antes um backup do wvdial.conf, porque o programinha da vivo sobrescreve ele.