Primeiro, você precisa apt install bluez-tools obexpushd
.
Para enviar e receber arquivos, você precisa configurar e parear os dispositivos primeiro.
CONFIGURAÇÃO
Bluetoothctl
Inicie o comando bluetoothctl
interactive. Lá pode-se inserir help
para obter uma lista de comandos disponíveis.
- Ligue a energia do controlador inserindo
power on
. Está desligado por padrão. - Insira
devices
para obter o endereço MAC do dispositivo com qual par. - Digite o modo de descoberta de dispositivo com o comando
scan on
se dispositivo ainda não está na lista. - Ativar o agente com
agent on
. - Insira
pair MAC Address
para fazer o pareamento (conclusão da tabulação). - Se estiver usando um dispositivo sem um PIN, pode ser necessário confiar manualmente dispositivo antes que ele possa se reconectar com sucesso. Coloque o código% para fazer isso.
- Finalmente, use
trust MAC Address
para estabelecer uma conexão.
Os dois últimos marcadores não são necessários para a parte de envio de uma transferência de arquivos, mas você precisa do connect MAC_address
mais tarde para a parte de recebimento.
Uma sessão de exemplo pode parecer assim:
# bluetoothctl
[NEW] Controller 00:10:20:30:40:50 pi [default]
[bluetooth]# agent KeyboardOnly
Agent registered
[bluetooth]# default-agent
Default agent request successful
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90 myLino
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes
[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no
[bluetooth]# connect 00:12:34:56:78:90
Attempting to connect to 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
Connection successful
Para tornar as alterações permanentes e para ativar o dispositivo após a reinicialização, é necessária uma regra connect
:
udev
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig %k up"
Dica : substitua /etc/udev/rules.d/10-local.rules
por KERNEL=="hci0"
para corresponder a todas as interfaces BT.
Após um ciclo de suspensão / retomada, o dispositivo pode ser ligado automaticamente usando um serviço systemd personalizado:
KERNEL=="hci[0-9]*"
[Unit]
Description=Bluetooth auto power on
After=bluetooth.service sys-subsystem-bluetooth-devices-%i.device suspend.target
[Service]
Type=oneshot
ExecStart=/usr/bin/hciconfig %i up
[Install]
WantedBy=suspend.target
Ative uma instância da unidade usando o nome do seu dispositivo Bluetooth, por exemplo, /etc/systemd/system/[email protected]
.
Agora, seus dispositivos estão emparelhados. Verifique se você pode ver o outro com [email protected]
.
ENVIAR
Em seguida, você precisa enviar sua infraestrutura bt-device -l
para o envio para o trabalho, caso contrário, você receberá o seguinte erro:
Acquiring proxy failed: Error calling StartServiceByName for org.bluez.obex: GDBus.Error:org.freedesktop.systemd1.LoadFailed: Unit dbus-org.bluez.obex.service failed to load: No such file or directory.
Faça as alterações necessárias de systemd
com
systemctl --user start obex
sudo systemctl --global enable obex
Isso garante que você pode enviar arquivos. Um systemd
também na primeira linha falhará !
Você pode enviar arquivos agora por sudo
. Se uma transferência trava em 100%, um ctrl c finaliza (ou aborta antes).
Para saber o nome do seu dispositivo (12: 34: 56: 78: 9A: BC), você pode emitir bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2
.
RECEBER
Queremos configurar um servidor de push OBEX, e é por isso que bt-device -l
foi necessário.
O sinalizador de compatibilidade no daemon Bluetooth é necessário, você precisa editar obexpushd
com o editor de sua escolha adicionando o sinal /etc/systemd/system/dbus-org.bluez.service
ao final da linha -C
. Deve ficar assim:
ExecStart=/usr/lib/bluetooth/bluetoothd -C
Reinicialize ou reinicie o serviço com ExecStart=
após a edição. Escolha um diretório específico onde os arquivos recebidos são colocados, por exemplo, por sudo systemctl daemon-reload
.
Inicie o servidor com sudo mkdir /bluetooth
, ele deve responder com:
obexpushd 0.11.2 Copyright (C) 2006-2010 Hendrik Sattler
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions.
Listening on bluetooth/[00:00:00:00:00:00]:9
Se isso não estiver funcionando, você terá:
obexpushd 0.11.2 Copyright (C) 2006-2010 Hendrik Sattler
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions.
BtOBEX_ServerRegister: Address already in use
net_init() failed
pode ser porque você tem outro daemon ou programa em execução que ocupa o canal 9 do rfcomm que sudo obexpushd -B -o /bluetooth -n
usa por padrão. Neste caso, mude o canal para 23 assim:
sudo obexpushd -B23 -o /bluetooth -n
para usar o canal 23.
Quando você obtiver obexpushd
em execução, abra uma segunda janela do terminal. Você pode verificar se o serviço OBEX está registrado com
sudo sdptool browse local
Deve listar (no canal 23, neste caso), entre outros, este:
Service Name: OBEX Object Push
Service Description: a free OBEX server
Service Provider: obexpushd
Service RecHandle: 0x10005
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 23
"OBEX" (0x0008)
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100
Nessa janela, enquanto obexpushd
ainda estiver em execução, use obexpushd
para definir bluetoothctl
. Agora pareie seu outro dispositivo. O emparelhamento DEVE ser feito enquanto discoverable on
estiver em execução ou o outro dispositivo não reconhecer que o serviço está disponível. Se o telefone já estiver emparelhado, remova-o do outro dispositivo, use obexpushd
para removê-lo do computador Ubuntu e faça o emparelhamento novamente.
Depois de se conectar (o último ponto de marcador da lista acima), você poderá receber arquivos. Eles aparecerão no diretório bluetoothctl
. Observe que eles serão de propriedade do root, então você precisará do sudo para acessá-los. Ou você pode fazer um /bluetooth
para um diretório de troca pública, já que a autenticação do bluetooth é baseada no dispositivo e não no usuário de qualquer maneira.
Para automatizar o comando obexpushd, crie o arquivo chmod 0777 /bluetooth
[Unit]
Description=OBEX Push service
After=bluetooth.service
Requires=bluetooth.service
[Service]
ExecStart=/usr/bin/obexpushd -B23 -o /bluetooth -n
[Install]
WantedBy=multi-user.target
Em seguida, defina para autostart com
sudo systemctl enable obexpush
Após a reinicialização ou reinicialização do serviço com /etc/systemd/system/obexpush.service
, você poderá enviar e receber arquivos nas duas direções agora.
Não se esqueça de conectar os dispositivos ao tentar receber arquivos.