Partager des fichiers entre 2 ordinateurs via Bluetooth depuis le terminal

8

J'ai deux ordinateurs adjacents, l'un fonctionnant sous Linux avec le mode console et l'autre avec Windows 10. Je souhaite transférer des fichiers entre les deux, et ils ont tous les deux des capacités Bluetooth. Au début, j'ai pensé à brancher une clé USB et à effectuer la procédure suivante:

fdisk -l
mount /dev/sdc1 /media
mkdir /media/myfiles01
cp ~/file1 ~/file2 /media/myfiles01
cd ~
umount /dev/sdc1

Et puis, je voudrais retirer le périphérique USB et le brancher sur l'autre ordinateur, et y transférer les fichiers; Mais j'ai pensé, pourquoi ne pas utiliser le Bluetooth pour partager des fichiers directement?

Puis-je utiliser le bluetooth depuis le terminal car je n'ai pas d'interface graphique sur cet ordinateur? Je n'ai aucune expérience préalable dans ce domaine, donc si c'est possible, j'ai besoin d'une réponse détaillée.


la source

Réponses:

5

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 bluetoothctlcommande interactive. Là, on peut entrer helppour obtenir une liste des commandes disponibles.

  • Mettez le contrôleur sous tension en entrant power on. C'est désactivé par défaut.
  • Entrez devicespour 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 oncommande si le périphérique n'est pas encore sur la liste.
  • Allumez l'agent avec agent on.
  • Entrez pair MAC Addresspour 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_addresspour é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 connectpour 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 udevrè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 systemdinfrastructure 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 systemdmodifications 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 obexpushdil fallait.

L'indicateur de compatibilité sur le démon Bluetooth est nécessaire, vous devez éditer /etc/systemd/system/dbus-org.bluez.serviceavec l'éditeur de votre choix en ajoutant l' -Cindicateur à 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-reloadaprè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 obexpushdutilise 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 obexpushdcours 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 obexpushdest toujours en cours d'exécution, utilisez bluetoothctlpour définir discoverable on. Associez maintenant à partir de votre autre appareil. L'appairage DOIT être fait pendant qu'il obexpushdest 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 bluetoothctlpour 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 /bluetoothrépertoire. Notez qu'ils appartiendront à root, vous aurez donc besoin de sudo pour y accéder. Ou vous pouvez faire un chmod 0777 /bluetoothpour 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.

emk2203
la source
Ces instructions ont été revérifiées avec un téléphone Android et un ordinateur portable Ubuntu. Configuration, envoyer et recevoir confirmé pour fonctionner.
emk2203
Attention: /etc/systemd/system/dbus-org.bluez.serviceest 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.drépertoire et placez-y un fichier se terminant par .conf(comme add-compat-flag.conf), contenant uniquement: [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C(avec des
sauts de