Transferir Arquivos Por Bluetooth Pelo Terminal

Introdução

Recentemente recebi uma galera aqui em casa e após escutarmos algumas músicas, eles ficaram interessados em algumas da minha coleção. Assim, eles pediram para que eu mandasse essas músicas via bluetooth para seus celulares. Como era muita gente e eu não queria enviar o mesmo arquivo para cada pessoa sequencialmente, a solução foi procurar na internet algum meio de enviar arquivos por bluetooth usando algum comando que poderia ser facilmente embutido em scripts.

O pacote bluez-gnome

Estou usando Fedora 16 e o dispositivo de bluetooth do meu notebook foi detectado e configurado automaticamente. O pacote bluez-gnome também já veio instalado não precisando de instalação.

Por causa disso não irei entrar em detalhes de como configurar um dispositivo bluetooth e para isso aconselho uma pesquisa rápida no google.

O comando bluetooth-sendto

O pacote bluez-gnome oferece o comando bluetooth-sendto que já faz o trabalho de enviar um arquivo para algum dispositivo bluetooth, seja ele num celular, notebook ou qualquer outro equipamento.

O primeiro passo para enviarmos um arquivo por bluetooth via terminal é fazer um scan e verificar quais dispositivos estão em nosso alcance. Para isso digite:

$ sudo hcitool scan

Estou fazendo meus testes com dois celulares já com o bluetooth ativado e a saída foi:

$ sudo hcitool scan
Scanning ...
00:1F:DE:CE:12:30 Nice
00:23:45:84:42:29 W580i

A string xx:xx:xx:xx:xx:xx é o identificador único do dispostivo de bluetooth do celular. Precisamos desse identificador para enviarmos nosso arquivo.

A sintaxe básica do comando bluetooth-sendto é:

$ bluetooth-sendto --device=xx:xx:xx:xx:xx:xx nomearquivo1 nomearquivo2 ...

Sendo:

  • -device=xx:xx:xx:xx:xx:xx : passamos após o ‘=’ o identificador retornado pelo scan feito acima.
  • nomearquivoN : é o nome do arquivo que desejamos enviar. O N indica que podemos enviar mais de um arquivo usando uma só instância de comando.

Sabendo disso, vamos enviar um arquivo para o primeiro celular encontrado. Para isso basta:

$ bluetooth-sendto --device=00:1F:DE:CE:12:30 nomedamusica.mp3

A seguinte tela irá aparecer:

Tela de processo de envio

Tela de processo de envio

Basta confirmar no dispositivo destino a transmissão para que ela ocorra normalmente.

OBS: Note que o celular em questão não precisa fazer o “pareamento” (é quando uma autenticação é necessária — você deve digitar uma senha, que geralmente é 1234). Em alguns casos temos que fazer o paring e as instruções para isso se encontram em [1].

Enviando arquivos paralelamente para vários dispositivos

Como contei no início do post, várias pessoas estavam interessadas na mesma música então nada mais ideal que todas elas recebam o mesmo arquivo no mesmo instante, ou seja, em paralelo. Para isso tive que bolar um pequeno script e seu código segue abaixo:

#!/bin/bash
# [carieazul.sh]
# Programa que envia arquivos para todos
# os dispositivos bluetooth no alcance
# do dispositivo fonte.
#
# [Autor]
# Daemonio (Marcos Paulo Ferreira)
# undefinido at gmail com
# https://daemoniolabs.wordpress.com
#
# Versao 1, Mon Feb  6 12:37:23 BRST 2012
#

# Voce deve ser root para executar esse script.
[ `whoami` != 'root' ] && echo 'Vire root antes de executar esse script.' && exit

# Testa a linha de comando
[ -z "$1" ] && echo '[uso] ./carieazul.sh [FILE...]' && exit

# Faz o scan e obtem a lista de enderecos
# dos dispositivos
echo '[+] Scaneando dispositivos... Espere...'
for BDADDR in `hcitool scan | sed '1d' | awk '{print $1}'`;
do
    bluetooth-sendto --device="$BDADDR" $* &
done
echo '[+] Arquivo(s) enviado(s).'

Várias instâncias do aplicativo bluetooth-sendto serão criadas e cada uma delas é responsável por uma transmissão. É bom notar que esses vários processos abertos poderão deixar seu notebook lerdo e em alguns casos até falhar certas transmissões, por isso cautela é imprescindível.

Conclusão

Esse post reinaugura o blog em 2012. Espero que gostem e qualquer crítica ou sugestão é sempre bem vinda.

Referências

[1] Configuring Bluetooth (Acessado em: Fevereiro/2012)
http://www.linuxquestions.org/linux/answers/Hardware/Bluetooth_Transferring_and_receiving_files_under_Ubuntu

[2] [gnome-bluetooth] gnome-obex-send obsolecence (Acessado em: Fevereiro/2012)
http://lists.usefulinc.com/pipermail/gnome-bluetooth/2008-January/001348.html

[3] Bluetooth file transfer in shell script, by Ralf (Acessado em: Fevereiro/2012)
http://askubuntu.com/questions/29486/bluetooth-file-transfer-in-shell-script

Deixe um comentário