Innanzitutto, è necessario apt install bluez-tools obexpushd
.
Per inviare e ricevere file, devi prima configurare e associare i dispositivi.
IMPOSTARE
da Arch Wiki - bluetooth :
Bluetoothctl
Avvia il bluetoothctl
comando interattivo. Ci si può inserire help
per ottenere un elenco di comandi disponibili.
- Accendere il controller accedendo
power on
. È spento per impostazione predefinita.
- Immettere
devices
per ottenere l'indirizzo MAC del dispositivo con cui eseguire l'accoppiamento.
- Accedere alla modalità di rilevamento del dispositivo con
scan on
comando se il dispositivo non è ancora nell'elenco.
- Attiva l'agente con
agent on
.
- Invio
pair MAC Address
per eseguire l'associazione (il completamento della scheda funziona).
- Se si utilizza un dispositivo senza PIN, potrebbe essere necessario fidarsi manualmente del dispositivo prima che possa riconnettersi correttamente. Entra
trust MAC Address
per farlo.
- Infine, utilizzare
connect MAC_address
per stabilire una connessione.
Gli ultimi due punti elenco non sono necessari per la parte di invio di un trasferimento di file, ma è necessario il connect
successivo per la parte di ricezione.
Una sessione di esempio può apparire così:
# 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
Per rendere permanenti le modifiche e per rendere attivo il dispositivo dopo il riavvio, udev
è necessaria una regola:
/etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig %k up"
Suggerimento : sostituire KERNEL=="hci0"
con KERNEL=="hci[0-9]*"
per abbinare tutte le interfacce BT.
Dopo un ciclo di sospensione / ripresa, il dispositivo può essere acceso automaticamente utilizzando un servizio di sistema personalizzato:
/etc/systemd/system/bluetooth-auto-power@.service
[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
Abilitare un'istanza dell'unità utilizzando il nome del dispositivo Bluetooth, ad esempio bluetooth-auto-power@hci0.service
.
Ora i tuoi dispositivi sono associati. Verifica di poter vedere l'altro con bt-device -l
.
SPEDIRE
Successivamente, è necessario inviare l' systemd
infrastruttura affinché l'invio funzioni, altrimenti viene visualizzato il seguente errore:
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.
Apporta le systemd
modifiche necessarie con
systemctl --user start obex
sudo systemctl --global enable obex
Questo ti assicura di poter inviare file. A sudo
anche nella prima riga fallirà !
Puoi inviare i file ora tramite bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2
. Se un trasferimento si blocca al 100%, ctrlclo finalizza (o si interrompe in precedenza).
Per conoscere il nome del dispositivo (12: 34: 56: 78: 9A: BC), è possibile emettere bt-device -l
.
RICEVERE
dal forum Raspberry Pi :
Vogliamo impostare un server push OBEX, ecco perché obexpushd
era necessario.
È necessario il flag di compatibilità sul demone Bluetooth, è necessario modificarlo /etc/systemd/system/dbus-org.bluez.service
con l'editor di propria scelta aggiungendo il -C
flag alla fine della ExecStart=
riga. Dovrebbe sembrare come questo:
ExecStart=/usr/lib/bluetooth/bluetoothd -C
Riavvia o riavvia il servizio con sudo systemctl daemon-reload
dopo la modifica. Scegliere una directory specifica in cui vengono inseriti i file ricevuti, ad esempio da sudo mkdir /bluetooth
.
Avvia il server con sudo obexpushd -B -o /bluetooth -n
, dovrebbe rispondere con:
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 non funziona e ottieni:
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
potrebbe essere perché hai un altro demone o programma in esecuzione che occupa il canale 9 di rfcomm che obexpushd
usa di default. In questo caso, cambia il canale in 23 in questo modo:
sudo obexpushd -B23 -o /bluetooth -n
per usare il canale 23.
Una volta obexpushd
avviato, apri una seconda finestra del terminale. È possibile verificare che il servizio OBEX sia registrato
sudo sdptool browse local
Dovrebbe elencare (nel canale 23 in questo caso), tra l'altro, questo:
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
In quella finestra, mentre obexpushd
è ancora in esecuzione, utilizzare bluetoothctl
per impostare discoverable on
. Ora accoppia dall'altro dispositivo. L'associazione DEVE essere eseguita mentre obexpushd
è in esecuzione o l'altro dispositivo non riconoscerà che il servizio è disponibile. Se il telefono è già associato, rimuoverlo dall'altro dispositivo, utilizzare bluetoothctl
per rimuoverlo dal computer Ubuntu e ricollegarlo.
Dopo la connessione (l'ultimo punto elenco dall'elenco sopra), dovresti essere in grado di ricevere file. Appariranno nella /bluetooth
directory. Nota che saranno di proprietà di root, quindi avrai bisogno di sudo per accedervi. Oppure puoi fare una chmod 0777 /bluetooth
per una directory di scambio pubblico, poiché l'autenticazione bluetooth è basata sul dispositivo e non comunque basata sull'utente.
Per automatizzare il comando obexpushd, creare il file /etc/systemd/system/obexpush.service
[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
Quindi, impostalo per l'avvio automatico con
sudo systemctl enable obexpush
Dopo il riavvio o il riavvio del servizio con sudo systemctl daemon-reload
, ora dovresti essere in grado di inviare e ricevere file in entrambe le direzioni.
Non dimenticare di connettere i dispositivi quando si tenta di ricevere file.