Transfert de fichiers en Bluetooth


Voici comment rendre le Raspberry en point d'accès Bluetooth afin de pouvoir par exemple transférer des photos provenant d'un smartphone ou d'une tablette Android


Chaque commande doit-être exécutée par le super-utilisateur. La ou les commandes sont précédées de la mention en tant qu’invité root#

Le transfert de fichier ne peut que se faire à l'aide d'une application installée sur le Raspberry qui fera office de serveur de fichier. Pour cela nous allons utiliser le logiciel obexpushd. D'ordre général le partage de fichiers en bluetooth s'effectue par le protocole OBEX, d'où l'utilisation de ce programme que nous allons faire tourner via systemd afin de réceptionner les photos, vidéos de vos périphériques

  • Installer obexpushd

root#

apt install obexpushd

  • Pour une question de compatibilité dont je n'ai pas encore approfondi, éditez le service bluetooth

root#

nano /etc/systemd/system/dbus-org.bluez.service

  • Rajoutez -C â la fin de la ligne ExecStart=.. dans la section [Service]

/etc/systemd/system/dbus-org.bluez.service

[Unit]
Description=Bluetooth service
Documentation=man:bluetoothd(8)
ConditionPathIsDirectory=/sys/class/bluetooth

[Service]
Type=dbus
BusName=org.bluez
ExecStart=/usr/lib/bluetooth/bluetoothd -C
NotifyAccess=main
#WatchdogSec=10
#Restart=on-failure
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
LimitNPROC=1
ProtectHome=true
ProtectSystem=full

[Install]
WantedBy=bluetooth.target
Alias=dbus-org.bluez.service

  • Création du dossier qui sera celui qui réceptionne les fichiers envoyés

root#

mkdir /bluetooth

  • Création d'un service systemd pour faire fonctionner de manière permanente le serveur OBEX précédemment installé

root#

nano /etc/systemd/system/obexpush.service

nano /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 # Ecoute sur le port 23, vérifiez que celui-ci ne soit pas déjà utilisé.
Restart = always # Permet de réactiver le service en cas d'erreur

[Install]
WantedBy=multi-user.target

  • Validation des paramètres

root#

systemctl daemon-reload
systemctl enable obexpush
systemctl start obexpush

  • Le status du service doit renvoyer ce log par un joli point vert

systemctl status obexpush

● obexpush.service - OBEX Push service
   Loaded: loaded (/etc/systemd/system/obexpush.service; enabled; vendor preset: en
   Active: active (running) since Fri 2019-07-26 08:56:16 CEST; 5h 41min ago
 Main PID: 572 (obexpushd)
   CGroup: /system.slice/obexpush.service
           └─572 /usr/bin/obexpushd -B23 -o /bluetooth -n
           


Procédons maintenant à l'appareillage du Raspberry à votre périphérique. Chez moi pour ce dernier; il s'agit d'une tablette Android (8.1)

  • lancez le cli du bluetooth

root#

bluetoothctl

  • On repère d'abord le hostname bluetooth du Raspberry qui est dans mon cas : YunoHost/weblib.re

bluetoothctl

[NEW] Controller B8:27:EB:50:B7:A1 (YunoHost/weblib.re) [default]

  • Se mettre en mode découverte afin que le Raspberry soit détecté

[bluetoothctl]#

discoverable on

bluetoothctl

Changing discoverable on succeeded
[CHG] Controller B8:27:EB:50:B7:A1 Discoverable: yes

  • Et maintenant on a 2 minutes pour procéder à l'appareillage
  1. Effectuer la recherche
  2. Sélectionner le Raspberry

bluetoothctl

[NEW] Device 34:8A:7B:D9:5E:55 Galaxy Tab A (2016)
....
[CHG] Device 34:8A:7B:D9:5E:55 ServicesResolved: yes
[CHG] Device 34:8A:7B:D9:5E:55 Paired: yes


A présent vous n'avez plus qu'à partager vos fichiers en bluetooth vers le Raspberry. Vous pourrez ensuite les récupérer dans le dossier /bluetooth.

Attention toutefois ce dossier a les droits root. Configurez éventuellement les permissions en cas d'accès depuis un autre compte utilisateur.