Condividi file tra 2 computer tramite bluetooth dal terminale


8

Ho due computer adiacenti uno in esecuzione Linux con modalità console e uno con Windows 10. Voglio trasferire i file tra i due, ed entrambi hanno funzionalità Bluetooth. Inizialmente, ho pensato di collegare un usb ed eseguire la seguente procedura:

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

E poi, rimuoverei il dispositivo USB e lo collegherei all'altro computer, e trasferisco i file su di esso; Ma ho pensato, perché non uso il bluetooth per condividere i file direttamente?

Posso usare il bluetooth dal terminale in quanto non ho una GUI su quel computer? Non ho alcuna esperienza precedente in questo, quindi se è possibile, ho bisogno di una risposta dettagliata.

Risposte:


5

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 bluetoothctlcomando interattivo. Ci si può inserire helpper ottenere un elenco di comandi disponibili.

  • Accendere il controller accedendo power on. È spento per impostazione predefinita.
  • Immettere devicesper ottenere l'indirizzo MAC del dispositivo con cui eseguire l'accoppiamento.
  • Accedere alla modalità di rilevamento del dispositivo con scan oncomando se il dispositivo non è ancora nell'elenco.
  • Attiva l'agente con agent on.
  • Invio pair MAC Addressper 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_addressper stabilire una connessione.

Gli ultimi due punti elenco non sono necessari per la parte di invio di un trasferimento di file, ma è necessario il connectsuccessivo 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' systemdinfrastruttura 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 systemdmodifiche necessarie con

systemctl --user start obex
sudo systemctl --global enable obex

Questo ti assicura di poter inviare file. A sudoanche 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é obexpushdera necessario.

È necessario il flag di compatibilità sul demone Bluetooth, è necessario modificarlo /etc/systemd/system/dbus-org.bluez.servicecon l'editor di propria scelta aggiungendo il -Cflag alla fine della ExecStart=riga. Dovrebbe sembrare come questo:

ExecStart=/usr/lib/bluetooth/bluetoothd -C

Riavvia o riavvia il servizio con sudo systemctl daemon-reloaddopo 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 obexpushdusa 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 obexpushdavviato, 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 bluetoothctlper 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 bluetoothctlper 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 /bluetoothdirectory. Nota che saranno di proprietà di root, quindi avrai bisogno di sudo per accedervi. Oppure puoi fare una chmod 0777 /bluetoothper 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.


Queste istruzioni sono state ricontrollate con un telefono Android e un laptop Ubuntu. Configura, invia e ricevi confermato per funzionare.
emk2203,

Attenzione: /etc/systemd/system/dbus-org.bluez.servicemolto probabilmente è un collegamento simbolico a /lib/systemd/..., e non vuoi modificarlo. Dovresti usare una sostituzione: crea la /etc/systemd/system/dbus-org.bluez.service.ddirectory e inserisci un file che termina in .conf(like add-compat-flag.conf), contenente solo: [Service] ExecStart= ExecStart=/usr/lib/bluetooth/bluetoothd -C(con i feed di riga appropriati ovviamente)
Pikrass
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.