Bluetooth em GNU/Linux com Debian

Publicado: 05/04/2015 em Escritorio, Hardware, Linux, Multimidia, Serviços IP
Tags:,

1. Introdução
Esse post foi originalmente testando em uma máquina 64bits com sistema operacional GNU/Linux, utilizando a distribuição Debian 7 (wheezy). Modelo da máquina: LG R590.

1.1 Bluetooth
Logo do bluetoothO Bluetooth: é um padrão aberto de comunicação sem fios para curtas distâncias, baseando-se num modo de funcionamento mestre/escravo. Utiliza a faixa de frequência centrada em 2.45MHz (nos EUA a faixa varia de 2400 a 2483,5 MHz; no Japão varia de 2400 a 2500 MHz), que é chamada de ISM (ISM – Industrial, Scientific, Medical), reservada por acordo internacional para o uso em dispositivos industriais, científicos e médicos. O Bluetooth tem como principal objetivo substituir os cabos, permitindo que celulares, palmtops, mouses, headsets, entre outros, troquem dados entre sí e com o computador, sem precisar de cabos. A velocidade de transmissão no Bluetooth é baixa, alcançando na versão Bluetooth 3.0 (lançada em abril de 2009) o máximo de 24Mbps. Seu alcance é de 10 metros (para os Bluetooth classe 2, o mais comum entre os dispositivos móveis) e 100 metros (para os de classe 1, utilizado industrialmente), em função principalmente da baixa potência do sinal. Para os Bluetooth classe 2, por exemplo, a potência é de cerca de 2,5 miliwatt (muito pequena comparada aos celulares mais potentes que podem transmitir um sinal de 3 watts).

O Bluetooth ainda é uma tecnologia relativamente nova e em grande crescimento. Para se ter uma idéia, vejamos uma pequena linha do tempo com relação ao surgimento de suas primeiras aplicações:
– 2000 – Primeiro celular
– 2001 – Primeiro laptop
– 2002 – Primeira câmera digital
– 2003 – Primeiro mp3-player
– 2004 – Primeiro fone de ouvidos estéreo
– 2006 – Primeiro relógio
– 2007 – Primeira televisão

Comunicação com salto de frequência
Wireless towerUm device Bluetooth “master” pode se comunicar com até sete outros devices, e sem ocorrer interferências entre eles. Isso é devido ao padrão Bluetooth utilizar uma técnica chamada salto de frequência de espalhamento espectral (FHSS – Frequency Hopping Spread Spectrum), que praticamente impossibilita que mais de um dispositivo transmita na mesma frequência ao mesmo tempo. O FHSS é um método de transmitir sinais de rádio chaveando rapidamente uma portadora entre muitos canais de frequência, utilizando-se uma pseudorandomica sequência conhecida tanto pelo transmissor quanto pelo receptor. Essa técnica consiste em recortar a banda de frequência (2.402 – 2.485 GHz) em 79 canais (chamados hops ou saltos) de uma largura de 1MHz cada um. Assim, um dispositivo utiliza em cada instante uma destas 79 freqüências individuais escolhidas aleatoriamente, mudando de uma para outra com regularidade. No caso do bluetooth, os transmissores alteram as freqüências 1.600 vezes por segundo, o que significa que muitos dispositivos podem utilizar totalmente uma fatia limitada do espectro de rádio. Ou seja, a transmissão é alternada entre slots para transmitir e slots para receber, onde estes slots são canais divididos em períodos de 625 µs (microssegundos). Cada salto de frequência é ocupado por um slot, fazendo com que se obtenha os 1.600 saltos em 1 segundo.

Ilustração FHSS
Como todos os transmissores bluetooth usam automaticamente a transmissão de espalhamento espectral, é improvável que dois transmissores compartilhem a mesma frequência simultaneamente (a probabilidade de interferência com outro sistema Bluetooth é menor que 1.5%). Na verdade, qualquer interferência em uma freqüência particular durará somente uma fração de segundo. Mesmo assim, o sistema é inteligente suficiente para perceber que se um dos canais estiver com interferência, a Piconet retira o canal da lista dos possíveis canais do FHSS.

Princípio de comunicação
Os sistemas bluetooth criam uma rede de área pessoal (PAN – Personal Area Network), ou Piconet. Uma Piconet é uma rede de computadores a qual interliga um grupo de dispositivos sem fio utilizando protocolos de tecnologia Bluetooth. O grupo de dispositivos pode ser de até oito dispositivos (1 “mestre” e 7 “escravos”) ocupando o mesmo canal físico (sincronizado com um relógio comum e uma sequência de salto). Uma Piconet inicia com com dois dispositivos conectados, e pode crescer até oito dispositivos conectados. Assim que uma Piconet é estabelecida, os dispositivos saltam entre as frequências através de uma sequência pseudo-aleatória, em uníssono, permanecendo em contato uns com os outros. Após um dispositivo Bluetooth ter sido adicionado a uma Piconet, cada dispositivo é atribuído a um período de tempo específico para transmitir (slot de tempo) e eles não colidem ou se sobrepõem dentro da mesma Piconet. Cada dispositivo bluetooth pode fazer parte de várias “Piconets” ao mesmo tempo, transmitindo e recebendo dados. Isto significa que as possibilidades de conexão entre dispositivos é quase ilimitada.

Bluetooth mestre e escravo

Exemplos de topologias de redes Bluetooth Piconet mestre/escravo.

O Bluetooth permite o envio de dados ponto-a-ponto, envolvendo duas unidades Bluetooth apenas, ou ponto-a-multiponto, envolvendo mais de duas unidades.

Um dispositivo que deseja se conectar a uma Piconet já existente pode emitir um sinal denominado Inquiry. Os dispositivos que recebem o sinal respondem com um pacote FHS (Frequency Hopping Synchronization), informando a sua identificação e os dados de sincronização da Piconet. Com base nestas informações, o dispositivo pode então emitir um sinal chamado Page para estabelecer uma conexão com outro dispositivo.

Dentro de um mesmo espaço físico podem existir várias Piconet. Cada Piconet salta de frequência aleatoriamente através das frequências disponíveis, de modo que todas as Piconets são completamente separadas umas das outras. Dentro de cada uma das redes, seus dispositivos conhecem os endereços dos transmissores que devem ouvir e os endereços dos receptores com quem devem falar. Como cada rede altera sua freqüência de operação milhares de vezes por segundo, é improvável que duas redes quaisquer compartilhem a mesma frequência simultaneamente. Caso isso ocorra, a interferência resultante durará apenas uma fração de segundo e o software concebido para corrigir tais erros descartará as informações conflitantes e prosseguirá com a atividade da rede.

Configurando a conexão
Cada dispositivo é dotado de um número único de 48 bits que serve de identificação, no formato 00:00:00:00:00:00. Esses número é denominado “Endereço de Bluetooth” (Bluetooth Address) e são únicos e exclusivos para cada dispositivo fabricado, assim como o endereço MAC das placas de rede. Esta identificação é comumente abreviada como BD_ADDR. Os endereços geralmente não são mostrados na interface gráfica do usuário, e no seu lugar aparecerá o nome corriqueiro (legível) do dispositivo, que pode ser configurado pelo proprietário. Esse nome aparecerá na lista de dispositivos disponíveis de qualquer aparelho que efetuar uma varredura.

Qualquer dispositivo Bluetooth irá transmitir os seguintes pacotes de informações por demanda:

  • Nome do dispositivo
  • Classe do dispositivo
  • Lista de serviços disponíveis
  • Informações técnicas, como por exemplo, características, fabricante, especificação Bluetooth e configuração de clock.

Qualquer dispositivo pode realizar uma varredura para encontrar outros dispositivos disponíveis para conexão, e qualquer dispositivo pode ser configurado para responder ou não a essas requisições. O uso dos dispositivos requer pareamento (conhecido também como “emparelhamento”) ou aceitação da conexão pelo proprietário. Alguns dispositivos podem se conectar apenas com um dispositivo por vez, e a conexão a esses dispositivos impede que eles possam receber requisições de outros ou que fiquem visíveis para outros aparelhos que estiverem realizando varredura.

Vinculação e Pareamento

Quando dois dispositivos Bluetooth partilham uma afinidade especial pelo outro, eles podem ser vinculados entre si. Dispositivos vinculados estabelecem automaticamente uma conexão sempre que estiverem perto o suficiente. Por exemplo, o Bluetooth do celular imediatamente se conecta ao sistema de Bluetooth do automóvel porque eles compartilham um vínculo. Nenhuma interação do usuário é requerida!

Vínculos são criados através de um procedimento realizado uma única vez, procedimento esse chamado de pareamento (ou emparelhamento). Quando os dispositivos alcançam o pareamento, eles compartilham seus endereços, nomes e perfis, e, geralmente, os armazena em memória não volátil para não perder estas informações. Também compartilham uma chave secreta comum, o que lhes permite a vinculação sempre que eles estiverem juntos no futuro.

O pareamento geralmente requer um processo de autenticação, onde os usuários devem validar a conexão entre os dispositivos através de uma senha secreta (passkey). O dispositivo que deseja se comunicar com um outro dispositivo deve informar uma senha que também deve ser digitada no outro dispositivo. O fluxo do processo de autenticação varia e geralmente depende da capacidade da interface dos dispositivos. Algumas vezes o pareamento envolve combinar códigos numéricos de 6 dígitos. Já em versões legadas do Bluetooth (v2.0 e anteriores), o processo de pareamento envolve digitar um código comum em cada dispositivo, o “PIN code”. O “PIN code” pode variar em tamanho e complexidade desde quatro números (por exemplo “0000” or “1234”), até uma cadeia de 16 caracteres alfanuméricos.

Depois de parear, os dispositivos guardam a identificação destes pareamentos e se conectam de forma automática todas as próximas vezes. Como o endereço Bluetooth é permanente, o pareamento é preservado, mesmo se o nome de algum dos dispositivos for trocado. Pareamentos podem ser apagados (e assim ter as autorizações de conexão removidas) a qualquer momento. A grande maioria dos dispositivos exigem pareamento antes de permitir o uso dos seus serviços pela primeira vez (como se fosse uma regra geral).

O processo de pareamento do Bluetooth é assim resumido:

  • Dispositivo Bluetooth procura outros dispositivos Bluetooth: para ser detectado por outros dispositivos Bluetooth, o primeiro dispositivo, dispositivo 1 deve ser ajustado para o modo detectável – o que permitirá que outros dispositivos Bluetooth na vizinhança detectem a sua presença e tentwm estabelecer uma conexão.
  • Dois dispositivos Bluetooth encontram um ao outro: quando os dois dispositivos, o dispositivo 1 e o dispositivo 2 encontram um ao outro, é possível detectar o que eles são. Normalmente, o dispositivo detectável vai indicar que tipo de dispositivo ele é – celular, fone de ouvido, etc., juntamente com o seu “Bluetooth device name”. Esse nome pode ser previamente atribuído pelo usuário, ou ele será aquele atribuído durante a sua fabricação.
  • Solicitar Senha: muitas vezes a senha padrão é definido como “0000”, mas é aconselhável a utilização de uma outra em razão de segurança.

No entanto, muitos aparelhos mais sofisticados – smartphones e computadores – ambos os usuários devem concordar com um código o qual deve obviamente ser o mesmo para ambos.

  • Dispositivo 1 envia chave de acesso (passkey): o dispositivo de inicialização, dispositivo 1 envia a senha (passkey) que foi inserida para o Dispositivo 2.
  • Dispositivo 2 envia chave de acesso (passkey): o dispositivo 2 envia a mesma senha para o dispositivo 1, que por sua vez verifica se elas coincidem. Havendo a coincidência, um par de devices confiáveis é formado, ou seja, o pareamento Bluetooth está estabelecido.
  • A comunicação é estabelecida: uma vez que o pareamento Bluetooth tenha ocorrido, dados podem ser trocados entre os dispositivos.

Uma vez que o pareamento Bluetooth tenha sido estabelecido, ele será lembrado pelos dispositivos, que poderão voltar a se conectar no futuro sem intervenção do usuário. Se necessário, a relação de pareamento Bluetooth poderá ser removido pelo usuário em um momento mais tarde, se requerido.

Suporte do Linux ao Bluetooth
O Linux tem suporte nativo a Bluetooth desde a versão do kernel 2.4.6.

1.2 USB
Logo da USBUniversal Serial Bus (USB): é um padrão da indústria desenvolvido em meados da década de 1990 que define os cabos, conectores e protocolos de comunicação utilizados em um barramento para a conexão, comunicação e fornecimento de energia entre computadores e dispositivos eletrônicos. USB foi projetado para padronizar a conexão entre periféricos (incluindo teclados, dispositivos apontadores, câmeras digitais, impressoras, leitores multimédia portáteis, unidades de disco e adaptadores de rede) e computadores pessoais, tanto para se comunicar como para o fornecimento de energia elétrica. Tornou-se lugar-comum em outros dispositivos, como smartphones, PDAs e consoles de videogame. USB tem vindo a substituir uma variedade de interfaces anteriores, como portas seriais e paralelas, bem como carregadores de alimentação externos para dispositivos portáteis.

2. Identificando se existe interface bluetooth na máquina
Em equipamentos tipo notebooks, normalmente a interface bluetooth está conectada ao barramento usb. O mais prático é utilizar o comando lsusb, que é um utilitário para mostrar as informações dos barramentos USB existentes na máquina e os dispositivos conectados a ele.

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 18e8:6252 Qcom
Bus 002 Device 006: ID 1a2c:0002
Bus 002 Device 004: ID 1c4f:0003 SiGma Micro HID controller
Bus 002 Device 005: ID 0408:1321 Quanta Computer, Inc.

Pela resposta acima, ainda não é possível identificar se existe um dispositivo bluetooth na máquina. Vamos tentar obter algo um pouco mais detalhado e legível, usar o comando lsusb da seguinte maneira:
$ lsusb -v | grep -E '\<(Bus|iProduct|bDeviceClass|bDeviceProtocol)' 2>/dev/null
Bus 001 Device 003: ID 18e8:6252 Qcom
bDeviceClass 224 Wireless
bDeviceProtocol 1 Bluetooth
iProduct 2
(Bus Powered)

Agora sim, identificamos então que a máquina possui um device bluetooth, com referência 18e8:6252. Onde se tem:
18e8 = vendorID: Qualcom (como pode ser visto através do The USB ID Repository)
6252 = deviceID

Obs: para um entendimento mais detalhado destes pares de referência a dispositivos, ler o post “Entendendo os drivers Linux para arquitetura de barramento PCI“.

3. Pacotes a serem instalados
Pacotes principais

  • bluez: ferramentas e daemons do sistema para usar com dispositivos bluetooth.
  • gnome-bluetooth: disponibiliza ferramentas para gerir e manipular dispositivos bluetooth especialmente para o ambiente de trabalho GNOME e Xfce. A motivação principal para escolha deste pacote (em vez do pacote bluetooth) foi em função de se ter o ícone do bluetooth no gerenciador gráfico (“Desktop Environment”), tanto para o GNOME como para o Xfce. Este pacote faz a disponibilização das seguintes ferramentas:

    • /usr/bin/bluetooth-applet : disponibiliza o ícone do bluetooth (com acesso as funções do bluetooth e avisar ao usuário para uma chave de acesso – PIN – ao bluetooth) no gerenicador gráfico Xfce ou Gnome.
    • /usr/bin/bluetooth-sendto : envia arquivos para um “device” remoto (os dispositivos têm que estar pareados para isto).
    • /usr/bin/bluetooth-wizard : procura por novos “devices” para serem pareados.

Pacotes complementares

  • blueman: Graphical bluetooth manager. Mas só se for desejável pelo usuário uma interface gráfica. No Xfce sua entrada aparecerá nem Menu de Aplicativos –> Configurações –> Gerenciador Bluetooth
  • bluetooth: pacote de suporte ao bluetooth (não necessário se pacote gnome-bluetooth for instalado).

Para verificar quais pacotes estão instalados
Para verficiar quais pacotes estão instalados, usar o comando apt-cache. Por exemplo:
$ apt-cache policy gnome-bluetooth

4. Configurações
Arquivos de configurações estão na pasta /etc/bluetooth/

5. Comandos básicos via terminal
a) Parar, iniciar e reiniciar o Blootooth
$ /etc/init.d/bluetooth restart | start | stop

b) Verificar se o bluetooth está em execução normal
$ /etc/init.d/bluetooth status
[ ok ] bluetooth is running

c) Comandos via hciconfig
O aplicativo hciconfig é utilizado para configurar “Bluetooth devices” (celulares, mouses…).
hciX (exemplos: hci0; hci1) é o nome de um “Bluetooth device” instalado no sistema. Para uma lista completa de comandos possíveis com o hciconfig use o help que está disponível: "hciconfig -h“.

Para verificar se o adaptador Bluetooth foi detectado corretamente, utilize o seguinte comando

$ /usr/sbin/hciconfig
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:0D:F0:81:FA:89  ACL MTU: 1021:7  SCO MTU: 64:1
	UP RUNNING PSCAN 
	RX bytes:74443 acl:418 sco:0 events:1121 errors:0
	TX bytes:281441 acl:667 sco:0 commands:345 errors:0

Vemos pela resposta ao comando que o nome do dispositivo local onde o adaptador bluetooth foi instalado é hci0, vemos que o Bluetooth está ativo (UP RUNNING) e é mostrada a identificação de seu Bluetooth Address (“BD Address”). Caso o bluetooth estivesse parado a indicação seria DOWN.

Para informações mais completa, podemos usar o seguinte comando alternativo:

$ /usr/sbin/hciconfig -a
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:0D:F0:81:FA:89  ACL MTU: 1021:7  SCO MTU: 64:1
	UP RUNNING PSCAN ISCAN 
	RX bytes:45471 acl:25 sco:0 events:353 errors:0
	TX bytes:1881 acl:25 sco:0 commands:118 errors:0
	Features: 0xff 0xff 0x8f 0xfe 0x9b 0xff 0x79 0x83
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF PARK 
	Link mode: SLAVE ACCEPT 
	Name: 'maracatu-0'
	Class: 0x420100
	Service Classes: Networking, Telephony
	Device Class: Computer, Uncategorized
	HCI Version: 2.1 (0x4)  Revision: 0x542a
	LMP Version: 2.1 (0x4)  Subversion: 0x420e
	Manufacturer: Broadcom Corporation (15)

Para Ativar o o adaptador Blootooth:
# hciconfig hci0 up

Para escanear dispositivos blootooth existentes

$ hcitool scan
  Scanning ...
	  2C:54:CF:00:8B:1B	  device-1
	  05:36:6B:40:33:12       device-2


Foram detectados dois devices remotos (por exemplo, poderia ter sido um celular e um mouse), e seus BD Address estão mostrados.

6. Logs
Para acompanhar os logs do bluetooth dois bons comandos são:
# tail -f /var/log/syslog
# grep blue /var/log/syslog|more

7. Usando o Xfce
a) Mostrar o ícone do Bluetooth na barra do Gnome ou do Xfce (caso ainda não esteja visível):
$ bluetooth-applet &

Outros comandos:
bluetooth-wizard é parte do pacote “bluez”. Irá exibir um assistente para configurar dispositivos Bluetooth.
$ bluetooth-wizard

b) Mostrar automaticamente o ícone do bluetooth toda vez que o gerenciador gráfico (“Desktop Environment”) Xfce for iniciado:
Configurações -> Sessão e Inicialização -> Inicio automático de aplicativo e marcar "Gerenciador Bluetooth".

8. Apagar as chaves de encriptação
As chaves de encriptação dos dispositivos que já efetuaram pareamento com o computador ficam armazenados no histórico do sistema, armazenadas na pasta “/var/lib/bluetooth“. Isso evita a necessidade de um novo processo de pareamento com estes aparelhos já pareados anteriormente. Limpando a pasta, apaga-se toda a memória de pareamentos anteriores:

# rm -r /var/lib/bluetooth/*
# /etc/init.d/bluetooth restart

9. Transferir arquivo para um outro dispositivo via linha de comando
Após parear os dispositivos, é só identificar o BD Address do destino e fazer:
$ bluetooth-sendto --device=2C:54:CF:00:8B:1B pasta/meu_arquivo.jpg
Para identificar o BD Address do dispositivo pareado pode-se utilizar o comando “hcitool scan” conforme explicado anteriormente.

Referências:
1- Funcionamento do bluetooth
2- Bluetooth
3- Como conectar fones bluetooth no Debian por linha de comando
4- Bluetooth no Linux, Guia do Hardware
5- Using Bluetooth in a Debian system
6- Bluetooth: Pairing and bonding
7- Table of USB device supported by debian
8- List of USB ID’s
9- Bluetooth: transferring and receiving files under Ubuntu
10- Pareando o Ubuntu com um celular usando o bluetooth

Anúncios
comentários
  1. ramonroberth disse:

    Muito boa essa matéria! Com essa dica do bluetooth-wizard eu consegui instalar um teclado bluetooth. Valeu mesmo! Eu uso o Ubuntu 14.04 com o kde de interface gráfica. Agora ficou top mesmo! Meus parabéns!!!

Deixe um comentário, pois isto é muito motivante para continuarmos este trabalho

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s