D'abord, vous devez apt install bluez-tools obexpushd
.
Pour envoyer et recevoir des fichiers, vous devez d'abord configurer et coupler les appareils.
INSTALLER
d'Arch Wiki - bluetooth :
Bluetoothctl
Démarrez la bluetoothctl
commande interactive. Là, on peut entrer help
pour obtenir une liste des commandes disponibles.
- Mettez le contrôleur sous tension en entrant
power on
. C'est désactivé par défaut.
- Entrez
devices
pour obtenir l'adresse MAC de l'appareil avec lequel vous souhaitez vous coupler.
- Entrez le mode de découverte de périphérique avec la
scan on
commande si le périphérique n'est pas encore sur la liste.
- Allumez l'agent avec
agent on
.
- Entrez
pair MAC Address
pour faire l'appariement (la complétion de l'onglet fonctionne).
- Si vous utilisez un appareil sans code PIN, il peut être nécessaire d'approuver manuellement l'appareil avant qu'il puisse se reconnecter avec succès. Entrez
trust MAC Address
pour le faire.
- Enfin, utilisez
connect MAC_address
pour établir une connexion.
Les deux dernières puces ne sont pas nécessaires pour la partie d'envoi d'un transfert de fichier, mais vous en avez besoin connect
pour la partie de réception.
Un exemple de session peut ressembler à ceci:
# 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
Pour rendre les modifications permanentes et pour que l'appareil soit actif après un redémarrage, une udev
règle est nécessaire:
/etc/udev/rules.d/10-local.rules
# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig %k up"
Conseil : remplacez KERNEL=="hci0"
par KERNEL=="hci[0-9]*"
pour faire correspondre toutes les interfaces BT.
Après un cycle de suspension / reprise, l'appareil peut être allumé automatiquement à l'aide d'un service systemd personnalisé:
/etc/systemd/system/[email protected]
[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
Activez une instance de l'unité à l'aide du nom de votre appareil Bluetooth, par exemple [email protected]
.
Maintenant, vos appareils sont couplés. Vérifiez que vous pouvez voir l'autre avec bt-device -l
.
ENVOYER
Ensuite, vous devez envoyer votre systemd
infrastructure pour que l'envoi fonctionne, sinon vous obtenez l'erreur suivante:
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.
Apportez les systemd
modifications nécessaires avec
systemctl --user start obex
sudo systemctl --global enable obex
Cela garantit que vous pouvez envoyer des fichiers. Un sudo
également en première ligne échouera !
Vous pouvez envoyer des fichiers maintenant par bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2
. Si un transfert se bloque à 100%, a le ctrlcfinalise (ou abandonne plus tôt).
Pour connaître le nom de votre appareil (12: 34: 56: 78: 9A: BC), vous pouvez émettre bt-device -l
.
RECEVOIR
du forum Raspberry Pi :
Nous voulons mettre en place un serveur push OBEX, c'est pourquoi obexpushd
il fallait.
L'indicateur de compatibilité sur le démon Bluetooth est nécessaire, vous devez éditer /etc/systemd/system/dbus-org.bluez.service
avec l'éditeur de votre choix en ajoutant l' -C
indicateur à la fin de la ExecStart=
ligne. Ça devrait ressembler à ça:
ExecStart=/usr/lib/bluetooth/bluetoothd -C
Redémarrez ou redémarrez le service avec sudo systemctl daemon-reload
après la modification. Choisissez un répertoire spécifique où les fichiers reçus sont placés, par exemple par sudo mkdir /bluetooth
.
Démarrez le serveur avec sudo obexpushd -B -o /bluetooth -n
, il devrait répondre avec:
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
Si cela ne fonctionne pas, et vous obtenez:
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
cela peut être dû au fait qu'un autre démon ou programme en cours d'exécution occupe le canal rfcomm 9 qui obexpushd
utilise par défaut. Dans ce cas, changez le canal en 23 comme ceci:
sudo obexpushd -B23 -o /bluetooth -n
pour utiliser le canal 23.
Une fois que vous êtes en obexpushd
cours d'exécution, ouvrez une deuxième fenêtre de terminal. Vous pouvez vérifier que le service OBEX est enregistré auprès de
sudo sdptool browse local
Il devrait énumérer (au canal 23 dans ce cas), entre autres, ceci:
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
Dans cette fenêtre, alors qu'il obexpushd
est toujours en cours d'exécution, utilisez bluetoothctl
pour définir discoverable on
. Associez maintenant à partir de votre autre appareil. L'appairage DOIT être fait pendant qu'il obexpushd
est en cours d'exécution, sinon l'autre appareil ne reconnaîtra pas que le service est disponible. Si le téléphone est déjà couplé, supprimez-le de votre autre appareil, utilisez-le bluetoothctl
pour le supprimer de l'ordinateur Ubuntu, puis reconnectez-le.
Après vous être connecté (le dernier point de la liste ci-dessus), vous devriez pouvoir recevoir des fichiers. Ils apparaîtront dans le /bluetooth
répertoire. Notez qu'ils appartiendront à root, vous aurez donc besoin de sudo pour y accéder. Ou vous pouvez faire un chmod 0777 /bluetooth
pour un répertoire d'échange public, car l'authentification Bluetooth est basée sur l'appareil et non sur l'utilisateur de toute façon.
Afin d'automatiser la commande obexpushd, créez le fichier /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
Ensuite, définissez cela pour démarrer automatiquement avec
sudo systemctl enable obexpush
Après un redémarrage ou un redémarrage du service avec sudo systemctl daemon-reload
, vous devriez pouvoir envoyer et recevoir des fichiers dans les deux sens maintenant.
N'oubliez pas de connecter les appareils lorsque vous essayez de recevoir des fichiers.
/etc/systemd/system/dbus-org.bluez.service
est très probablement un lien symbolique vers/lib/systemd/...
, et vous ne voulez pas modifier celui-ci. Vous devez utiliser un remplacement: créez le/etc/systemd/system/dbus-org.bluez.service.d
répertoire et placez-y un fichier se terminant par.conf
(commeadd-compat-flag.conf
), contenant uniquement:[Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C
(avec des