Ich versuche, serielle Befehle über Bluetooth zu senden und zu empfangen. Ich habe die pyBluez-Bibliothek installiert. Das Problem ist, dass zwar rfcomm.conf vorhanden ist, aber kein rfcomm0 im Verzeichnis /dev/ vorhanden ist. Ich habe neugestartet, aber keine Änderung.
Wenn ich Folgendes ausführe, erhalte ich die Fehlermeldung „Zugriff verweigert“.
sudo echo "This is a test" > /dev/rfcomm0
Warum wird RFCOMM nicht automatisch zu /dev hinzugefügt, nachdem das USB-Bluetooth-Modul angeschlossen wurde? Das Bluetooth-Modul ist kompatibel und ich kann Geräte über die Befehlszeile scannen und finden. Bluez und Bluez-Utils wurden bereits installiert.
Antwort1
Auch wenn der Bluetooth-Dienst gestartet wurde, /dev/rfcomm0
wurde das Gerät nicht einfach automatisch angezeigt.
Das Bluetooth-Subsystem müsste mindestens die Adresse des Bluetooth-Geräts und dessen Kanal kennen, damit ein bestimmter /dev/rfcomm*
Gerätename an eine bestimmte Kombination aus Bluetooth-Gerät und Kanal gebunden werden kann.
Sie können verwenden rfcomm bind 0 <bdaddr> [channel]
, um die Bindung für herzustellen /dev/rfcomm0
. Wenn Sie die Kanalnummer nicht angeben, wird standardmäßig Kanal 1 verwendet. Wenn Ihre Version von die Datei rfcomm
noch unterstützt /etc/bluetooth/rfcomm.conf
und Sie die Adress- und Kanalinformationen für /dev/rfcomm0
in sie geschrieben haben, können Sie die Adress- und Kanalinformationen aus dem Befehl weglassen – Sie müssen den Befehl jedoch trotzdem verwenden, um die Bindung herzustellen.
Neuere Versionen der BlueZ-Tools scheinen die Datei nicht mehr zu dokumentieren /etc/bluetooth/rfcomm.conf
. Möglicherweise müssen Sie immer die vollständige Form des rfcomm bind
Befehls verwenden, um Ihre Bindungen einzurichten. Möglicherweise möchten Sie diese Befehle /etc/rc.local
oder ein benutzerdefiniertes Startskript hinzufügen, damit sie beim Booten automatisch ausgeführt werden, da die Verknüpfungen bei einem Neustart nicht bestehen bleiben.
Es scheint, dass uns der letzte große Umbau der internen Komponenten von BlueZ einige der RFCOMM-bezogenen Funktionen, wie die /etc/bluetooth/rfcomm.conf
Datei, gekostet hat. Aber zumindest rfcomm
ist der Befehl noch verfügbar und kann die Aufgabe erledigen.
Antwort2
Warum geschieht dies nicht automatisch? Zuerst muss der Bluetooth-Dienst einen Daemon starten. Wenn dieser nicht in einer Init-Liste enthalten ist, müssen Sie ins Terminal gehen und ihn manuell starten, bis Sie die Init-Liste so neu konfigurieren, dass er enthalten ist.
Der Grund hierfür ist, dass Sie Ihre Konfiguration testen können, bevor Sie alles auf dem Computer automatisch einrichten. Die Begründung hierfür basiert auf den Konzepten von Unix, wie ein Betriebssystem funktionieren sollte, wie Benutzern und Gruppen Kommunikationsrechte zugewiesen werden und dergleichen.