Bei Bluetooth handelt es sich um eine Funktechnologie, die verschiedenene Geräte miteinander verbindet. Bluetooth unterscheidet sich dabei in einigen wesentlichen Punkten von IrDA: Zum einen müssen die einzelnen Geräte sich nicht direkt „sehen“, zum anderen können mehrere Geräte zusammen ganze Netzwerke aufbauen. Allerdings sind nur Datenraten bis maximal 720 Kbps erreichbar (in der aktuellen Version 1.1). Theoretisch kann man mittels Bluetooth auch durch Wände hindurch „funken“. In der Praxis hängt dies aber sehr stark von den Wänden und der Geräteklasse ab. Letztere bestimmt die maximale Sendereichweite, die in drei Klassen von 10 bis 100 Metern reicht.
Dienste werden bei Bluetooth mittels sogenannter Profile definiert. Im Bluetooth-Standard sind z.B. Profile für den Dateitransfer („File Transfer“-Profile), Drucken („Basic Printing“-Profil) und Netzwerkverbindungen („Personal Area Network“-Profil) festgelegt.
Damit ein Gerät den Dienst eines anderen benutzen kann, müssen beide das gleiche Profil verstehen — eine Information, die manchmal leider weder der Verpackung noch dem Handbuch des Gerätes entnehmbar ist. Erschwerend kommt hinzu, dass sich zwar manche Hersteller streng an die Definitionen der einzelnen Profile halten, andere dagegen weniger. In der Regel klappt die Verständigung zwischen den Geräten aber.
Um Bluetooth verwenden zu können braucht man einen Bluetooth-Adapter (entweder eingebaut im Gerät oder als externes Dongle), Treiber und einen sogenannten „Bluetooth Protocol Stack“.
Im Linuxkernel befindet sich bereits die Grundausstattung an Treibern für den Gebrauch von Bluetooth. Als „Protocol Stack“ kommt das Bluez-System zur Anwendung. Zusätzlich sollten noch alle mit Bluetooth in Verbindung stehenden Pakete (bluez-libs, bluez-bluefw, bluez-pan, bluez-sdp und bluez-utils) installiert werden, da diese einige benötigte Dienste und Dienstprogramme bereitstellen. Auf einige davon wird später noch eingegangen.
Die nachstehend beschriebenen Konfigurationsdateien können nur als User root verändert werden. Eine grafische Benutzeroberfläche um die entsprechenden Parameter einzustellen, gibt es im Moment leider nicht. Die Dateien müssen also mit einem Textverarbeitungsprogramm verändert werden.
Einen ersten Schutz vor ungewollten Verbindungen bietet die Absicherung durch eine PIN-Nummer. Mobiltelefone fragen den PIN normalerweise beim ersten Kontakt (bzw. dem Einrichten eines Gerätekontaktes auf dem Telefon) ab. Damit sich zwei Geräte miteinander unterhalten können, müssen beide sich mit dem selben PIN identifizieren. Dieser befindet sich auf dem Rechner in der Datei /etc/bluetooth/pin. Momentan gibt es unter Linux nur einen PIN, unabhängig von der Anzahl der installierten Bluetoothgeräte. Das Ansprechen von mehreren Geräte mit unterschiedlichen PINs wird zur Zeit leider nicht unterstützt, hier müssen entweder alle Geräte auf die gleiche PIN-Nummer gesetzt werden, oder die PIN-Authentifizierung ganz deaktiviert werden.
![]() | Sicherheit von Bluetooth-Verbindungen |
|---|---|
Trotz des PINs sollte man davon ausgehen, dass eine Übertragung zwischen zwei Geräten nicht abhörsicher ist! | |
Das Aktivieren geschieht in der Konfigurationsdatei /etc/bluetooth/hcid.conf. Hier kann man verschiedene Einstellungen wie Gerätenamen und Sicherheitsmodus ändern. Im Wesentlichen sollten die Einstellungen ausreichend sein, lediglich zwei sollen hier kurz erwähnt werden. Die Datei enthält Kommentare, die die Optionen bei den verschiedenen Einstellungen beschreiben.
Eine der wichtigsten Einstellungen ist security auto;. Mit dieser wird die beschriebene Notwendigkeit eines PINs zur Identifikation aktiviert, wobei durch das auto im Problemfall auf keine PIN verwenden geschaltet wird. Ob Sie diese Einstellung auf none setzen, so dass nie eine PIN-Nummer verwendet wird, oder auf user (immer verwenden) setzen, bleibt Ihnen und Ihrem Bedarf an Sicherheit überlassen.
Interessant ist der Abschnitt, der mit device { eingeleitet wird. Hier kann man festlegen, unter welchem Namen der Rechner bei den Gegenstellen angezeigt wird. Die Geräteklasse (Laptop, Server, etc.) wird hier ebenso definiert wie Authentifizierung und Verschlüsselung.
Erst durch das Zusammenspiel verschiedener Dienste wird Bluetooth überhaupt benutzbar. Zwei im Hintergrund laufende Daemonen werden minimal benötigt: Zum einen der hcid (Host Controller Interface). Dieser dient als Schnittstelle zum Bluetoothgerät und steuert dieses. Zum anderen braucht man den sdpd (Service Discovery Protocol). Über den sdpd kann ein Gerät herausbekommen, welche Dienste der Rechner zur Verfügung stellt. Sowohl hcid als auch sdpd können — falls nicht bereits automatisch beim Systemstart geschehen — mit dem Kommando rcbluetooth start in Betrieb genommen werden. Es ist dazu allerdings nötig root zu sein.
Im Folgenden wird kurz auf die wichtigsten Werkzeuge eingegangen, die für das Arbeiten mit Bluetooth nötig sind. Leider sind im Moment nur Kommandozeilenprogramme verfügbar. Ob eine Erweiterung des Konqueror- (KDE-Desktop) bzw. des Nautilus- (GNOME-Desktop) Browsers bis zur Distributionserstellung fertig wird stand zum Redaktionsschluss noch nicht fest. Falls ja, so sollte Ihnen die URL sdp:// lokale (d.h. physikalisch mit dem Rechner verbundene) und entfernte (d.h. nur mittels Funk erreichbaren) Bluetooth-Geräte anzeigen.
![]() | Tipp |
|---|---|
Alle erwähnten Programme verfügen über weitere Funktionalitäten, die sich mittels man <programmname> in Erfahrung bringen lassen. | |
Einige Kommandos lassen sich leider nur als root ausführen. Hierzu gehört z.B. l2ping <Geräteadresse>, mit dem die Verbindung zu einem entfernten Gerät getestet werden kann.
Mittels des hcitool kann einfach festgestellt werden, ob lokale und/oder entfernte Geräte gefunden wurden. Der Kommandoaufruf hcitool dev sollte das eigene Gerät anzeigen. Die Ausgabe erzeugt für jedes gefundene lokale Gerät eine Zeile in der Form <interfacename> <Geräteadresse>.
Mit hcitool name <Geräteadresse> kann der Gerätename eines entfernten Gerätes ermittelt werden. Handelt es sich dabei z.B. um einen weiteren Rechner, so würde die ausgegebene Klasse und der Gerätename der Information aus dessen /etc/bluetooth/hcid.conf Datei entsprechen. Lokale Geräteadressen erzeugen eine Fehlerausgabe.
Weitere Informationen über das lokale Gerät erhält man mittels /sbin/hciconfig. Entfernte Geräte (die nicht physikalisch mit dem Rechner verbunden sind) werden mit hcitool inq gesucht. Hier werden drei Werte pro gefundenem Gerät ausgegeben: Die Geräteadresse, eine Uhrendifferenz und die Geräteklasse. Wichtig ist die Geräteadresse. Diese wird bei anderen Kommandos benutzt um das Zielgerät zu identifizieren. Die Uhrendifferenz ist im Prinzip nur aus technischer Sicht interessant. In der Klasse wird sowohl Gerätetyp als auch Servicetyp als Hexadezimalwert kodiert.
Die Information, welcher Dienst von einem bestimmten Gerät zur Verfügung gestellt wird, erhält man durch das Programm sdptool. sdptool browse <Geräteadresse> liefert alle Dienste eines Gerätes, während man mit sdptool search <Dienstekürzel> nach einem bestimmten Dienst suchen kann. Dieser Aufruf befragt alle erreichbaren Geräte nach dem gewünschten Dienst. Wird er von einem der Geräte angeboten, so gibt das Programm den vom Gerät gelieferten (vollen) Dienstnamen und eine kurze Beschreibung dazu aus. Eine Liste aller möglichen Dienstkürzel erhält man durch Aufruf von sdptool ohne irgendwelche Parameter.
Um zu zeigen, was mit Bluetooth alles möglich ist, sind nachstehend zwei Beispiele aufgeführt.
Im ersten Beispiel soll eine Netzwerkverbindung zwischen zwei Rechnern aufgebaut werden. Dies geschieht mit Hilfe des pand (Personal Area Networking). Die nachstehenden Kommandos müssen vom Benutzer root durchgeführt werden. Auf eine genauere Erläuterung der Netzwerkkommandos (ip) wird verzichtet und nur auf die Bluetooth bedingten Aktionen eingegangen:
Auf einem der beiden Rechner (im folgenden als R1 bezeichnet) wird der pand mit dem Kommando pand -s gestartet. Auf dem zweiten Rechner R2 wird mittels hcitool inq dessen Geräteadresse ermittelt. Mit pand -c <Geräteadresse> kann dann eine Verbindung aufgebaut werden. Ruft man jetzt eine Liste der zur Verfügung stehenden Netzwerkschnittstellen mit ip link show auf, so sollte ein Eintrag in der Form:
bnep0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether 00:12:34:56:89:90 brd ff:ff:ff:ff:ff:ff
zu finden sein (an Stelle von 00:12:34:56:89:90 sollte die lokale Geräteadresse stehen). Dieser Schnittstelle muss jetzt eine IP-Adresse zugewiesen werden, und sie in den aktiven Zustand gebracht werden.
Dies geschieht z.B. durch die beiden Kommandos (auf R1)
ip addr add 192.168.1.3/24 dev bnep0 ip link set bnep0 up
bzw. analog auf R2
ip addr add 192.168.1.4/24 dev bnep0 ip link set bnep0 up
Bitte beachten Sie, die 3 ist jetzt eine 4. R1 ist damit von R2 unter der IP 192.168.1.3 erreichbar. Mit ssh 192.168.1.4 können Sie sich jetzt von R1 aus einloggen (sofern R2 einen sshd, wie er standardmässig unter SUSE LINUX läuft, im Betrieb hat). Der Aufruf ssh 192.168.1.4 funktioniert im übrigen jetzt auch als „normaler“ Benutzer.
Im zweiten Beispiel soll ein mit einem Fotomobiltelefon erzeugtes Bild (ohne zusätzliche Kosten z.B. durch den Versand einer Multimediamail zu erzeugen) auf einen Rechner transportiert werden. Bitte beachten Sie, dass jedes Mobiltelefon eine andere Menüstruktur besitzt, aber die Vorgehensweise meist ähnlich ist. Konsultieren Sie nötigenfalls die Anleitung für Ihr Telefon. Nachstehend wird der Transfer eines Bildes von einem Sony Ericsson auf einen Laptop beschrieben. Dazu muss einerseits auf dem Rechner der Dienst Obex-Push vorhanden sein, andererseits der Rechner auch dem Mobiltelefon den Zugriff erlauben. Im ersten Schritt wird der Dienst auf dem Laptop zur Verfügung gestellt. Dies geschieht mit dem Daemon opd, der aus dem Paket bluez-utils kommt. Starten Sie diesen mit:
opd --mode OBEX --channel 10 --daemonize --path /tmp --sdp
Wichtig sind dabei zwei Parameter. --sdp meldet den Dienst beim sdpd an. Der Parameter --path /tmp teilt dem Programm mit, wohin es empfangene Daten speichern soll — in diesem Fall nach /tmp. Genauso können Sie auch andere Pfade angegeben. Sie brauchen nur Schreibberechtigung im angegebenen Verzeichnis.
Jetzt muss das Mobiltelefon den Rechner „kennenlernen“. Suchen Sie dazu das Menü auf dem Telefon auf, und wählen Sie dort an. Gehen Sie gegebenenfalls auf , bevor Sie den Punkt auswählen. Wählen Sie aus und lassen Sie Ihr Telefon nach dem Laptop suchen. Wenn ein Gerät gefunden wird, so erscheint es mit seinem Namen im Display. Wählen Sie das zum Laptop gehörende Gerät aus. Jetzt sollte eine PIN-Abfrage kommen, bei der Sie bitte den PIN aus /etc/bluetooth/pin eingeben. Damit kennt das Telefon jetzt den Laptop, und kann mit diesem auch Daten austauschen. Verlassen Sie jetzt das Menü und suchen Sie das Bildermenü auf. Wählen Sie ein Bild aus, dass Sie transferieren möchten und drücken Sie dann den -Button. Im jetzt erscheinenden Menü kommen Sie über zu einer Auswahl wie Sie es verschicken möchten. Wählen Sie aus. Jetzt sollte der Laptop als Zielgerät selektierbar sein. Nach der Auswahl des Rechners erfolgt die Übertragung, und das Bild wird in das beim Aufruf des opd angegebene Verzeichnis gelegt. Genauso könnte Sie natürlich ein Musikstück auf den Laptop übertragen.
Bei Verbindungsproblemen empfiehlt es sich, folgende Liste abzuarbeiten:
Überprüfen Sie die Ausgabe von hcitool dev. Wird das lokale Gerät angezeigt? Wenn nicht, ist entweder der hcid nicht gestartet, oder das Gerät wird nicht als Bluetooth-Gerät erkannt (entweder weil der Treiber dies nicht kann oder weil das Gerät kaputt ist). Starten Sie den Daemon mit rcbluetooth restart neu und werfen Sie einen Blick in /var/log/messages, ob irgendwelche Fehler aufgetreten sind.
„Sieht“ der Rechner andere Geräte wenn Sie hcitool inq aufrufen? Probieren Sie das ruhig zweimal, evtl. war die Verbindung nicht ganz in Ordnung. Das Frequenzband für Bluetooth wird auch von anderen Geräten benutzt.
Überprüfen Sie, ob die PIN in /etc/bluetooth/pin und die PIN des anderen Gerätes übereinstimmen.
Versuchen Sie, die Verbindung vom anderen Gerät aus zu initiieren. Überprüfen Sie, ob dieses Gerät den Rechner sieht.
Das erste Beispiel (Netzwerkverbindung) klappt nicht. Hier gibt es verschiedene Problemmöglichkeiten: Zum einen kann es sein, dass einer der beiden Rechner das ssh-Protokoll nicht versteht. Probieren Sie, ob ping 192.168.1.3 bzw. ping 192.168.1.4 klappt. Wenn ja überprüfen Sie, ob der sshd läuft. Ein anderes Problem kann sein, dass Sie bereits andere Adressen haben, die mit den im Beispiel genannten 192.168.1.X Konflikte erzeugen. Versuchen Sie einfach andere Adressen, z.B. 10.123.1.2 und 10.123.1.3.
Im zweiten Beispiel erscheint der Laptop nicht als Zielgerät: Erkennt das Mobilgerät den Dienst Obex-Push auf dem Laptop? Gehen Sie dazu im -Menü zum betreffenden Gerät, und lassen Sie sich die anzeigen. Steht hier (auch nach dem Aktualisieren der Liste) kein Obex-Push, so liegt das Problem am opd auf dem Laptop. Ist der opd gestartet? Haben Sie Schreibberechtigung auf das angegebene Verzeichnis?
Geht das zweite Beispiel auch umgekehrt? Ja, wenn Sie obexftp installiert haben, geht dies mit obexftp -b <Geräteadresse> -B 10 -p <bild> auch bei einigen Geräten (Siemens und Sony Ericsson sind getestet, andere können, müssen aber nicht).
Eine gute Übersicht über verschiedene Anleitungen zum Umgang und zur Konfiguration von Bluetooth findet sich unter: http://www.holtmann.org/linux/bluetooth/
Gute Informationen und Anleitungen:
GPRS über Bluetooth (deutschsprachige Seite): http://www.van-schelve.de/edv-wissen/linux/bluetooth_1.htm
Verbindung mit PalmOS PDA (englischsprachige Seite): http://www.cs.ucl.ac.uk/staff/s.zachariadis/btpalmlinux.html
Offizielles Howto für den im Kernel integrierten Bluetooth Protocol Stack: http://bluez.sourceforge.net/howto/index.html