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 bluetoothctl
interaktiven Befehl. Dort kann help
man 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 on
Befehl 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_address
eine Verbindung herzustellen.
Die letzten beiden Aufzählungspunkte sind für den Sendeteil einer Dateiübertragung nicht erforderlich, die connect
spä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 udev
Regel 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/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
Aktivieren Sie eine Instanz des Geräts beispielsweise mit Ihrem Bluetooth-Gerätenamen bluetooth-auto-power@hci0.service
.
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 systemd
Infrastruktur 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 sudo
auch 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 obexpushd
wurde benötigt.
Das Kompatibilitätsflag auf dem Bluetooth-Dämon wird benötigt. Sie müssen /etc/systemd/system/dbus-org.bluez.service
mit dem Editor Ihrer Wahl bearbeiten, indem Sie das -C
Flag am Ende der ExecStart=
Zeile hinzufügen . Es sollte so aussehen:
ExecStart=/usr/lib/bluetooth/bluetoothd -C
Starten Sie den Dienst sudo systemctl daemon-reload
nach 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 obexpushd
verwendeten 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 obexpushd
loslegen, ö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
obexpushd
Verwenden Sie bluetoothctl
in 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 obexpushd
Ausfü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, bluetoothctl
entfernen 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 /bluetooth
Verzeichnis 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 /bluetooth
Verzeichnis 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-reload
sollten 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.