Usando o smartphone como modem Bluetooth, no Linux
novembro 11, 2008 – 8:17 pmApesar de ser mais associado com o uso de headsets e transferência de pequenos arquivos, o Bluetooth possui dois perfis que permitem que o smartphone compartilhe sua conexão de dados com outros aparelhos, incluindo, naturalmente, os PCs e notebooks.
O sistema mais tradicional e mais usado é o DUN (dial-up network), onde o celular simula o comportamento de um modem, permitindo que o desktop "disque" e acesse a rede da operadora através dele. Na verdade, a conexão é estabelecida pelo próprio celular, apenas os pacotes são repassados ao desktop, usando o Bluetooth como uma porta serial.
Atualmente, os aparelhos da Nokia com o S60 são (de uma forma geral) as melhores opções para conectar usando o notebook, já que eles suportam DUN nativamente e o recurso fica disponível por padrão depois de fazer o pairing e autorizar as conexões proveniente do PC, sem que você precise de nenhuma configuração em especial.
O suporte ao DUN é tão maduro que você pode até mesmo usar a conexão simultaneamente no PC e no próprio aparelho (o que permite que você "empreste" a conexão para algum amigo necessitado, sem precisar deixar o smartphone parado enquanto ele a está usando). Você também não terá grandes dificuldades em usar a conexão em outros dispositivos, como navegadores GPS, ou mesmo em Pocket PCs ou outros smartphones que ofereçam suporte ao DUN.
Obviamente, tudo isso é válido apenas para quem tem um plano de dados ilimitado, já que é inviável usar a conexão no notebook se você paga por megabyte transferido.
A configuração básica inclui o número de discagem, a porta em que o modem está conectado (que no caso da conexão via Bluetooth no Linux é a "/dev/rfcomm0") e a APN da operadora). Aqui vão os parâmetros de configuração para as principais operadoras (no final de 2008). As configurações mudam conforme as operadoras atualizam suas redes, por isso não deixe de checar em caso de erro:
Vivo:
Usuário e senha: vivo/vivo
Telefone: *99#
APN: zap.vivo.com.br
Claro:
Usuário e senha: claro/claro
Telefone: *99***1#
APN: claro.com.br ou bandalarga.claro.com.br
TIM:
Usuário e senha: tim/tim
Telefone: *99# (para as conexões 3G) ou *99***1# (para os planos antigos, com EDGE)
APN: tim.br
Se por acaso você ainda estiver usando um dos planos CDMA da Vivo, o número de discagem é "#777" e o login é o número do telefone (incluindo o código de área), seguido de um "@vivozap.com.br" como em "1199998888@vivozap.com.br", com a senha "vivo".
Conectar via Bluetooth pode ser um pouco mais complicado do que simplesmente usar um modem USB, mas oferece a vantagem de ser uma solução 100% wireless. Você pode deixar o celular com o DUN ativado e efetuar a conexão a partir do notebook sempre que precisar, sem nem tirar o celular do bolso. Muitos notebooks já vem com transmissores Bluetooth integrados, nos demais você pode usar um dos transmissores bluetooth em miniatura que hoje são relativamente fáceis de encontrar em lojas online. O tamanho compacto permite que você deixe o transmissor instalado continuamente, como se fosse um transmissor interno:

Para conectar no Linux, o primeiro passo é descobrir qual é o endereço do transmissor Bluetooth do smartphone, usando o comando "hcitool scan":
$ hcitool scan
Scanning …
00:21:FE:CF:A2:E1 E71
Precisamos também descobrir qual é o canal que é usado pelo smartphone para o acesso ao DUN. Para isso, usamos o comando "sdptool search DUN":
$ sdptool search DUN
Inquiring …
Searching for DUN on 00:1B:AF:E4:AA:5B …
Service Name: Dial-Up Networking
Service RecHandle: 0×10003
Service Class ID List:
"Dialup Networking" (0×1103)
Protocol Descriptor List:
"L2CAP" (0×0100)
"RFCOMM" (0×0003)
Channel: 2
Language Base Attr List:
code_ISO639: 0×454e
encoding: 0×6a
base_offset: 0×100
Profile Descriptor List:
"Dialup Networking" (0×1103)
Version: 0×0100
Como pode ver, ele vomita uma grande quantidade de informações, mas o que nos interessa é a linha "Channel", que no meu caso é 2. O canal 2 é usado pela maioria dos aparelhos da Nokia, enquanto aparelhos de outros fabricantes usam normalmente o canal 1 mas, de qualquer forma, não custa verificar.
O passo seguinte é ativar o rfcomm, que cria um link serial entre o desktop e o smartphone, permitindo o uso do DUN. Para isso, edite o arquivo "/etc/bluetooth/rfcomm.conf", deixando-o com o seguinte conteúdo:
rfcomm0 {
bind yes;
device 00:21:FE:CF:A2:E1;
channel 2;
comment "E71";
}
Note que o "00:21:FE:CF:A2:E1" e o "E71" correspondem ao ID e ao nome do aparelho, que você obtém ao rodar o comando "hcitool scan". É importante indicar corretamente o canal, já que sem ele o PC não consegue se conectar ao smartphone.
Continuando, dê uma olhada também no arquivo "/etc/bluetooth/hcid.conf", onde vão as configurações gerais do Bluetooth. Este é um exemplo de arquivo de configuração, que você pode usar como modelo:
options {
autoinit yes;
security auto;
pairing multi;
passkey "1234";
}
device {
name "Semprao";
class 0×3e0100;
iscan enable; pscan enable;
lm accept;
lp rswitch,hold,sniff,park;
}
As opções importantes aqui são as linhas "passkey" e "name". As demais já vêm configuradas por padrão, permitindo a conexão de qualquer dispositivo.
A opção "name" determina o nome com o qual seu PC aparecerá na piconet (a rede Bluetooth). A passkey (também chamada de PIN) é um código de segurança, que você precisa fornecer na hora de conectar seu celular ou qualquer outro dispositivo ao seu PC. A passkey default é "1234", depois de testar, não deixe de mudar para algo mais seguro.
Depois de terminar, reinicie o serviço do Bluetooth para que a configuração entre em vigor:
# /etc/init.d/bluetooth restart
Nesse ponto, o comando "rfcomm" deve mostrar algo como:
# rfcomm
rfcomm0: 00:21:FE:CF:A2:E1 channel 2 clean
Isso indica que o link entre o PC e o celular foi criado com sucesso. Verifique também se o arquivo "/dev/rfcomm0" foi criado. Em alguns casos, pode ser necessário desligar e ligar o celular para que ele seja criado corretamente.
O próximo passo é (se já não fez anteriormente) fazer o pairing entre o PC e o smartphone. A principal dica é que você deve definir seu notebook como dispositivo autorizado dentro da configuração do Bluetooth (que nos Nokia vai no Configurações > Conectiv. > Bluetooth) depois de fazer a conexão inicial, de forma que você possa ativar a conexão quando quiser, sem precisar ficar respondendo a conexões adicionais. Com isso, você pode ativar a conexão no notebook sem precisar tirar o smartphone do bolso.

Neste ponto, o suporte a Bluetooth já está configurado e testado, falta apenas estabelecer a conexão usando o kppp, gnome-ppp ou outro discador.
A forma mais rápida de gerar a conexão é usar o wvdial, que é um discador de modo texto, onde você pode simplesmente colocar as configurações de discagem dentro de um arquivo de texto e chamá-lo sempre que quiser ativar a conexão. Para usá-lo, edite o arquivo "/etc/wvdial.conf", deixando-o com o seguinte conteúdo:
# Modelo do /etc/wvdial.conf para conexões via DUN
# Ao copiar e colar, verifique as aspas e o aparecimento de caracteres estranhos (cortesia do UTF-8)
[Dialer 3g]
Modem = /dev/rfcomm0
Baud = 921600
DialCommand = ATDT
FlowControl = Hardware(CRTSCTS)
Username = vivo
Password = vivo
Phone = *99#
Check Def Route = on
Stupid mode = 1
Auto Reconnect = on
Auto DNS = on
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init5 = AT+CGDCONT=1,"IP","zap.vivo.com.br","",0,0
ISDN = 0
Modem Type = Analog Modem
As linhas "Modem", Username", "Password" e "Phone" especificam a porta e as configurações da operadora, enquanto as linhas "Init1", "Init2" e "Init5" especificam as strings de discagem. Estas do exemplo são as strings para conexões via Bluetooth, mas outros tipos de conexões podem utilizar strings diferentes. Veja que a antepenúltima linha especifica a APN da operadora, não se esqueça de alterá-la caso necessário.
Depois de salva a configuração, você precisa apenas usar o comando "wvdial 3g" (como root) quando quiser conectar:
# wvdial 3g
--> WvDial: Internet dialer version 1.56
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CGDCONT=1,"IP","zap.vivo.com.br","",0,0
AT+CGDCONT=1,"IP","zap.vivo.com.br","",0,0
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
Como pode ver, o wvdial mostra todos os detalhes da conexão, o que acaba sendo útil para solucionar problemas inesperados, já que você pode ver as mensagens de erro e pesquisar sobre elas. Para encerrar a conexão pressione Ctrl+C (apenas uma vez) e deixe que ele faça o processo normal de desconexão e restaure a rota padrão.
Se algo der errado durante a discagem (mesmo que a configuração esteja correta), experimente reiniciar o smartphone e tentar de novo. Nos Nokia, é muito comum que o subsistema bluetooth fique travado, impedindo que você se conecte, o que é rapidamente resolvido ao desligar e ligar novamente.
Algumas operadoras, com destaque para a Claro e a Embratel (com o Giro), tem implementado um sistema de timeout nas conexões 3G, que faz com que as conexões sejam encerradas depois de alguns segundos de inatividade e restabelecidas automaticamente assim que é necessário transmitir dados. O problema é que em áreas com muitos assinantes o processo pode demorar alguns segundos, ou mesmo travar a conexão, obrigando-o a desconectar e reconectar novamente, fazendo com que na prática a conexão fique bastante instável.
Uma solução simples para isso no Linux é usar o ping para enviar um pacote de dados a cada dois segundos, evitando que a conexão seja encerrada. Basta abrir um terminal e deixar o comando correndo indevidamente enquanto estiver conectado:
$ ping -i 2 google.com
Se por acaso você tiver problemas de estabilidade, com a conexão caindo a cada dois minutos, abra o arquivo "/etc/ppp/options" e comente (ou remova) as linhas:
lcp-echo-interval 30
lcp-echo-failure 4
O "lcp-echo" é um pacote de controle, usado para verificar se a conexão ainda está ativa. Quando o servidor do provedor de acesso deixa de responder, o discador presume que a conexão foi perdida e desconecta automaticamente. O problema é que estes pacotes não são suportados em muitos aparelhos (como no Treo 650), fazendo com que a conexão sempre caia depois de dois minutos.
Se estiver preocupado com a segurança, você pode ativar o firewall simples para bloquear tentativas de conexão vindas da Internet adicionando os comandos:
iptables -A INPUT -p tcp -i ppp0 --syn -j DROP
iptables -A INPUT -p udp -i ppp0 --dport 1:1024 -j DROP
… no final do arquivo "/etc/ppp/ip-up".
Se quiser compartilhar a conexão com outros micros ligados em rede com o primeiro (você pode criar uma rede ad-hoc usando a placa wireless e assim compartilhar a conexão rapidamente com os amigos, por exemplo), adicione as três linhas abaixo no mesmo arquivo:
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
O arquivo "/etc/ppp/ip-up" é executado automaticamente pelo sistema quando a conexão é ativada, de forma que ao colocá-los no final do arquivo o firewall e/ou o compartilhamentos passam a ser ativados automaticamente sempre que você ativa a conexão. Você pode também executá-los de forma avulsa diretamente no terminal.
Outra dica é que muitas distribuições antigas (anteriores a 2008) usam uma versão bugada do wvdial que não altera a rota padrão depois de conectado, o que faz com que o sistema continue tentando acessar através da placa de rede ou outra conexão já existente em vez de acessar usando a conexão 3G, o que causa o famoso "conecta mas não navega". Nesses casos, é necessário rodar o comando "route del default" antes de estabelecer a conexão, como em:
# route de default
# wvdial 3g
Para reconectar à rede local depois de fechar a conexão (se for o caso), use:
# /etc/init.d/networking restart
ou:
# /etc/init.d/NetworkManager restart
(no Ubuntu ou outras distribuição que usam o NetworkManager)







8 Responses to “Usando o smartphone como modem Bluetooth, no Linux”
Unable to run /usr/sbin/pppd.
--> Check permissions, or specify a "PPPD Path" option in wvdial.conf… Pois é, Morimoto, esta é a mensagem que aparece no log do Gnome-ppp ao fazer essa configuração. Já tinha conhecimento dos passos demonstrados clara e objetivamente por você e os executava bem no Ubuntu 8.04. Porém, no 8.10 tenho tido problemas. Só consigo rodar através da combinação alt+f2 gksu gnome-ppp. Como sou meio "verde" com linux ainda, conto com sua valorosa ajuda. Um abraço, … Paulo.
By Paulo Celso on Nov 12, 2008
Parabéns pelo artigo.
Muito bem explicado e completo!
Faz um bom tempo que venho tentando usar meu tre0 650 como modem no ubuntu e nada…
Agora acho que vou conseguir.
Valeu!
By Roberto Entringer on Nov 12, 2008
Paulo, a menos que o pacote do pppd não esteja instalado, isso me parece mais um dos intermináveis problemas de permissão ao tentar usar conexões discadas como usuários normal. Experimente fazer a discagem como root, logando direto com o "su" ou "sux".
Roberto, também usava um Treo 650 como modem usando essa configuração desde a época do GPRS. Funciona bem, o ruim é que o 650 é muito instável (reinicia sozinho às vezes, derrubando a conexão) e não dá para fazer chamadas de voz enquanto ele está conectado.
By Carlos Morimoto on Nov 12, 2008
Morimoto,
Estou usando o N95 com o ubuntu, e para minha surpresa, ao conectar o telefone no comutador via cabo, o mesmo é reconhecido e a comfiguraçao é bem simples.
Fiquei bastante feliz de saber que o meu cel é mais simples de confgurar no linux do que minha placa WIFI (broadcom)!
O artigo é bastante útil com informaçoes nao tão fáceis como os dados das operadoras.
By Tnhiago Tatagiba on Nov 13, 2008
Pois é, Morimoto, fazendo como você propôs, funciona. Mas, (desculpe a ignorância) não seria arriscado rodar o gnome-ppp como root? Quais as implicações de segurança? Como faço para instalar o "pacote do pppd"? Tentei via synaptic e via terminal (apt-get) e não consegui. Dá até vontade de voltar para o Ubuntu 8.04!
By Paulo Celso on Nov 13, 2008
É a mesma questão de rodar qualquer outro programa como root: uma eventual brecha de segurança poderia permitir que outros obtivessem acesso ao sistema. Desde que você esteja usando uma distribuição atual não existe muito a temer. É apenas mais uma coisa que não deveria ser feita, mas que todo mundo faz, pois do jeito "certo" não funciona.
By Carlos Morimoto on Nov 13, 2008
Pô não querendo ser chato e jamais deixando de sê-lo, não podia soltar um tuto de como compartilhar 2 usb (tipo dongle) bluetooth, um no micro e outro em um laptop no k7 ou kng? Já não está mais aquí quem perguntou…
By julio leme on Nov 14, 2008
Parabens pelo excelente artigo, muito bem esplicado e servira tbm para muitas outras conexoes com bluetooth.
By Celso Nery on Nov 16, 2008