Bluetooth einrichten

Version vom 23.06.2009

Ansatz zum Pairing ist kompliziert
Abschnitt zu Audio via Bluetooth fehlt

Einleitung

Grundsätzlich lässt sich unter Debian natürlich auch die von anderen Distributionen (z.B. Ubuntu) bekannte Bluetooth-Umgebung einrichten. Wer kein blinkendes, blaues Logo auf dem Monitor benötigt, wenn sich ein Bluetoothgerät verbinden möchte, für den ist dieses kleine Howto genau das richtige. Es verzichtet gezielt auf Dienste und Hintergrundprogramme, die nicht benötigt werden und spart so CPU-Zeit und auf modernen Notebooks Akkulaufzeit.

Kernel kompilieren

Im Standardkernel von Debian sind die entsprechenden Module wahrscheinlich bereits einkonfiguriert, falls nicht (oder falls eine eigene Kernelkonfiguration vorliegt), sind einige Einstellungen notwendig. Dazu muss unter Networking -> Bluetooth subsystem support die Bluetoothunterstützung aktiviert werden. Die meisten werden zusätzlich den USB-Treiber benötigen, der sich im Untermenü Bluetooth device drivers finden lässt. Kompiliert wird mittels:
Seeschlange:/usr/src/linux# make modules && make modules_install
Ist udev installiert sein (das sollte auf den meisten Systemen der Fall sein), so reicht es den Bluetoothstick abzuziehen und wieder anzustecken, ansonsten müssen die nötigen Kernelmodule erstmal selbst eingebunden werden:
Seeschlange:/usr/src/linux# modprobe btusb && modprobe bluetooth && modprobe rfcomm && modprobe l2cap

Packages installieren

Das ist dank Debians Paketverwaltung schnell getan und kann mittels
Seeschlange:~# apt-get install bluetooth obexpushd obexftp
erledigt werden. Das erste Paket zieht die benötigten Dienste und Konfigurationsdateien mit sich, das zweite kann benutzt werden, um später vom Handy eine Datei an den Computer zu senden und das letzte Paket bietet die Möglichkeit, vom Computer aus das Handy zu durchsuchen, als wäre es ein FTP-Server. Das erste Paket wird generell benötigt, die anderen beiden sind Geschmackssache - ich verwende sie gerne.

Bluetooth testen

Nach der Installation sollte ein normaler Benutzer (ggf. der Gruppe "netdev" hinzufügen) in der Lage sein (fast!) alle folgenden Schritte durchzuführen. Das ist von Vorteil!

Ob der Bluetoothstick überhaupt erkannt wurde, lässt sich mittels des hcitools feststellen. Die Ausgabe sollte etwa so aussehen:

michael@Seeschlange:~$ hcitool dev
Devices:
        hci0    XX:XX:XX:XX:XX:XX
michael@Seeschlange:~$ hcitool scan
Scanning ...
        YY:YY:YY:YY:YY:YY       Samsung
Mit dem ersten Aufruf wird überprüft, ob die Bluetooth-Module richtig arbeiten, mit dem zweiten wird nach sichtbaren Bluetoothgeräten in der Umgebung gesucht.

Dateien empfangen (obexpushd)

Dateien kann man vom Handy ganz einfach an den Computer senden, wenn obexpushd gestartet wurde. Dabei handelt es sich um ein Programm, das mit simplen Skripten viele Aufgaben durchführen kann (so prüft der FoFoPC, ob überhaupt genug Speicherplatz für eine Datei bereitsteht, bevor sie empfangen wird, wertet ihren Inhalt aus und führt dann eine kontextbezogene Aktion durch). Aber auch ohne Skript ist obexpushd sehr praktisch - ein Beispiel:
michael@Seeschlange:~$ DIR=/tmp/Bluetoothdateien
michael@Seeschlange:~$ mkdir -p "$DIR" && cd "$DIR"
michael@Seeschlange:/tmp/Bluetoothdateien$ obexpushd -n
obexpushd 0.7 Copyright (C) 2006-2007 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
Connection from "bluetooth/[YY:YY:YY:YY:YY:YY]:9"
0.1: Creating file "Foto-0001.jpg"
^C
michael@Seeschlange:/tmp/Bluetoothdateien$ 
Zuerst wird ein neues Verzeichnis erstellt und dorthin gewechselt, da obexpushd empfangene Dateien grundsätzlich im aktuellen Verzeichnis speichert. Der Parameter gibt an, dass obexpushd sich nicht in den Hintergrund verkriechen soll (das ist aber Geschmackssache).

Pairing

Ohne die Installation von einigen DBus-Paketen gestaltet sich das Bluetoothpairing relativ umständlich. Allerdings lassen sich sicherlich auch Skripte schreiben, die einem die Arbeit abnehmen. Die simpelste Lösung sieht so aus, funktioniert allerdings nur als Superuser:
Seeschlange:~# hcitool dev  
Devices:
        hci0    XX:XX:XX:XX:XX:XX
Seeschlange:~# hcitool scan
Scanning ...
        YY:YY:YY:YY:YY:YY       Samsung
Seeschlange:~# echo "YY:YY:YY:YY:YY:YY 1234" >> "/var/lib/bluetooth/XX:XX:XX:XX:XX:XX/pincodes"
Seeschlange:~# 
Die ersten beide Aufrufe sollen hierbei nur verdeutlichen, woher die Geräteadressen stammen. Für jeden Bluetoothadapter existiert also eine Datei, in der die Adressen der Bluetoothgeräte und deren PIN-Code gelistet sind. Diese kann natürlich auch in einem beliebigen Editor modifiziert werden, um Geräte wieder zu entfernen oder einen PIN zu ändern.

Geräte nach Dateien durchsuchen

Möchte man nicht nur Dateien vom Handy an den Computer senden, sondern vom Computer Dateien runterladen oder hochladen, so kann obexpushd diesen Aufgaben nicht genügen (soll es auch gar nicht). Hier kommt obexftp ins Spiel, allerdings rate ich zur Nutzung von auf das in Java geschriebene obexftp-frontend. Voraussetzung ist natürlich, dass das zuvor beschriebene Pairing durchgeführt wurde. Mit folgendem Aufruf kann überprüft werden, ob die Kommunikation zwischen beiden Teilnehmern korrekt funktioniert:
michael@Seeschlange:~$ obexftp -b -l
Scanning ...
Using   YY:YY:YY:YY:YY:YY       Samsung
Browsing YY:YY:YY:YY:YY:YY ...
Channel: 6
Connecting...done
Receiving "(null)"... <?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd">
<folder-listing version="1.0">
 <folder name="Bilder"/>
 <folder name="Musik"/>
 <folder name="Andere Dateien"/>
 <folder name="Töne"/>
 <folder name="Videos"/>
</folder-listing>done
Disconnecting...done
michael@Seeschlange:~$ 
Das verzögernde Scannen der Geräte lässt sich abschalten, wenn man obexftp die Adresse des Bluetoothgerätes auf der Kommandozeile direkt mitteilt:
michael@Seeschlange:~$ obexftp -B 6 -b YY:YY:YY:YY:YY:YY -l
Browsing YY:YY:YY:YY:YY:YY ...
Channel: 6
Connecting...done
Receiving "(null)"... <?xml version="1.0"?>
<!DOCTYPE folder-listing SYSTEM "obex-folder-listing.dtd">
<folder-listing version="1.0">
 <folder name="Bilder"/>
 <folder name="Musik"/>
 <folder name="Andere Dateien"/>
 <folder name="Töne"/>
 <folder name="Videos"/>
</folder-listing>done
Disconnecting...done
Das Herunterladen bzw. Ablegen von Dateien erfolgt ebenfalls durch entsprechende Parameter, allerdings ist obexftp-frontend wirklich eine empfehlenswerte Alternative, die einem die meiste Arbeit abnimmt. Einen Fallstrick gibt es: obexftp-frontend erwartet eine Java-6-Umgebung, diese wird vom u.A. vom Paket sun-java6-jre bereitgestellt.

Kommentare

Neue Kommentare sind aus Spamgründen leider nicht möglich.