Teilen Sie Dateien zwischen 2 Computern über Bluetooth vom Terminal

8

Ich habe zwei benachbarte Computer, einen unter Linux mit Konsolenmodus und einen mit Windows 10. Ich möchte Dateien zwischen den beiden übertragen, und beide verfügen über Bluetooth-Funktionen. Zuerst dachte ich daran, einen USB anzuschließen und das folgende Verfahren durchzuführen:

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

Und dann würde ich das USB-Gerät entfernen und es an den anderen Computer anschließen und die Dateien darauf übertragen; Aber ich dachte, warum verwende ich nicht Bluetooth, um Dateien direkt freizugeben?

Kann ich Bluetooth vom Terminal aus verwenden, da auf diesem Computer keine grafische Benutzeroberfläche vorhanden ist? Ich habe keine Vorkenntnisse in diesem Bereich. Wenn dies möglich ist, benötige ich eine ausführliche Antwort.


quelle

Antworten:

4

Zuerst müssen Sie apt install bluez-tools obexpushd.

Um Dateien zu senden und zu empfangen, müssen Sie zuerst die Geräte einrichten und koppeln.

INSTALLIEREN


aus dem Arch Wiki - Bluetooth :

Bluetoothctl

Starten Sie den bluetoothctlinteraktiven Befehl. Dort kann helpman eingeben, um eine Liste der verfügbaren Befehle zu erhalten.

  • Schalten Sie den Controller durch Eingabe ein power on. Es ist standardmäßig deaktiviert.
  • Geben Sie ein devices, um die MAC-Adresse des Geräts abzurufen, mit dem gekoppelt werden soll.
  • Rufen Sie den Geräteerkennungsmodus mit dem scan onBefehl auf, wenn das Gerät noch nicht in der Liste enthalten ist.
  • Schalten Sie den Agenten mit ein agent on.
  • Geben Sie ein pair MAC Address, um das Pairing durchzuführen (Tab-Vervollständigung funktioniert).
  • Wenn Sie ein Gerät ohne PIN verwenden, müssen Sie dem Gerät möglicherweise manuell vertrauen, bevor die Verbindung erfolgreich wiederhergestellt werden kann. Geben Sie trust MAC Address dazu ein.
  • Verwenden Sie schließlich, um connect MAC_addresseine Verbindung herzustellen.

Die letzten beiden Aufzählungspunkte sind für den Sendeteil einer Dateiübertragung nicht erforderlich, die connectspäteren benötigen Sie jedoch für den Empfangsteil.

Eine Beispielsitzung kann folgendermaßen aussehen:

# 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

Um Änderungen dauerhaft vorzunehmen und das Gerät nach einem Neustart aktiv zu haben, ist eine udevRegel erforderlich:

/etc/udev/rules.d/10-local.rules

# Set bluetooth power up
ACTION=="add", KERNEL=="hci0", RUN+="/usr/bin/hciconfig %k up"

Tipp : Ersetzen Sie KERNEL=="hci0"durch KERNEL=="hci[0-9]*", um allen BT-Schnittstellen zu entsprechen.

Nach einem Suspend / Resume-Zyklus kann das Gerät mithilfe eines benutzerdefinierten Systemdienstes automatisch eingeschaltet werden:

/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

Aktivieren Sie eine Instanz des Geräts beispielsweise mit Ihrem Bluetooth-Gerätenamen [email protected].


Jetzt sind Ihre Geräte gekoppelt. Überprüfen Sie, ob Sie den anderen mit sehen können bt-device -l.

SENDEN

Als Nächstes müssen Sie Ihre systemdInfrastruktur senden, damit das Senden funktioniert. Andernfalls wird der folgende Fehler angezeigt:

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.

Nehmen Sie die erforderlichen systemdÄnderungen mit vor

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

Dadurch wird sichergestellt, dass Sie Dateien senden können. Ein sudoauch in der ersten Zeile wird scheitern !

Sie können jetzt Dateien per senden bluetooth-sendto --device=12:34:56:78:9A:BC filename filename2. Wenn eine Übertragung zu 100% hängt, wird sie ctrlcabgeschlossen (oder früher abgebrochen).

Um Ihren Gerätenamen zu kennen (12: 34: 56: 78: 9A: BC), können Sie Probleme haben bt-device -l.

ERHALTEN


vom Raspberry Pi Forum :

Wir möchten einen OBEX-Push-Server einrichten, deshalb obexpushdwurde benötigt.

Das Kompatibilitätsflag auf dem Bluetooth-Dämon wird benötigt. Sie müssen /etc/systemd/system/dbus-org.bluez.servicemit dem Editor Ihrer Wahl bearbeiten, indem Sie das -CFlag am Ende der ExecStart=Zeile hinzufügen . Es sollte so aussehen:

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

Starten Sie den Dienst sudo systemctl daemon-reloadnach der Bearbeitung neu oder starten Sie ihn neu . Wählen Sie ein bestimmtes Verzeichnis aus, in dem empfangene Dateien abgelegt werden, z. B. von sudo mkdir /bluetooth.

Starten Sie den Server mit sudo obexpushd -B -o /bluetooth -n, er sollte antworten mit:

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

Wenn das nicht funktioniert und Sie erhalten:

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

Dies kann daran liegen, dass ein anderer Dämon oder ein anderes Programm ausgeführt wird, das den standardmäßig obexpushdverwendeten rfcomm-Kanal 9 belegt . Ändern Sie in diesem Fall den Kanal wie folgt auf 23:

sudo obexpushd -B23 -o /bluetooth -n

Kanal 23 benutzen.

Sobald Sie obexpushdloslegen, öffnen Sie ein zweites Terminalfenster. Sie können überprüfen, ob der OBEX-Dienst bei registriert ist

sudo sdptool browse local

Es sollte (in diesem Fall auf Kanal 23) unter anderem Folgendes auflisten:

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

obexpushdVerwenden Sie bluetoothctlin diesem Fenster, während es noch ausgeführt wird, zum Festlegen discoverable on. Koppeln Sie jetzt von Ihrem anderen Gerät. Das Pairing MUSS während der obexpushdAusführung erfolgen, da das andere Gerät sonst nicht erkennt, dass der Dienst verfügbar ist. Wenn das Telefon bereits gekoppelt ist, entfernen Sie es von Ihrem anderen Gerät, bluetoothctlentfernen Sie es vom Ubuntu-Computer und koppeln Sie es erneut.

Nachdem Sie eine Verbindung hergestellt haben (der letzte Aufzählungspunkt aus der obigen Liste), sollten Sie in der Lage sein, Dateien zu empfangen. Sie werden im /bluetoothVerzeichnis angezeigt. Beachten Sie, dass sie Eigentum von root sein werden, sodass Sie sudo benötigen, um auf sie zugreifen zu können. Oder Sie können ein chmod 0777 /bluetoothVerzeichnis für einen öffentlichen Austausch erstellen, da die Bluetooth-Authentifizierung gerätebasiert und ohnehin nicht benutzerbasiert ist.

Erstellen Sie die Datei, um den Befehl obexpushd zu automatisieren /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

Stellen Sie dann den Autostart mit ein

sudo systemctl enable obexpush

Nach einem Neustart oder Neustart des Dienstes mit sudo systemctl daemon-reloadsollten Sie jetzt in der Lage sein, Dateien in beide Richtungen zu senden und zu empfangen.

Vergessen Sie nicht, die Geräte anzuschließen, wenn Sie versuchen, Dateien zu empfangen.

emk2203
quelle
Diese Anweisungen wurden mit einem Android-Telefon und einem Ubuntu-Laptop überprüft. Einrichten, Senden und Empfangen bestätigt, um zu arbeiten.
Emk2203