BlueTooth unter Linux

(This is a German article from my old homepage.)

Einführung

BlueTooth ist ein Standard zur Datenübertragung per Funk, speziell ausgelegt für geringe Reichweiten. Diese Technologie ermöglicht direkte drahtlose Kommunikation zwischen Handys und Headsets, aber auch zwischen PDAs bzw. Notebooks und Handys. Letztere können dann als Modem zur Internet-Anbindung im Mobilfunknetz verwendet werden.

Für den LinuxKernel gibt es für BlueTooth ein Treiberpaket namens
Bluez. Bluez ist inzwischen Bestandteil gängiger Linux-Distributionen.

Um einen PC oder Notebook BT-fähig zu machen, eignen sich USB-Dongles am besten. Dies sind kleine Stecker für den USB-Port, die die ganze nötige Hardware enthalten. Es sind aber auch PCMCIA-Karten erhältlich und viele Laptops wie der Lenovo R52 haben BT auch bereits eingebaut.

Welche BT-Geräte unter Linux unterstützt werden, können Sie bei Marcel Holtmann nachlesen.

Installation

Bei allen Distributionen ist BlueTooth-Unterstützung inzwischen bereits im mitgelieferten Standard-Kernel integriert.

Neben den Kernelmodulen sind ggf. noch die folgenden Pakete zu installieren:

  • bluez-libs
  • bluez-utils
  • bluez-sdp
  • bluez-pan

Sind in der jeweiligen Linux-Distribution die aktuellen Pakete nicht enthalten, ist der Download von der Bluez-Website sinnvoll.

Inbetriebnahme

Konfiguration und Starten des HCI-Daemons

Der “Bluetooth Host Controller Interface”-Daemon (hcid) ist der zentrale BT-Dienst.

Seine Konfiguration ist in der Datei /etc/bluetooth/hcid.conf abgelegt.

Der hcid wird von root mit einem der Kommandos

$ /etc/init.d/hcid start
$ /etc/init.d/bluez-utils start

aktiviert. Nach Änderungen an der Konfiguration muss er mit dem Argument “restart” statt “start” neu initialisiert werden.

Erster Test

Mit dem Kommando hcitool scan sucht der Rechner nach erreichbaren BT-Geräten. Ein BT-fähiges Handy (zB Nokia 6310, Ericson T68i) sollte hierzu mit aktiviertem BT-Empfang bereitliegen. Andere BT-Geräte wie zB ein Headset sollten vom Handy abgekoppelt sein, um Störungen zu vermeiden. Als Ausgabe liefert hcitool scan eine Liste der gefundenen Geräte mit einer Geräteadresse und ihrem Namen:

Scanning ...
00:60:48:6D:5A:D3    Nokia 6310i

BT-Handy als Modem verwenden

Konfiguration des hcid

Für die Nutzung eines BT-Geräts als Modem (z.B. ein UMTS-Handy) ist es wichtig, im device-Block die richtige Geräteklasse zu setzen:

class 0x100100;

Kopplung

Das Kommando

$ rfcomm bind 0 00:60:48:6D:5A:D3

öffnet eine Verbindung vom Rechner zum Handy (“Pairing”, s.u.) anhand dessen Geräteadresse.

Eine feste Zuordnung der Geräte erfolgt in /etc/bluetooth/rfcomm.conf. Damit wird direkt beim Zugriff auf die Gerätedatei (i.d.R. /dev/rfcomm0) die Kopplung ausgelöst.

rfcomm0 {
  bind yes;
  # Bluetooth address of the phone
  device 00:12:D1:7D:33:A9;
  # RFCOMM channel for the connection
  channel 2;
  # Description of the connection
  comment "UMTS dial-up";
}

Pairing

Beim “Pairing” nehmen den beiden Geräte Kontakt miteinander auf. Beim Erstkontakt muss sich der Rechner mit einer mindestens vierstelligen PIN-Nummer authentifizieren.

Die PIN-Nummer muss in der Datei /etc/bluetooth/pin abgelegt werden.

In KDE eignet sich zur Abfrage der PIN am besten das Programm kbluepin, das in /etc/bluetooth/hcid.conf wie folgt eingetragen werden muss:

pin_helper /usr/lib/kdebluetooth/kbluepin

Den Erstkontakt löst man einfach durch ein kurzes Modemkommando aus:

$ echo "ATZ" > /dev/rfcomm0

Nun ist auf dem Handy die PIN einzugeben. Für die Zukunft erspart man sich die Eingabe, indem man die erfolgreiche Paarung im Handy speichern lässt. Dies geschieht bei manchen Handies (Nokia 6310) automatisch, bei anderen (Ericsson T68i) muss es manuell im Menü ausgewählt werden.

Internet-Anbindung

Ist das Pairing erst einmal vollzogen, kann /dev/rfcomm0 wie eine gewöhnliche Modem-Schnittstelle genutzt werden. Mit den üblichen Mitteln kann also darüber eine PPP-Verbindung ins Internet aufgebaut werden.

In Ubuntu Linux habe ich für den UMTS-Zugang in /etc/ppp/peers/umts folgende Daten abgelegt:

hide-password
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/umts"
debug
/dev/rfcomm0
460800
defaultroute
noipdefault
user "vodafone"
remotename nokia-e61
ipparam nokia-e61
usepeerdns

Das passende Chatscript liegt in /etc/chatscripts/umts:

# ispauth PAP
 # abortstring
 ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 
 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
 # modeminit
 '' "ATZ"
 OK "AT+CGDCONT=1,42IP42,42web.vodafone.de42"
 # ispnumber
 OK-AT-OK "ATDT*99***1#"
 # ispconnect
 CONNECT dc
 # prelogin

 # ispname
 # isppassword
 # postlogin

“web.vodafone.de” ist dabei der “Access Point Name”, der von Provider zu Provider unterschiedlich ist.

Da ein Login nicht notwendig ist, habe ich in /etc/ppp/pap-secrets für Benutzername und Passwort Dummywerte eingetragen:

"vodafone" nokia-e61 "password"

Eine UMTS-Verbindung kann nun ganz einfach mit dem Kommando pon umts auf- und mit poff wieder abgebaut werden.

Vernetzung

Mittels der “Private Area Network”-Funktion (PAN) können Rechner per Funk vernetzt werden. Dazu wird mit dem Kommando

$ pand -s -r NAP -M

ein Rechner zum “Network Access Point” und “Master” ernannt, der zunächst auf den Verbindungsaufbau durch die Gegenstation wartet. Diese baut die Verbindung zum Master anhand dessen Geräteadresse wie folgt auf:

$ pand --service NAP -b aa:bb:cc:dd:ee:ff

Man kann auch statt zu einer definierten Geräteadresse die Verbindung einfach zum erstbesten BT-Gerät aufbauen:

$ pand --service NAP -Q

Nach erfolgreichem Verbindungsaufbau existiert auf beiden Stationen ein neues Netzwerk-Interface namens bnep0, das wie üblich mit ifconfig konfiguriert werden kann:

$ ifconfig bnep0 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up

Spezielle BlueTooth-Geräte

AVM Blue Fritz! USB

Zur Anbindung ihrer BlueTooth-Produkte unter Linux hat AVM eine eigene FAQ-Sammlung online, bei SuSE findet sich eine zusätzliche Anleitung.

1 thought on “BlueTooth unter Linux”

  1. Hallo,
    ich habe openSuSE12.1 auf zwei Rechnern installiert sowie das Paket “bluez-compat” (wegen pand). Eine rfcomm-Verbindung klappt problemlos, leider kann ich aber keine bnep-Verbindung herstellen: Die Geräte sind erst ca. 3 sek. verbunden aber, dann wird die Verbindung zurückgesetzt. Was kann ich tun? Hier ein Auszug von hcidump:
    > ACL data: handle 12 flags 0x02 dlen 16
    L2CAP(s): Connect rsp: dcid 0x0040 scid 0x0040 result 1 status 1
    Connection pending – Authentication pending
    > ACL data: handle 12 flags 0x02 dlen 16
    L2CAP(s): Connect rsp: dcid 0x0040 scid 0x0040 result 3 status 0
    Connection refused – security block
    > HCI Event: Encryption Key Refresh Complete (0x30) plen 3
    status 0x00 handle 12
    > HCI Event: Number of Completed Packets (0x13) plen 5
    handle 12 packets 1
    < HCI Command: Disconnect (0x01|0x0006) plen 3
    handle 12 reason 0x13
    Reason: Remote User Terminated Connection

Comments are closed.