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:
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