Marcio Barbado Junior
(BDS Labs)
Este é um tutorial prático para instalar no GNU/Linux o modem 3G, modelo MD300, fabricado pela Sony Ericsson para operar em sistemas operacionais proprietários.
Pode-se em certa medida, aproveitar este conteúdo para qualquer combinação entre uma distro e um modem 3G USB, fazendo-se pequenas adaptações nos passos descritos, que são especificamente focados no modem MD300 e em distribuições baseadas em Fedora/Red Hat e Debian.
É possível o utilizar com HSDPA, UMTS, EDGE e GPRS mas o equipamento não oferece suporte para chamadas de voz GSM. Também pode enviar e receber mensagens SMS. Tudo isso é fácil, considerando-se Windows e Mac OS.
Essas situações contudo causam "dores de cabeça" a usuários Linux, e muitos acabam deixando de utilizar o pinguim por não terem seu hardware devidamente reconhecido. Problema recorrente.
O caso é que usuários PJ (ou pessoa jurídica, empresariais) são grandes disseminadores de paradigmas tecnológicos, e o dispositivo da Sony Ericsson representa uma grande barreira à adoção do Linux na medida em que a operadora Claro vem sugerindo a seus clientes "corporativos" a utilização do modem em questão, o que inclusive constitui uma especie de venda casada, já que ao aceitarem a "sugestão", os clientes se vêem obrigados a possuir/adquirir uma licença paga de modo que possam usufruir do equipamento.
A questão toda se resume à constatação de uma estrategia velada, adotada por grandes players do mercado, que acaba por minar a confiabilidade do Linux.
Assim, as presentes linhas objetivam aliviar o incômodo e o desrespeito causado aos usuários do pinguim, e principalmente perseverar na batalha em prol da transparência de códigos E nessa missão, discorrem principalmente sobre
udev
e
wvdial
.
1 Introdução
Utilizou-se para redação destas linhas um sistema Fedora 10 de 64 bits, kernel "2.6.27.5". As adaptações para Debian são citadas sempre que preciso, e com pequenas alterações, o roteiro poderá resolver problemas de outras distribuições Linux que estiverem utilizando outros modems 3G USB.
Apesar do que afirmam alguns especialistas, versões de kernel posteriores à "2.6.19" podem encontrar dificuldades para entender um modem 3G USB
[1].
No Brasil, o MD300 é utilizado principalmente em sistemas operacionais Windows e nesses, é gerenciado por um software proprietário chamado "Wireless Manager", que se instala automaticamente, "espetando-se" o modem.
Bem, a historia é diferente no Linux. O pinguim exigirá que se escreva uma regra de
udev
, e que se configure o
wvdial
para então aceitar e entender o equipamento.
A regra de
udev
elimina o problema da detecção automática da memória flash presente no equipamento, e ativa o dispositivo
/dev/ACM0
ou seja, o
udev
permitirá que o MD300 seja devidamente reconhecido pelo sistema. O
wvdial
é um discador dial-up inteligente que será utilizado para fazer o modem funcionar com PPP (
daemon pppd
) após ser reconhecido.
É dito "inteligente" pois utiliza algoritmos heurísticos para obter a conexão Algumas vezes, tais algoritmos mais atrapalham do que ajudam.
São mostrados com simplicidade e detalhes, todos os passos necessários para suplantar as barreiras impostas pela Sony Ericsson aos usuários Linux. Tais dificuldades serão combatidas, e a rede da Claro será utilizada sem a necessidade de se conhecer o PIN e/ou o PUK do equipamento. Todavia, faz-se preciso o conhecimento de algumas informações elementares da operadora como o APN e o "número" para o qual ligar por exemplo.
1.1- Medidas preliminares
Caso se esteja utilizando o SELinux -- recomenda-se que sim -- coloque-o provisoriamente em modo permissivo até que o modem esteja funcionando corretamente. Isso é feito no arquivo
/etc/sysconfig/selinux
com a linha:
SELINUX=permissive
Outro ponto a se verificar diz respeito às presenças do
kppp
,
gnome-ppp
,
wvdial
e
minicom
, ferramentas que poderão ser usadas:
$ rpm -q kppp gnome-ppp wvdial minicom
ou:
$ which kppp gnome-ppp wvdial minicom
Caso não estejam presentes, deve-se ao menos realizar a instalação do
wvdial
embora os comandos abaixo instalem as três, que é a recomendação deste tutorial:
# yum install kppp gnome-ppp wvdial minicom
ou:
# apt-get -y install kppp gnome-ppp wvdial minicom
Uma medida a se tomar após as instalações diz respeito à permissão de escrita que os usuários devem possuir em:
/etc/ppp/pap-secrets
e:
/etc/ppp/chap-secrets
que são arquivos utilizados pelo
wvdial
.
O próximo passo é permitir que contas de usuário utilizem o
wvdial
pois o mesmo só pode ser executado pela conta
root
. Isso pode ser feito com o
sudo
, lembrando que o
wvdial
fica costumeiramente em
/usr/bin/wvdial
.
2- udev
rulez! [2]
Constitui um percalço comum em distribuições Fedora / Red Hat e RHEL, a situação em que o sistema não consegue disponibilizar o modem automaticamente. Isso pode estar relacionado à memória
flash contida no dispositivo, que provavelmente estará sendo detectada e montada automaticamente como uma mídia USB genérica no diretório
/media/
(ou
/mnt/
para distribuições baseadas em Debian).
O problema existindo, irá interferir na correta detecção do MD300. Pode-se detectar essa falha rapidamente se o sistema utilizar um ambiente gráfico, constatando-se o ícone MD300 no Desktop. E nesses casos basta dizer ao sistema operacional para não detectar a memória
flash do modem como uma mídia USB.
Todavia, essa correção
NÂO deve ser feita através do gerenciador gráfico de dispositivos USB ou editando-se o arquivo
/etc/fstab
. A questão é resolvida com o
udev
!
Sucessor do
devfs
, o versátil
udev
é um componente escrito em C, que opera dinamicamente sobre o diretório
/dev/
, local em que cria arquivos de dispositivos. É comum para dispositivos seriais, a utilização de arquivos do tipo
tty*
, exemplo:
/dev/ttyS3
ou:
/dev/ttyUSB0
O equipamento Sony Ericsson possui várias funções, capazes de ativar dispositivos no diretório
/dev/
como, por exemplo:
FUNÇÃO | DISPOSITIVO | EXEMPLO |
rede | /dev/eth [N] | /dev/eth2 |
memória flash | /dev/sdb [N] | dev/sdb1 |
modem | /dev/ttyS [N] | /dev/ttyS1 |
A função memória
flash, quando detectada, impede o correto uncionamento do MD300 mas o mesmo
NÃO pode ser dito sobre a função de rede -- em geral dispositivo
/dev/eth2
.
Cabe destacar a existência de uma correspondência aproximada entre os padrões para portas seriais em UNIX e MS-DOS.
Enquanto o padrão de Redmond é
COM
n, com
n iniciado em 1 -- or exemplo:
COM1
--, o padrão UNIX é
ttyS
n, com
n iniciado em 0. No exemplo dado,
/dev/ttyS0
.
A tabela abaixo apresenta essa correspondência de forma mais detalhada:
/dev/ttys0 (COM1 ) |
porta 0x3f8 |
IRQ 4 |
/dev/ttys2 (COM3 ) |
porta 0x3e8 |
IRQ 4 |
/dev/ttys3 (COM4 ) |
porta 0x2e8 |
IRQ 3 |
Qual (ou quais) dos
ttyS
n corresponde (ou correspondem) ao MD300?
Pois é: nenhum deles. A regra a ser escrita irá inibir o reconhecimento da memória flash e mostrar que para o MD300, o sistema operacional utiliza
/dev/ttyACM0
.
Faz-se a regra do
udev
através da criação de um arquivo de texto com sufixo
.rules
no diretório
/etc/udev/rules.d/
:
# vim /etc/udev/rules.d/50-md300modem.rules
Copia-se o conteúdo a seguir neste arquivo. Cuidado com as aspas simples e duplas ao copiar e colar. Confira se elas foram transportadas corretamente depois de colar:
ACTION!="add", GOTO="3G_End"
BUS=="usb", SYSFS{idProduct}=="d0cf", SYSFS{idVendor}=="0fce",
PROGRAM="/bin/sh -c 'echo 3 > /sys/%p/bConfigurationValue'"
LABEL="3G_End"
Os valores de
SYSFS{idProduct}
e
SYSFS{idVendor}
devem ser obtidas através do
dmesg
:
$ dmesg | grep usb
que apresentará em sua saída, tais informações:
usb 3-2: New USB device found, idVendor=0fce, idProduct=d0cf
usb 3-2: Product: Sony Ericsson MD300
usb 3-2: Manufacturer: Sony Ericsson
Criado o arquivo, reinicia-se o sistema operacional.
Grosso modo, o
wvdial
(ou
Weave Dial) é um discador escrito em C++ por Dave Coombs e Avery Pennarun, e licenciado sob a LGPL, que não é "viral" como a GPL, infelizmente.
O programa, que utiliza o protocolo PPP através do daemon
pppd
, deve ser utilizado pela conta
root
a princípio, e automatiza diversas tarefas, tornando desnecessário o conhecimento de PIN e PUK para a conexão.
Utilizado em linha de comando, caso não possua opções, o discador irá ler seu arquivo de configurações globais:
/etc/wvdial.conf
e em seguida, um dos arquivos das contas de usuário, que são:
~/.wvdial.conf
ou:
~/.wvdialrc
eventualmente presentes no diretório
home do usuário
Os arquivos de configuração seguem o padrão
.ini
do Windows. Os nomes das seções estão entre colchetes e seus conteúdos são sequências de linhas no modelo:
variável = valor
Linhas comentadas são iniciadas pelo caractere "ponto e virgula", ou "
;
". Antes mesmo de se usar o
wvdial
pela primeira vez, é preciso executar como
root o programa
wvdialconf
, que possivelmente identificará a porta serial do modem:
# wvdialconf /etc/wvdial.conf
Caso a ferramenta tenha êxito, o dispositivo referente ao MD300 será detectado e algumas informações básicas de configuração serão carregadas no arquivo global
/etc/wvdial.conf
, que em seguida deve ser editado com informações especificas:
# vim /etc/wvdial.conf
Utiliza-se o seguinte conteúdo no arquivo -- algumas linhas já terão sido preenchidas pelo
wvdialconf
:
[Dialer Defaults]
Modem = /dev/ttyACM0
Modem Type = USB Modem
Baud = 460800
Init = ATZ
Init2 = AT+CFUN=1
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init4 = AT+CGDCONT=1,"IP","bandalarga.claro.com.br"
Init5 =
Init6 =
Init7 =
Init8 =
Init9 =
Phone = *99***1#
Dial Command = ATM1L3DT
Username = claro
Password = claro
Stupid Mode = 1
Auto DNS = on
Check DNS = on
Check Def Route = on
Remote Name = *
Carrier Check = on
Auto Reconnect = on
Abort on No Dialtone = on
Dial Attempts = 3
ISDN = 0
Atenção com as aspas.
O exemplo é especifico para o MD300 e para a Claro. Valores à direita de
=
e algumas variáveis poderão mudar em acordo com o modem e a operadora utilizada. O comando:
$ man wvdial.conf
fornece mais informações sobre o devido preenchimento do arquivo
/etc/wvdial.conf
, procedimento este que após ser concluído, deve ser seguido de uma reinicialização do sistema operacional com o modem espetado, e então a conexão pode ser gerenciada pelo
kppp
e/ou pelo
gnome-ppp
; e/ou diretamente pelo
wvdial
:
$ sudo wvdial
e para se desconectar, caso tenha usado o
wvdial
, pressione
Ctrl + c
.
4- Soluções de problemas
Caso a conexão fique instável, é possível como
root, verificar o que ocorre no sistema em tempo real com o
tail
, utilizando-se a opção
-f
(de
follow) para seguir os últimos registros:
# tail -f /var/log/audit/audit.log
ou:
# tail -f /var/log/messages
Os registros do arquivo
/var/log/audit/audit.log
serão úteis caso o SELinux esteja ativado.
As seções a seguir cobrem os problemas mais comuns que podem aparecer com os procedimentos aqui descritos.
4.1- Arquivos de configurações do wvdial [4]
Talvez o leitor tenha optado por editar arquivos do usuário, que são o:
~/.wvdial.conf
e/ou o:
~/.wvdialrc
e o
wvdial
não o(s) esteja utilizando.
Isso se resolve colando todas as configurações supracitadas no arquivo global, chamado
/etc/wvdial.conf
.
4.2- Conecta mas o web browser não carrega conteúdo
Cabe salientar que em alguns casos a saída que o wvdial apresenta no terminal leva a crer que os servidores de nomes (DNS) foram devidamente obtidos, exemplo:
--> pppd: =
--> primary DNS address 200.169.119.221
--> pppd: =
--> secondary DNS address 200.169.119.222
--> pppd: =
O sintoma é o navegador reclamando de um endereço qualquer como
www.google.com
ou
www.bdslabs.com.br
. O conteúdo simplesmente não é exibido.
E, ao contrário do que possa parecer, talvez esteja ocorrendo um erro relacionado a DNS.
Isso pode ser verificado da seguinte forma. Caso seja possível
pingar um IP (por exemplo,
200.169.119.221
) mas não seja possível
pingar um nome (por exemplo,
www.google.com), então o problema é de fato a obtenção dos servidores de nomes, e a solução é adicionar as seguintes linhas no final do arquivo
/etc/resolv.conf
:
domain bandalarga.claro.com.br
nameserver 200.169.119.221
nameserver 200.169.119.222
Este procedimento corresponde à copia do conteúdo presente em
/etc/ppp/resolv.conf
no arquivo
/etc/resolv.conf
.
O arquivo
/etc/ppp/resolv.conf
possuirá os IPs mostrados na saída do
wvdial
.
4.3- Não é possível se descobrir a porta serial do modem
Uma opção para essa situação é utilizar o programa
minicom
[5].
Nativo em muitas distros, ele só pode ser configurado e testado em uma porta serial de cada vez. A configuração começa através do comando:
# minicom -s
que leva ao menu
configuration
no qual se escolhe a opção
Serial port setup
. Uma vez lá, modifique
Serial Device
e retorne ao menu. Escolha então
Save setup as dfl
e em seguida,
Exit from Minicom
. Execute o programa novamente:
# minicom
e digite:
AT
é esperada uma resposta
OK
; caso não se obtenha tal resposta, digite:
ATQ0 V1 EI
novamente, espera-se uma resposta
OK
. Caso ela não venha mesmo assim, refaça a configuração do
minicom
utilizando outro dispositivo e repita os testes.
Um programa que pode ajudar o
minicom
se chama
setserial
. Este, pode obter e modificar informações das portas seriais. O seguinte comando é um exemplo que obtem informações básicas sobre algumas delas:
# setserial -g -a /dev/ttyS0 /dev/ttyS1 /dev/ttyS2 /dev/ttyS3
Uma saída típica do
setserial
pode ser:
/dev/ttyS0, Line 0, UART: unknown, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test auto_irq
/dev/ttyS1, Line 1, UART: unknown, Port: 0x02f8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test auto_irq
/dev/ttyS2, Line 2, UART: unknown, Port: 0x03e8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test auto_irq
/dev/ttyS3, Line 3, UART: unknown, Port: 0x02e8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal auto_irq
5- Conclusões
Frequentemente se verifica a fabricação de equipamentos USB que funcionam apenas em sistemas proprietários Esta é uma das razões que prejudica a disseminação do Linux.
Particularmente, alguns fabricantes de equipamentos 3G como a Huawei, preocupam-se com sistemas operacionais livres. A Sony Ericsson infelizmente não faz parte desse grupo.
É possível contudo, combater esse desrespeito a usuários Linux através da devida modificação do sistema. E na maioria dos casos, isso se resume a escrever uma regra
udev
, configurar e utilizar devidamente o
wvdial
.
Contato
Marcio Barbado Jr. é empresário e ativista do Software Livre, sendo um dos proprietários da BDS Labs, em
http://www.bdslabs.com.brMarcio possui larga experiência em programação, projeto e integração de sistemas.
E-mail para contato:
contato@bdslabs.com.br6- Referências
[1] LINUX MAGAZINE #63 (FEVEREIRO de 2010) - Pergunte ao Klaus
http://www.linuxmagazine.com.br/article/pergunte_ao_klaus_lm63Visitado em 16/04/2010
[2] Entendendo o udev - Carlos E. Morimoto
http://www.guiadohardware.net/tutoriais/acessando-dispositivos-usb-escrevendo-regras/entendendo-udev.htmlVisitado em 16/04/2010
[3] WvDial | freshmeat.net
http://freshmeat.net/projects/wvdial/Visitado em 16/04/2010
[4] páginas
man (manuais de utilização)
wvdial
e
wvdial.conf
Visitado em 16/04/2010
[5] Modem-HOWTO -- 18. Troubleshooting
http://tldp.org/HOWTO/Modem-HOWTO-18.htmlVisitado em 16/04/2010