Acessando celulares e palmtops via bluetooth no Linux

Acessando celulares e palmtops via bluetooth no Linux
Ao contrário do padrão Wi-Fi, que inclui os padrões 802.11.b, 802.11a e 802.11g, usados nas redes sem fio, o Bluetooth tem como principal objetivo substituir os cabos, permitindo que celulares, palmtops, mouses, headsets, entre outros troquem dados entre sí e com o PC, sem precisar de cabos. Uma rede Bluetooth é chamada de “piconet” e é composta por um dispositivo “master” e até 8 “slaves”, que se conectam a ele.

Existem duas classe de dispositivos Bluetooth. Os dispositivos “classe 2” (que são os usados em quase todos os celulares e aparelhos portáteis) trabalham com um transmissor de apenas 2.5 mW e por isso possuem um alcance de apenas 10 metros (em campo aberto). Na hora de comprar um adaptador Bluetooth para o PC, você tem a opção de também comprar um transmissor tipo 2 (que são os mais compactos e baratos), ou comprar um adaptador com um transmissor classe 1, que possuem um alcance teórico de 100 metros (bem menos na prática, já que você nunca está num ambiente livre de obstáculos). Atualmente, cada vez mais notebooks já vem com transmissores Bluetooth de fábrica, dispensando o adaptador.

index_html_m7fa8068e

A velocidade de transmissão no Bluetooth é de apenas 1 megabit (721 kbits reais), o que inviabiliza a transmissão de grandes arquivos. Isso faz com que, na prática, o uso mais comum para o Bluetooth seja transferir fotos, pequenos arquivos e (com um pouco de paciência) músicas em MP3 entre o PC e o celular ou palmtop.

Fazer isso no Linux já foi uma tarefa ingrata (mesmo no Windows, só existe um suporte maduro a partir do XP SP2), mas atualmente as coisas estão bem mais simples :).

O primeiro passo é instalar os pacotes necessários. Tudo começa com o “bluez-utils“, que faz o trabalho pesado. Ele é complementado pelo pacote “bluez-libs“, que em muitos casos é integrado ao pacote principal. Em seguida temos os pacotes “kdebluetooth” e “kmobiletools“, que compõem a interface de acesso.

O primeiro passo é instalar os pacotes. No Kurumin e no Ubuntu você pode instalar diretamente via apt-get:

# apt-get install bluez-utils kmobiletools kdebluetooth dbus (em outras distribuições, você pode precisar instalar também os pacotes “bluez-libs” e “bluetooth”)

Serão criados ícones no “Iniciar > Internet”:

index_html_52440c1f

Reinicie os serviços para ter certeza de que realmente estão carregados:

# /etc/init.d/dbus restart
# /etc/init.d/bluetooth restart

Depois de instalar tudo, verifique se seu adaptador Bluetooth foi detectado corretamente, usando o comando:

# hciconfig

Se ele responder algo similar a:

hci0: Type: USB
BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0
DOWN
RX bytes:0 acl:0 sco:0 events:0 errors:0
TX bytes:0 acl:0 sco:0 commands:0 errors:0

… significa que o adaptador foi detectado, mas está desativado. Neste caso, rode o comando que ativa o transmissor:

# hciconfig hci0 up

Rode de novo o hciconfig e ele deve retornar algo como:

hci0: Type: USB
BD Address: 00:11:67:32:95:23 ACL MTU: 678:8 SCO MTU: 48:10
UP RUNNING PSCAN ISCAN
RX bytes:77 acl:0 sco:0 events:9 errors:0
TX bytes:34 acl:0 sco:0 commands:9 errors:0

Aproveite para adicionar o comando no final do arquivo “/etc/init.d/bootmisc.sh” ou “/etc/rc.d/rc.local“, para que o transmissor seja ativado automaticamente durante o boot.

Aqui vai um pequeno truque. Ao invés de abrir o arquivo e adicionar a linha manualmente, você pode usar o comando abaixo (como root) para fazer o trabalho automaticamente. Ele simplesmente cria uma nova linha no final do arquivo, contendo o que colocamos entre aspas:

# echo “hciconfig hci0 up” >> /etc/init.d/bootmisc.sh

Rode agora o comando “hcitool scan“. Ele deverá mostrar o ID do seu celular. Em caso de problemas neste ponto, verifique se o transmissor do celular está realmente ativado (acontece nas melhores famílias ;).

$ hcitool scan
Scanning …
00:07:E0:18:9A:02 treo

Agora vem a parte potencialmente mais problemática é que é fazer o “pairing“, ou seja, fazer a conexão inicial entre o PC e o celular, de forma que ele aceite as conexões.

No caso do meu Treo, clico na opção “Trusted Devices” dentro da configuração do Bluetooth e escolho o meu desktop na lista. Ele solicita a passkey e em seguida a conexão é estabelecida:

index_html_2ed330aindex_html_2f2b6222index_html_7a454639

A passkey é um código de segurança, que você precisa fornecer na hora de conectar seu celular, ou qualquer outro dispositivo ao seu PC. Por default, a passkey será “1234”, ou “BlueZ”, de acordo com a versão instalada e o nome será “BlueZ” ou o nome do micro, definido na configuração da rede.

Depois de conectar seu celular, é interessante mudar esta configuração, sobretudo a passkey. Para isso, edite o arquivo “/etc/bluetooth/hcid.conf“.

As opções importantes aqui são as linhas “passkey” (também chamada de pin) e “name” (determina o nome com o qual seu PC aparecerá na piconet). As demais já vêm configuradas por padrão, permitindo a conexão de qualquer dispositivo. Altere-as adicionando sua configuração, como em:

passkey “minhasenhasecreta”;
name “MeuPC”;

Reinicie (novamente) os serviços, para que a nova configuração entre em vigor. O fato de alterar a configuração, não desativa o pairing já feito com seu celular, apenas impede que outros aparelhos se conectem ao seu PC utilizando a senha default (o que seria um problema de segurança).

# /etc/init.d/dbus restart
# /etc/init.d/bluetooth restart

Depois de fazer o pairing, abra o Kbluetoothd, usando o ícone no menu. Ele ficará residente na forma de um ícone ao lado do relógio. Ao clicar sobre ele, você abre uma lista com os aparelhos disponíveis e os recursos suportados por cada um. Muitos celulares suportam o “Obex File Transfer”, que permite transferir arquivos (incluindo músicas em MP3) diretamente para o cartão de memória.

index_html_6934a557

Ao ser aberto pela primeira vez, o Kbluetoothd sugere que você use o “kbluepin” como verificador do código PIN, ao invés da configuração manual que usamos até aqui. Ele é um pequeno programa que abre uma janela no PC sempre que o celular tenta se conectar, perguntando qual PIN será usado. Na verdade, é uma perfumaria, que você pode usar ou não.

Se preferir mudar, edite novamente o arquivo “/etc/bluetooth/hcid.conf” e substitua a linha:

passkey “minhasenhasecreta”;

Por:

pin_helper /usr/lib/kdebluetooth/kbluepin;

index_html_m49c742b1

Para os casos em que o celular não usa um cartão de memória, ou não suporta a transferência direta de arquivos, abra o Kbtobexclient (também disponível no iniciar), que permite transferir arquivos para a memória do aparelho usando o protocolo padrão.

Para transferir, selecione o seu celular na lista da esquerda e arraste o arquivo a ser transferido para o campo “file to send”. Clique no “Send” e a transferência é iniciada:

index_html_1b62b957

É mostrada uma tela no celular perguntando o que fazer com o arquivo. Os formatos de arquivos suportados variam muito de acordo com o celular, mas a maioria suporta imagens em jpg. Você pode começar transferindo uma imagem pequena para testar.

index_html_m13593101

É possível também transferir arquivos do celular para o PC. No meu Treo 650, por exemplo, posso transferir desde imagens e músicas, até anotações feitas no MemoPad, que são recebidas como arquivos de texto. Na maioria dos celulares, você pode transferir fotos e vídeos gerados com a câmera.

Para isso, selecione a opção de envio no celular e mantenha o Kbluetoothd aberto no PC. Será mostrada uma janela de confirmação:

index_html_4ccf9785

Mude a opção “Future policy for this device and service” para “allow” se quiser que as próximas transferências sejam aceitas automaticamente, sem que seja aberta a tela de conformação. Depois é só decidir onde salvar o arquivo :).

index_html_m6d438c83

Completando o time, temos o Kmobiletools, que permite acessar a agenda do celular, discar e atender chamadas através do PC, ler e enviar mensagens SMS, entre outros recursos.

Ele pode ser usado para acessar o celular tanto através de um cabo USB, quanto via Bluetooth. A configuração para acessar via cabo é mais simples: dentro das configurações, indique a porta “/dev/ttyACM0” e deixe que ele detecte o celular. Como o Kmobiletools ainda está em fase de rápido desenvolvimento, aparelhos que não são suportados, ou operam com recursos limitados numa versão, podem passar a ser bem suportados na seguinte e também existem casos de regressões, ou seja, aparelhos que deixam de funcionar numa versão e voltam na seguinte. Segundo os desenvolvedores, os celulares melhor suportados são os Motorola e SonyEricsson, enquanto os piores no estágio atual são os Nokia.

index_html_m47b75676

Para acessar o celular via Bluetooth, existem alguns passos adicionais. Comece usando o comando “hcitool scan” para descobrir o endereço do seu aparelho:

$ hcitool scan
Scanning …
00:07:E0:18:9A:02 treo

Precisamos agora editar o arquivo “/etc/bluetooth/rfcomm.conf“, onde associaremos o celular a uma porta serial, permitindo que ele seja acessado pelo Kmobiletools. Edite o arquivo, deixando-o como este exemplo. Note que você deve mudar o endereço e o nome do aparelho, deixando-os igual ao informado pelo “hcitool scan”:

rfcomm0 {

bind yes;
device 00:07:E0:18:9A:02;
channel 1;
comment “treo”;

}

Depois de salvar, reinicie os serviços:

# /etc/init.d/dbus restart
# /etc/init.d/bluetooth restart

Terminado, configure o Kmobiletools para acessar o celular através da porta “/dev/rfcomm0“, que foi criada no passo anterior. A partir daí, o celular passa a ser acessado da mesma forma que seria através do cabo USB. Note que antes de fazer tudo isso, você deve ter feito os passos anteriores, ou seja, instalar o BlueZ, fazer o pairing entre o PC e o Celular e testar a conectividade.

index_html_380214cf

Solucionando problemas

Caso você não consiga criar a associação a partir do celular, também é possível fazê-lo a partir do PC. Neste caso, use os comandos abaixo. Isso abrirá um diálogo no celular, pedindo para inserir a passkey do desktop. Note que novamente é preciso especificar o ID do celular, que você descobre usando o comando “hcitool scan”:

# hcitool cc 00:07:E0:18:9A:02
# hcitool auth 00:07:E0:18:9A:02

Assim como qualquer software, o BlueZ teve seus altos e baixos ao longo de sua história. Uma das versões mais problemáticas foi a 3.1, com problemas relacionados à definição do PIN e comportamento errático em muitas situações.

Infelizmente, o 3.1 foi uma versão muito usada. Ele é a versão usada por padrão no Ubuntu Dapper (e nos primeiros betas do Edgy), no Debian Etch e em várias outras distribuições. Ou seja, a possibilidade de você estar utilizando-a é bastante grande.

Se você está encontrando problemas estranhos, vale à pena atualizar o pacote bluez-utils para a versão mais recente. Comece verificando se não existe uma atualização disponível via apt-get:

# apt-get update
# apt-get bluez-utils

Como último recurso, você pode experimentar instalar a versão mais atual a partir do código fonte, disponível no http://www.bluez.org/download.html.

A instalação em sí é mecânica. O maior problema é que você precisa ter instalado um conjunto de bibliotecas e compiladores, para que instalação seja bem sucedida. Comece instalando o pacote “bluez-utils“, disponível no site. No meu caso, baixei o arquivo “bluez-utils-3.5.tar.gz“.

O primeiro passo é instalar os compiladores e bibliotecas. Numa versão recente do Kurumin ou Ubuntu, você pode instalar os pacotes necessários usando o apt-get:

# apt-get install build-essential libbluetooth2-dev libdbus-1-dev

Em seguida, chegamos à instalação, que é feita em três passos:

  • Descompacte o arquivo (você pode fazê-lo através do Konqueror, mas já que estamos com o terminal aberto… 😉

$ tar -zxvf bluez-utils-3.5.tar.gz
  • Acesse a pasta que será criada e execute o comando “./configure“. Se houver mais alguma instalação pendente, ele mostra um erro, informando o nome do compilador ou biblioteca que está faltando.

$ cd bluez-utils-3.5/
$ ./configure

  • Concluindo, rode os comandos “make” e “make install”, que compilam e instalam o programa. Você pode rodar o comando “make” usando seu login de usuário, mas o “make install” precisa ser executado como root. No Ubuntu e no Kurumin você pode fazê-lo usando o sudo. Em outras distribuições, use o “su” para virar root:

$ make
$ sudo make install (ou su , make install)

Depois de terminar, faça o mesmo com o pacote “bluez-libs”, disponível na mesma página.

Para evitar problemas, sempre que precisar reinstalar estes pacotes, apague manualmente o conteúdo do diretório “/var/lib/bluetooth“, onde são armazenadas as chaves de encriptação dos dispositivos que já efetuaram conexões. Limpando a pasta, você pode começar de novo, definindo o PIN e fazendo o pairing com o celular:

# rm -rf /var/lib/bluetooth/*

Sobre o Autor

Redes Sociais:

Deixe seu comentĂĄrio

X