[[Vorlage(Getestet, focal)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/bluetooth.png, 48, align=left)]] [:Bluetooth:] ist eine Nahfeld-Funktechnik, die meist zur Kommunikation mit tragbaren Geräten wie z.B. Mobiltelefonen dient. Auch externe Peripheriegeräte wie Tastaturen, Zeigegeräte (Computer-Mäuse), Kopfhörer mit Mikrofon (Headsets) oder normale Kopfhörer können angebunden werden. Die notwendige Funkschnittstelle ist bei diesen Geräten bereits eingebaut. Beim Computer lässt sie sich via USB (Bluetooth-Dongle) nachrüsten, falls nicht bereits vorhanden. = Installation = Folgende Pakete müssen für ein korrektes Funktionieren von Bluetooth installiert sein [1], die nachfolgende Programme sind grundsätzlich in der Standardinstallation enthalten: {{{#!vorlage Paketinstallation bluez bluez-cups bluez-obexd }}} == Prüfung == Vereinzelt werden USB-Sticks vom Computer nicht erkannt oder interne Funkschnittstellen sind defekt. Im Terminal [3] kann mit dem Befehl {{{#!vorlage Befehl lsusb | grep Bluetooth }}} festgestellt werden, ob Bluetooth-Geräte am USB-Bus vorhanden sind. Dabei werden auch [:Gerätemanager/#USB:nähere Informationen zum Gerät] angezeigt. Zum Beispiel sieht die Ausgabe der betreffenden Zeile so aus: {{{ Bus 003 Device 004: ID 1310:0001 Roper Class 1 Bluetooth Dongle }}} Manche Bluetooth-Geräte sind nicht per USB mit dem Rechner verbunden. Alle betriebsbereiten Funkgeräte können aber mit diesem Befehl aufgelistet werden: [[Vorlage(Befehl, "rfkill --output-all" ) ]] Beispielausgabe: {{{ ID TYPE DEVICE TYPE-DESC SOFT HARD 0 bluetooth hci0 Bluetooth entsperrt entsperrt 1 wlan phy0 Wireless LAN entsperrt entsperrt }}} Wichtig ist hier, dass das Bluetooth-Gerät entsperrt ist. Eine Sperre per Software kann mit [:rfkill:] ausgeschaltet werden, bei einer Hardware-Sperre muss man den Rechner nach einem manchmal schwer zu findenden Schalter absuchen oder die Bedienungsanleitung des Rechners lesen. Schließlich kann man auch noch überprüfen, ob die betreuenden [:Dienste:] gestartet wurden: [[Vorlage(Befehl, "systemctl status bluetooth.service" ) ]] == Treiber == Gelegentlich fehlt auch der geeignete Treiber, siehe dazu [:Archiv/WLAN/Linux-backports-modules:Linux-backports-modules]. Möglicherweise fehlt aber auch nur die [#Problembehebung Firmware]. = Konfiguration = Nach der Installation muss der Bluetooth-Dienst evtl. neu gestartet werden. Dies geschieht im Terminal [3] mit dem Befehl {{{#!vorlage Befehl systemctl restart bluetooth.service }}} Sind die benötigten Pakete installiert, wird beim Einstecken des Bluetooth-Dongles normalerweise automatisch das `hcid` (Host Controller Interface Device) gestartet. Dieses dient als Schnittstelle zum Bluetooth-Gerät. Informationen über das Bluetooth-Gerät erhält man mit dem Befehl: {{{#!vorlage Befehl hciconfig --all }}} Die Option `--all` sorgt dabei für eine erweiterte Informationsausgabe. Zum Beispiel sieht die Ausgabe so aus: {{{ hci0: Type: USB BD Address: 00:0B:0D:33:8E:12 ACL MTU: 120:20 SCO MTU: 64:0 UP RUNNING PSCAN ISCAN RX bytes:834 acl:21 sco:0 events:51 errors:0 TX bytes:2926 acl:39 sco:0 commands:18 errors:0 Features: 0xff 0xff 0x05 0x38 0x18 0x18 0x00 0x00 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'konidesktop-0' Class: 0x100100 Service Classes: Device Class: Computer, Uncategorized HCI Ver: 1.2 (0x2) HCI Rev: 0x0 LMP Ver: 1.2 (0x2) LMP Subver: 0x757 Manufacturer: Silicon Wave (11) }}} Von besonderem Interesse sind hier die BD-Hardware-Adresse in der zweiten Zeile sowie der Name und die Klasse (`Class`). Der Name wird automatisch vergeben und ist mit dem Namen des Computers identisch (bis auf das angehängte `-0`). Die Klasse gibt an, welche Geräteart mit diesem Bluetooth-Anschluss verbunden ist. Wenn der Gerätename nicht angezeigt wird oder geändert werden soll, kann dazu folgender Befehl verwendet werden: {{{#!vorlage Befehl hciconfig hci0 name NEUER_NAME }}} Dabei steht in diesem Beispiel `hci0` für ein Bluetooth-Gerät, das mit dem Befehl `hciconfig` angezeigt wurde. = Verbindung mit dem Mobiltelefon = {{{#!vorlage Hinweis Anstelle von Bluetooth kann auch WLAN oder USB (über ADB) verwendet werden. Bekannte Anwendungen für Android sind [:KDE_Connect:] (Dateiübertragung, Anrufe, SMS, Benachrichtigungen spiegeln) oder [github:Genymobile/scrcpy:scrcpy] (Spiegeln des Androidtelefons auf den Computer). }}} Beim Mobiltelefon muss man nun die Bluetooth-Menüpunkte durchgehen - diese sind bei jedem Gerät woanders untergebracht. Besonders wichtig ist, dass es auf ''"Sichtbar"'' eingestellt wird. Außerdem kann ein Name vergeben werden, der nachher bei der Verbindung angezeigt wird. Bei einigen Telefonen kann man sich auch die verfügbaren Dienste anzeigen lassen. Wenn man diese Einstellungen vorgenommen hat und Bluetooth am Mobilgerät eingeschaltet ist, kann man am Computer im Terminal mit dem folgenden Befehl nach verfügbaren Mobilgeräten suchen: {{{#!vorlage Befehl hcitool scan }}} Nun werden alle gefundenen Geräte (außer dem PC, der die Anfrage gestartet hat) mit ihrer Hardware-Adresse und dem Namen angezeigt. Das sieht beispielsweise so aus: {{{ Scanning ... 00:0E:07:73:3C:B1 K700i }}} Die Hardware-Adresse des Mobilgerätes ist dementsprechend eine andere als die des USB-Dongles. = Pairing = Der Begriff "Pairing" (Paarung) bezeichnet die (permanente) Bindung zweier Geräte aneinander. Bei Verbindungen über Bluetooth oder andere Funktechniken ist es sehr sinnvoll, wenn sich die Geräte bei jeder Verbindung automatisch identifizieren. Damit zwei Geräte aneinander gebunden werden können, müssen sie zunächst einander bekannt gemacht werden. Dies geschieht bei Bluetooth-Verbindungen durch eine gemeinsame [wikipedia:Persönliche_Identifikationsnummer:PIN]. Diese Nummer muss bei der ersten Kontaktaufnahme auf allen beteiligten Geräten kurz nacheinander eingegeben werden. Je nach Anwendung kann eine PIN auch zufällig ausgewählt werden. Sollte das Pairing fehlschlagen (Fehlermeldung des Mobiltelefons und es erscheint kein Fenster für den Schlüssel auf dem Desktop), so muss man unter GNOME Bluetooth von Hand starten: ''"Einstellungen -> Bluetooth"'' in der oberen Fensterleiste den Regel auf an stellen. Im Feld Geräte erscheint das gefundene Mobiltelefon. Diese Zeile muss angeklickt werden und der Button ''"weiter"'' ist aktiviert. In der Standard-Einstellung wird eine PIN automatisch generiert. Mit Betätigen des Buttons ''"weiter"'' wird diese sowohl auf dem Rechner als auch im Mobiltelefon angezeigt und muss auf beiden Geräten bestätigt werden. = Deaktivierung beim Start mit systemd = Der Service kann deaktiviert werden mit: {{{#!vorlage Befehl sudo systemctl disable bluetooth.service }}} Sollte man den Bluetooth Dienst doch wieder benutzen wollen, muss im Terminal folgender Befehl eingegeben werden {{{#!vorlage Befehl sudo systemctl start bluetooth.service }}} Danach steht der Dienst bis zum nächsten Neustart wieder zur Verfügung. = Konfigurationsdateien = Mit der Installation bluez werden unter '''/etc/bluetooth/''' verschiedene Konfigurationsdateien angelegt. Bei Ubuntu 20.04 sind Änderungen in der Datei '''rfcomm.conf.dpkg-remove''' notwendig, wenn dieses Merkmal genutzt werden soll. Dazu benötigt man [:sudo:Root-Rechte]. == main.conf == Die Datei '''/etc/bluetooth/main.conf''' ist bei Ubuntu vorhanden, aber komplett [:Shell/Bash-Skripting-Guide_für_Anfänger/#Kommentare-einfuegen: auskommentiert]. [[Anker(rfcomm)]] == rfcomm.conf.dpkg-remove == Einige Programme benötigen zur Kommunikation eine serielle Schnittstelle. Diese wird bei Bluetooth mit `rfcomm` zur Verfügung gestellt. Damit lassen sich dem Mobiltelefon Modembefehle senden. Dies wird z.B. benötigt, wenn man den Akkustand abfragen oder über [wikipedia:GPRS:] ins Internet gehen will. Bei der Einrichtung wird das Mobilgerät mittels seiner Hardwareadresse an ein rfcomm-device gebunden. Evtl. muss dabei auch ein Kanal angegeben werden. Wie dies genau funktioniert, wird in der jeweiligen Anleitung für die entsprechende Software erklärt. Die Datei '''rfcomm.conf.dpkg-remove''' enthält diejenigen rfcomm-devices, die beim Systemstart schon eingerichtet werden sollen. Ein recht gutes Beispiel ist bereits in der Datei gegeben. Nähere Informationen zum Umgang mit rfcomm sind in der [man:rfcomm:rfcomm-manpage] {en} erhältlich. = Datenübertragung = == Dateien vom PC zum Mobiltelefon == ''Einstellungen -> Bluetooth -> Verbundenes Gerät -> Dateien Senden'' Auf das Feld ''"Dateien senden..."'' (siehe Mauszeiger im Bild) klicken, es öffnet das Fenster. In diesem Fenster kann zwischen ''"suchen"'' (Lupensymbol), ''"Abbrechen"'' und ''"Auswahl"'' gewählt werden. Ist die zu sendende Datei gefunden und markiert, wird die Übertragung mit dem Betätigen des ''"Auswahl"''-Buttons eingeleitet. Die Annahme am Mobiltelefon muss bestätigt werden. Unter Android wird die Datei idR. im Ordner '''Bluetooth''' abgelegt. = Dienste = SDP (Service Discovery Protocol) dient zur Abfrage der auf dem entfernten Gerät verfügbaren Dienste (Bluetooth Profile). Welche Dienste das Gerät anbietet, lässt sich mit dem Befehl {{{#!vorlage Befehl bluetoothctl info Hardwareadresse }}} auslesen. Die Hardwareadresse ist hierbei die Adresse des Bluetoothgeräts. Neben Informationen wie den Namen und ob das Gerät verbunden ist, werden die verfügbaren Bluetooth-Profile als UUIDs aufgelistet. Die Adresse kann unter ''"Einstellungen -> Bluetooth -> Gerätename"'' eingesehen werden. = Anwendungen = Es gibt zahlreiche Programme, die Kommunikation, Datenaustausch, Synchronisation und mehr zwischen mobilen Geräten und dem Rechner über die Bluetooth-Schnittstelle ermöglichen. Diese sind im Artikel [:Anwendungen für Mobilgeräte:] zusammengefasst. Auch stationäre Computer können per Bluetooth verbunden werden. = Verbinden von Gamecontrollern = Gamecontroller lassen sich wie wie andere Geräte verbinden. Dazu muss zunächst der pairing-Knopf auf den Controller gedrückt werden, dass Gerät erscheint anschließend in den Einstellungen, den nötigen Knopf entnimmt man der jeweiligen Bedienungsanleitung. Zu beachten ist, dass sich die meisten Gamecontroller nicht laden lassen, während sie über Bluetooth verbunden sind. Sollte eine individuelle Belegung der Tasten benötigt werden kann diese mit [:evdev:] vorgenommen werden. Für Funktionen wie die Vibration muss entweder ein entsprechendes Kernelmodul für den Controller nachinstalliert werden oder es ist bereits im Kernel vorhanden. = Problembehebung = == Firmware fehlt == Manche Broadcom-Bluetooth-Geräte benötigen eine spezielle Firmware, die aus Lizenzgründen nicht von Ubuntu direkt ausgeliefert werden darf. Dies äußert sich meist darin, dass Bluetooth zwar aktiviert werden kann, aber keine Geräte gefunden werden. Sicher feststellen lässt sich das Problem durch den Aufruf von: {{{#!vorlage Befehl dmesg | grep bluetooth # bis 20.04 sudo dmesg | grep bluetooth # ab 20.10 }}} Fehlt die Firmware, so taucht in der Ausgabe in etwa diese Zeile auf: {{{ [ 12.314809] bluetooth hci0: Direct firmware load for brcm/BCM43142A0-04ca-2009.hcd failed with error -2 }}} oder {{{ [ 12.314809] bluetooth hci0: Direct firmware load for brcm/BCM.hcd failed with error -2 }}} In ersten Fall fehlt die Firmware '''BCM43142A0-04ca-2009.hcd''' für das Gerät mit der ID `04ca:2009`. Wird wie im zweiten Fall lediglich das Fehlen der Firmware '''brcm/BCM.hcd''' bemängelt, so muss die ID noch [#Pruefung ermittelt werden]. Die benötigte Datei lädt man aus [github:winterheart/broadcom-bt-firmware/tree/master/brcm:diesem Sammelrepository] {dl} herunter und platziert sie unter '''/lib/firmware/brcm'''. Dabei muss man die Datei ggf. umbenennen, so dass sie dem Namen in der obigen Meldung entspricht. Dies könnte im zweiten Beispiel so aussehen: {{{#!vorlage Befehl sudo mv ~/Downloads/BCM43142A0-04ca-2009.hcd /lib/firmware/brcm/BCM.hcd }}} Nach einem Neustart sollte das Bluetooth-Gerät nun korrekt funktionieren. Sollte die passende Firmware noch nicht im Sammelrepository zu finden sein, so lässt sie sich aus dem vom Hersteller bereitgestellten Windows-Treiber extrahieren (Details dazu auf [github:winterheart/broadcom-bt-firmware:Github] {en} und in [bug:1366418:diesem Bug]). == Codec Auswahl, bei Kopfhörern/Lautsprechern == Falls Probleme mit der Tonausgabe (Qualität, stottern) bestehen kann dies mit dem verwendeten Codec zusammenhängen. Unter 20.04 kann man diverse Codecs aus diesem PPA installieren: [[Vorlage(PPA, berglh/pulseaudio-a2dp)]] {{{#!vorlage Paketinstallation pulseaudio-modules-bt libldac }}} {{{#!vorlage Befehl sudo systemctl restart bluetooth.service }}} Das PPA wird nicht mehr gewartet. Die Codecs des PPAs wurden mittlerweile in das Pulseaudio-Projekt übernommen und könnten daher in zukünftigen Ubuntu-Versionen vorhanden sein. Konfiguieren kann man die Auswahl des Codecs unter ''"Einstellungen -> Bluetooth -> Gerätename"''.n Die Codec-Unterstützung hängt hier vom verwendeten Audio-Ausgabe Gerät ab, günstigere Geräte sparen häufig bei diesen, weshalb die Möglichkeit besteht, dass kein so eben installierter funktioniert. In diesem Fall kann die Bitrate in der Pulseaudio-Konfiguration unter '''/etc/pulse/default.pa''' angepasst werden. Hier muss die Zeile `load-module module-bluetooth-discover` zu `load-module module-bluetooth-discover a2dp_config="sbc_min_bp=53 sbc_max_bp=53 sbc_freq=44"` geändert werden. `sbc_min_bp=n sbc_max_bp=n` gibt die Verwendete Bitrate an, hier gilt generell höher ist besser, aber nicht jedes Gerät unterstützt eine höhere Bitrate, hier muss durch Ausprobieren der optimale Wert ermittelt werden. Die Zeile kann auch zusätzlich um `sbc_cmode=dual` ergänzt werden, dies forciert den Stereo Modus. Wenn die Tonqualität keine Rolle spielt (z.B. bei Telefonaten), kann man das Profil von A2DP auf HSP/HFP umstellen. == Neuere Bluetoothgeräte mit ERTM werden nicht gekoppelt (z.B. Bose Soundlink, XBox One S Controler) == Im Superuser-Modus (`sudo -s`) hilft folgender Befehl: {{{#!vorlage Befehl echo 1 > /sys/module/bluetooth/parameters/disable_ertm }}} Danach noch einmal neu koppeln. = Links = * [https://www.bluetooth.com/ Offizielle Bluetooth-Homepage] {en} * [http://www.bluez.org/ Offical Linux Bluetooth Protocol Stack] {en} * [https://kofler.info/bluetooth-konfiguration-im-terminal-mit-bluetoothctl/ Bluetooth-Konfiguration im Terminal mit bluetoothctl auf dem Raspberry Pi] {de} kofler.info * [https://oerks.de/tech/blueZ Anleitung zu Bluetooth mit Debian] {de} * [http://events17.linuxfoundation.org/sites/events/files/slides/Bluetooth%20on%20Modern%20Linux_0.pdf Bluetooth on modern Linux] (PDF) {en} Linux Foundation Events * [ubuntu:DebuggingBluetooth:] {en} * [https://www.linux-community.de/ausgaben/linuxuser/2006/08/datenaustausch-mit-obexftp-und-der-bash/ Datenaustausch mit ObexFTP und der Bash] {de} Artikel LinuxUser 08/2006 * [https://www.linux-community.de/ausgaben/linuxuser/2005/07/telefonauskunft/ Telefonauskunft] {de} Artikel LinuxUser 07/2005 * [https://emanuelduss.ch/2013/02/befehle-beim-systemstart-ausfuhren-unter-arch-linux-mit-systemd Befehle beim Systemstart ausführen unter Arch Linux mit systemd] {de} Blogbeitrag 02/2013 #tag: Hardware, Kommunikation, Netzwerk, Multimedia