Bluetooth mit Linux
Bluetooth /ˈbluːtuːθ/ ist ein in den 1990er Jahren ursprünglich von Ericsson entwickelter Industriestandard gemäß IEEE 802.15.1 für die drahtlose (Funk-)Vernetzung von Geräten über kurze Distanz. Bluetooth bietet eine drahtlose Schnittstelle, über die sowohl mobile Kleingeräte wie Mobiltelefone und PDAs als auch Computer und Peripheriegeräte miteinander kommunizieren können. Ein solches Netzwerk wird auch als Wireless Personal Area Network (WPAN) bezeichnet. Hauptzweck von Bluetooth ist das Ersetzen von Kabelverbindungen zwischen Geräten.
(Bluetooth-Logo verlustfreie SVG-Version)
Theoretisch kann eine Datenübertragungsrate von 706,25 kBit/s beim Herunterladen (Download) bei gleichzeitigen 57,6 kBit/s beim Heraufladen (Upload) erreicht werden (asymmetrische Datenübertragung). Seit der Version 2.0 + EDR können Daten durch EDR (Enhanced Data Rate) maximal etwa dreimal so schnell übertragen werden, also mit rund 2,1 Mbit/s. Bereits seit Version 1.1 kann ein Bluetooth-Gerät gleichzeitig bis zu sieben Verbindungen aufrechterhalten, wobei sich die beteiligten Geräte die verfügbare Bandbreite teilen müssen (shared medium). Quelle
Unter Ubuntu installiert man die gebrauchten Pakete mit
apt-get install bluez-utils bluez-gnome gnome-bluetooth
optional kann man noch bluemon (ein bluetooth-monitor) dazu nehmen.
Für headsets muss das Paket bluez-btsco
ebenfalls installiert werden.
Tipps und Tricks
- Bluetooth deaktiviert man (z. B. aus Stromspargründen) mit den beiden Zeilen:
hciconfig hci0 down rmmod hci_usb
- Für KDE gibt es das Paket
kdebluetooth
, im Konqueror muss man dann nur nochbluetooth:/
in der Adresszeile eingeben. - Mit
watch hcitool con
kann man aktuelle Verbindungen überwachen. - Die Zuordnungen von Bluetooth-Geräten und ihren PINs sowie weitere Information werden im Verzeichnis
/var/lib/bluetooth
abgelegt (geordnet nach der MAC-Adresse der BT-Adaptern).
Links
Funktionstest
Wenn der Befehl hciconfig
(wie hier im Beispiel) in der dritten Zeile DOWN anzeigt
hci0: Type: USB BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0 DOWN RX bytes:0 acl:0 sco:0 events:0 errors:0 TX bytes:0 acl:0 sco:0 commands:0 errors:0
muss der Bluetooth-Adapter noch aktiviert werden (hciconfig hci0 up
).
Geräte in Rechweite suchen
Der Befehl
hcitool scan
sollte eine Ausgabe nach folgenden Schema ergeben.
Scanning ... 00:80:37:25:55:96 Nokia 6630 00:E0:03:04:6D:36 Nokia 6210
Die unterstützten Profile kann man mit dem Befehl
sdptool browse 00:80:37:25:55:96
auswerfen lassen, die MAC Adresse (00:80:37…) muss man anpassen.
Dabei bedeuten die Abkürzungen:
- L2CAP: „Logical Link Control and Adaptation Protocol“
- RFCOMM: serielle Übertragung
- OBEX: Object Exchange
- BNEP: Netzwerk
- HIDP: Eingabegeräte.
Serielle Verbindung (Kopplung)
Die richtigen Einstellungen in der Datei /etc/bluetooth/rfcomm.conf
eintragen:
rfcomm0 { # Automatically bind the device at startup bind yes; # Bluetooth address of the device device 00:80:37:25:55:96; # RFCOMM channel for the connection channel 1; # Description of the connection comment "Nokia 6630"; }
nach dem Neustart von Bluetooth (/etc/init.d/bluetooth restart
) sollte der Befehl rfcomm -a
eine ähnliche Ausgabe zeigen:
rfcomm0: 00:15:A0:4D:5A:3A channel 1 clean
Falls nicht bzw. alternativ zu „bind yes“ kann man das Gerät auch manuell Binden:
rfcomm connect 0 00:15:A0:4D:5A:3A 1
Das Telefon ist nun unter /dev/rfcomm0
erreichbar und kann über ein Wählprogramm angesprochen werden.
Falls ein Programm auf den Zugriff über /dev/modem besteht, legt man einen symbolischen Link (mit sudo ln -s /dev/rfcomm0 /dev/modem
)an.
Internet-Einwahl (DUN)
Die Einwahl geht mit vielen Programmen, genannt wird immer wieder wvdial und kppp. KPPP wird man benutzen wenn man KDE benutzt bzw. unter Gnome z.B. zu wenig Arbeitsspeicher kein Problem ist. Andernfalls erledigt das Konsolenbasierte wvdial
die Aufgabe ebenso.
mit KPPP
Kppp ist sehr komfortabel und braucht für den Provider o2 (ggf. andere Daten eintragen) und dem Nokia 6630 (spielt hier keine Rolle) folgende Einstellungen:
- Karteireiter „Zugänge“: „Neu …“
- Wählen: Zugangsname: (egal) Telefonnummer: *99# Authentifizierung: PAP
- IP: dynamische IP
- Gateway: Standard-Gateway, unten ankreuzen: Standardgateway auf diesen Gateway setzen. Übrigens spricht kppp im Verbindungsfenster vom „Adresse auf Fremdrechner“ (bei mir 10.6.6.6).
- der Rest ist optional
- Karteireiter „Modems“: „Neu …“
- Modem-Name (egal) z.B. Nokia 6630
- Modemgerät: /dev/rfcomm0
- Flusskontrolle: Hardware
- Zeilenende: CR
- Geschwindigkeit: 460800
- Vor dem wählen auf Freizeichen warten
- Unterkarteireiter „Modem“: :
- der APN internet oder surfo2 (je nach Tarif) stellt so ein: „Modembefehle“ → Init-Zeichenfolge 2: AT+CGDCONT=1,„IP“,„surfo2“
mit wvdial
Die Datei /etc/wvdial.conf sollte um einen Eintrag für die Interneteinwahl ergänzt werden: Im Beispiel hier für den Provider o2. Vorrausgesetzt wird eine stehende Bluetooth-Verbindung über rfcomm als Gerät /dev/rfcomm0
.
[Dialer Defaults] Phone = Username = Password = New PPPD = yes [Dialer 6630] Modem = /dev/rfcomm0 ISDN = off Modem Type = Analog Modem Baud = 460800 Init = ATZ Init2 = AT+CGDCONT=1,"IP","surfo2" Phone = *99# Dial Prefix = Dial Attempts = 1 Dial Command = ATD Ask Password = off Password = gprs Username = eplus Auto Reconnect = off Abort on Busy = off Carrier Check = on Check Def Route = on Abort on No Dialtone = on Stupid Mode = off Idle Seconds = 0 Auto DNS = on
Andere Konfigurationsbeispiele sind hier aufgelistet bzw. hier eine passende Fehlerhilfe.
Danach kann die Einwahl mit wvdial 6630
gestartet werden. Statt 6630 gibt man den Name des Profils an.
Wenn man auch das Standard-gateway automatisch eingestellt haben möchte (und nicht nur die DNS-Server), muss man wvdial als root starten:
sudo wvdial 6630
Fehlersuche
siehe auch: KPPP: Most Frequently Asked questions
kppp (in Ubuntu 6.06 dapper, nicht in Ubuntu 7.04 feisty) meldet Fehler Couldn't find interface ppp0: No such device
:
- entweder reicht es vor dem Vebinden anderen Netzwerkschnittstellen zu deaktivieren
- oder (bei mir ging es nur so) in der Datei /etc/ppp/options die Zeile/das Wort
auth
suchen und es gegennoauth
austauschen.
They are saying to remove „auth“ and replace it with „noauth“ in /etc/ppp/options Also, remove it from the kppp config menu.
Wenn die Verbindung geklappt hat und man trotzdem keine Daten empfängt: klappt ein ping auf eine bekannte IP? Beispielweise ping 85.25.136.135 (für diesen Server?).
- ja? → DNS-Problem.
- nein? → die Standardroute stimmt nicht.
Lösung der Probleme
- Standardroute richtig? Wenn nicht:
route add default gw 10.6.6.6
. 10.6.6.6 sollte durch die richtige IP des Gateways ersetzt werden, diese findet sich im Verbindungsstatistikfenster neben „Adresse auf Fremdrechner“ (bei mir 10.6.6.6).
nameserver 62.134.11.4 nameserver 195.182.110.132
enthalten. Wenn nicht, dann ändern (sudo nano /etc/resolv.conf).
Links
Headset unter Linux
Headset ohne A2DP
Wenn man sein Headset lediglich für Sprache (z.B. VoIP) einsetzen will, reicht die mäßige Soundqualität (8000khz mono) aus.
Das Modul snd_bt_sco
richtet eine Soundkarte (für ALSA) ein, auf die dann jedes Programm zugreifen kann. Dazu muss das Modul vorher mit
sudo modprobe snd_bt_sco
geladen werden. Danach taucht sie in der Liste der Soundkarten auf, was man mit
cat /proc/asound/cards
überprüfen kann. Dauerhaft kann man das Modul in der /etc/modules
eintragen (einfach snd_bt_sco in einer eigenen Zeile eintragen und abspeichern).
Nachdem man mit hcitool scan
die MAC-Adresse des entsprechende Gerätes herausbekommen hat, verbindet man sich zum Headset mit
btsco -v MAC
Die Qualität dürfte für Sprache reichen, für mehr muss man A2DP einrichten (siehe unten). Ausführlichere Informationen bietet die Seite von Christoph Langner noch ausführlicher (und einfacher) ist die Seite von Ubuntuusers für Bluetooth-headsets.
Headset mit A2DP
Wenn beide Geräte A2DP (Advanced Audio Distribution Profile) beherrschen kann Audio in hoher Qualität angehört werden. Dazu muss man in seiner Linux-Distribution A2DP-Unterstützung aktivieren.
Ab Ubuntu 7.10 (gutsy), bzw. bei ähnlich aktuellen Distributionen, dürfte die Einrichtung mit dem Paket bluetooth-alsa
(aus „universe“) sehr viel einfacher sein.
Auf 7.04 (feisty) ist leider ein etwas umständlicherer Weg nötig:
- aus Debian libsbc und bluetooth-alsa installieren
.a2dprc
anlegen (gedit ~/.a2dprc
) und mit diesem Inhalt füllen:[a2dpd] rate=44100 sbcbitpool=53 flags=0 enablereversestereo=1 enableautoconnect=1 timeout=2000 cmdplay=xmms --play cmdpause=xmms --pause cmdprev=xmms --rew cmdnext=xmms --fwd cmdnew=xmms --play cmdstop=xmms --stop enableavrcp=1 enablerereadconfig=1 enabledebug=1 flags=0 enablestdin=1 enableredirectalsa=0 address=XX:XX:XX:XX:XX:XX alsaoutput=
unter
address
muss die korrekte MAC-Adresse eingetragen werden!.asoundrc
(gedit ~/.asoundrc
) und mit diesem Inhalt füllen:pcm.headset { @args [BDADDR TIMEOUT] @args.BDADDR { type string default "00:13:1B:00:1F:02" } @args.TIMEOUT { type integer default 6000 } type sco bdaddr $BDADDR timeout $TIMEOUT } ctl.headset { type sco } pcm.a2dpd { type a2dpd }
- das Abspielprogramm muss auf das richtige Ausgangsplugin konfiguriert werden. VLC muss in ~/.vlc/vlcrc folgende Zeilen enthalten:
- das Audio-streaming (mit a2dp) starten:
sudo a2dpd
Links
I now have stereo bluetooth on my desktop Bluetooth-alsa HOWTO: Bluetooth headset for Skype in Feisty How to Connect a Jawbone Headset to a Bluetooth Laptop on Ubuntu Gutsy (And Then Use Skype)
Bluetooth-Profile
Profile sind einzelne Fähigkeiten die ein Gerät versteht:
Name (Kürzel) | Funktion |
---|---|
Advanced Audio Distribution Profile (A2DP) | Übermittlung von Audiodaten in hoher Qualität (gute Headsets und Musikwiedergabe) sehr wichtig. Geräte mit A2DP |
Dial-up networking (DUN) | Internet-Einwahlverbindung |
File Transfer Profile (FTP) | Dateiübertragung |
Headset Profile (HSP) | Sprachausgabe per Headset |
Human Interface Device Profile (HID) | Eingabe |
Serial Port Profile (SPP) | Serielle Datenübertragung |
Synchronisation Profile (SYNCH) | Datenabgleich |
Bluetooth-Netze bilden
Für das Erstellen von (Pico-) Netzen über Bluetooth bietet sich das Paket grml-btnet
(aus dem universe) an.
Tools
- bdaddr: Ändert die Bluetooth-Geräteadresse
- bluesnarfer: versucht persönliche Informationen aus Bluetooth-Geräten auszulesen
- btscanner: Bluetooth-scanner
- ghettotooth: ein Perl-Skript für das permanente Scannen nach Geräten
- gnokii: tools für SMS, Telefonbuch, Kalender, Anrufverwaltung
- Redfang findet versteckte (non-discoverable) Geräte durch ausprobieren der letzten 6 Bytes der Bluetooth-Adresse
Dateien senden
Senden und empfangen von Dateien via Bluetooth
- obexpushd: Als Dienst auf dem Rechner installiert und schon können mobile Geräte Dateien schicken, die dann im Home-Ordner abgelegt werden
- obexfs
- obexftp
- p3nfs: Zugriff auf Dateisysteme von Symbian-Handys
Syncronisation
- MultiSync: Syncronisationstools (Gnome) für Adressbücher, Kalender, …
- opensync-plugin-irmc
- kdebluetooth-irmcsync
bluez-Tools
- /usr/bin/ciptool - Bluetooth Common ISDN Access Profile (CIP)
- /usr/bin/dund - Bluetooth LAP (LAN Access over PPP) daemon
- /usr/bin/hcitool - HCI Tool (diverse Informationen u.a. auch Verbindungsqulität)
- /usr/bin/l2ping - Ping Bluetoothgeräte über das L2CAP-Protokoll
- /usr/bin/pand - BlueZ Bluetooth PAN daemon (connect to ethernet networks using Bluetooth)
- /usr/bin/rfcomm - RFCOMM (Sub-System des Kernels) configuration utility
- /usr/bin/sdptool - control and interrogate SDP servers (SDP bietet einen Mechanismus zum Auffinden von Diensten und deren Eigenschaften an)
- /usr/sbin/hciattach - attach serial devices via UART HCI to BlueZ stack
- /usr/sbin/hciconfig - konfiguriert Bluetooth-Geräte