Bluetooth-Konfiguration im Terminal mit bluetoothctl

In den letzten Tagen habe ich mich recht intensiv mit der Bluetooth-Konfiguration unter Raspbian Jessie auseinandergesetzt. Zur grafischen Konfiguration ist der Bluetooth-Manager vorgesehen (apt-get install bluetooth blueman), der mich aber in der Vergangenheit schon nicht glücklich gemacht hat und mit dem es mir auch diesmal nicht geglückt ist, zwei Bluetooth-Tastaturen einzurichten.

Wohl oder übel habe ich nun versucht, die Konfiguration auf Kommandoebene durchzuführen. Das von Raspbian Wheezy bekannte Werkzeug bluez-simple-agent steht unter Jessie nicht mehr zur Verfügung. Und so kam es, dass ich mit mit dem Kommando bluetoothctl angefreundet habe und damit eine Maus, zwei Tastaturen und einen Bluetooth-Lautsprecher mit dem Raspberry Pi verbunden habe.

bluetoothctl-Kommando

bluetoothctl ist zur interaktiven Konfiguration gedacht. Nach dem Start gelangen Sie in einen Kommandomodus. Die weitere Vorgehensweise zur Verbindung eines Bluetooth-Geräts sieht so aus:

  • Sie aktivieren mit pairable on den Kuppelungsmodus.
  • Sie aktivieren mit scan on den Scan-Modus. Das Programm listet nun alle erkannten Geräte in Funkreichweite auf. Dieser Vorgang kann geraume Zeit dauern, einzelne Geräte werden dabei immer wieder aufgelistet. Wenn Sie das gewünschte Gerät gefunden haben, schalten Sie den Modus mit scan off einfach wieder aus.
  • Sie aktivieren mit agent on einen sogenannten Bluetooth-Agenten. Er kümmert sich um die Autorisierung neuer Geräte (bei Tastaturen: Passworteingabe).
  • Mit pair xx:xx:xx initiieren Sie den Verbindungsaufbau zu einem Gerät. Bei einer Tastatur werden Sie nun dazu aufgefordert, einen sechstelligen Code einzutippen. Vergessen Sie nicht, die Eingabe mit Return abzuschließen! Die erfolgreiche Kuppelung erkennen Sie an der Meldung pairing successful. Bei Geräten ohne Eingabemöglichkeit (Tastatur, Lautsprecher etc.) gelingt das Pairing zum Glück auch ohne Codeeingabe.
  • Und mit trust xx:xx:xx machen Sie dem Bluetooth-System klar, dass Sie dem Gerät wirklich vertrauen.
  • Mit connect xx:xx:xx geben Sie an, dass Sie das Gerät tatsächlich nutzen möchten. (Das hätte sich bluetoothctl mittlerweile eigentlich denken können …) Wenn alles klappt, lautet die Reaktion connection successful. Das Gerät kann jetzt verwendet werden!
  • info xx:xx:xx zeigt den Verbindungsstatus und diverse weitere Informationen zum Gerät an.
  • Bei der Fehlersuche helfen die Kommandos list und devices.* Mit exit beenden Sie das bluetoothctl-Kommando.

Wichtig ist, dass Sie bei neu zu konfigurierenden Bluetooth-Geräten immer wieder auf den Bluetooth-Knopf (Pairing-Knopf) drücken, damit das Gerät so der Umwelt signalisiert, dass es bereits zum Verbindungsaufbau ist. Die meisten Geräte signalisieren diesen Zustand auch durch eine blinkende Leuchtdiode.

bluetoothctl-Beispiel

Die folgenden Zeilen zeigen (leicht gekürzt) die Ein- und Ausgaben zur Konfiguration einer Bluetooth-Tastatur. Alle Ein- und Ausgaben erfolgen in einem Terminal-Fenster:

pi@pi2$ bluetoothctl 
[NEW] Controller 00:1A:7D:DA:71:13 pi2 [default]
[NEW] Device 88:E7:A6:04:9E:A7 Bluetooth Laser Mouse
[NEW] Device 00:25:BC:FB:C1:E5 Michael Koflers Tastatur

[bluetooth]# agent on
Agent registered

[bluetooth]# pairable on
Changing pairable on succeeded

[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1A:7D:DA:71:13 Discovering: yes
[NEW] Device 70:10:00:1A:92:20 70-10-00-1A-92-20
[NEW] Device 73:0C:0F:CF:F3:BE 73-0C-0F-CF-F3-BE
[CHG] Device 70:10:00:1A:92:20 LegacyPairing: no
[CHG] Device 70:10:00:1A:92:20 Name: Bluetooth 3.0 Keyboard
[CHG] Device 70:10:00:1A:92:20 Alias: Bluetooth 3.0 Keyboard
[CHG] Device 70:10:00:1A:92:20 LegacyPairing: yes
...

bluetooth]# scan off
Discovery stopped

[bluetooth]# pair 70:10:00:1A:92:20
Attempting to pair with 70:10:00:1A:92:20
[CHG] Device 70:10:00:1A:92:20 Connected: yes
[agent] PIN code: 963064

  --> Pin-Eingabe + Return auf der Tastatur <--

[CHG] Device 70:10:00:1A:92:20 Paired: yes
Pairing successful

[bluetooth]# trust 70:10:00:1A:92:20
Changing 70:10:00:1A:92:20 trust succeeded
[CHG] Device 88:E7:A6:04:9E:A7 Connected: yes

[bluetooth]# connect 70:10:00:1A:92:20
Attempting to connect to 70:10:00:1A:92:20
Connection successful

[bluetooth]# info 70:10:00:1A:92:20
Device 70:10:00:1A:92:20
    Name: Bluetooth 3.0 Keyboard
    Alias: Bluetooth 3.0 Keyboard
    Class: 0x000540
    Icon: input-keyboard
    Paired: yes
    Trusted: yes
    Blocked: no
    Connected: yes
    LegacyPairing: no
    UUID: Service Discovery Serve.. (00001000-...)
    UUID: Human Interface Device... (00001124-...)
    UUID: PnP Information           (00001200-...)
    Modalias: usb:v04E8p7021d0001

[bluetooth]# exit

Test, Interna

Wenn soweit alles klappt, sollten Sie nun einen Neustart durchführen. Auf diese Weise stellen Sie sicher, dass die Konfiguration tatsächlich gespeichert wurde und nachhaltig funktioniert.

Die Bluetooth-Konfiguration für ein bestimmtes Gerät wird in /var/lib/bluetooth/id1/id2/info gespeichert. Dabei ist id1 der ID-Code des Bluetooth-Controllers (beim Raspberry Pi also eines USB-Bluetooth-Steckers) und id2 der ID-Code des Bluetooth-Geräts.

sudo less /var/lib/bluetooth/controller-id/device-id/info
[LinkKey]
Key=44763CF7C981D575C28BC05C90184F00
Type=0
PINLength=0

[General]
Name=Bluetooth 3.0 Keyboard
Class=0x000540
SupportedTechnologies=BR/EDR;
Trusted=true
Blocked=false
Services=00001000-0000-1000-8000-00805f9b34fb;00001124-0000-1000-8000-00805f9b34fb;00001200-0000-1000-8000-00805f9b34fb;

[DeviceID]
Source=2
Vendor=1256
Product=28705
Version=1

Bluetooth-Lautsprecher für den Raspberry Pi

Quasi als Anwendungsbeispiel habe ich nun versucht, einen Bluetooth-Lautsprecher zu verwenden, um mit dem LXMusic abgespielte MP3-Dateien wiederzugeben. Zuerst einmal müssen Sie die erforderlichen Bibliotheken für die Kommunikation zwischen Bluetooth und dem Audio-System installieren:

sudo apt-get install pulseaudio-module-bluetooth

Der nächste Schritt besteht darin, den Lautsprecher mit dem Raspberry Pi zu verbinden — wahlweise wie oben beschrieben mit bluetoothctl oder mit dem Bluetooth Manager. Sobald das gelungen ist, sollte das Kommando pactl list neben dem internen Audio-Ausgang des Raspberry Pi auch den Bluetooth-Lautsprecher anzeigen:

pactl list sinks short
  0 alsa_output.0.analog-stereo   module-alsa-card.c      ... RUNNING
  1 bluez_sink.FC_58_FA_A0_4D_E7  module-bluez5-device.c  ... SUSPENDED

Ebenfalls mit pactl machen Sie nun den Bluetooth-Lautsprecher zum Default-Audio-Ausgang und stellen die gewünschte Lautstärke ein.

pactl set-default-sink 1
pactl set-sink-volume 1 60%

Wenn Sie jetzt mit einem Audio-Player Musik abspielen, also z.B. mit ‚LXMusic‘, sollte die Tonausgabe aus der Bluetooth-Box erschallen.

Leider geht die Verbindung mit jedem Neustart des Raspberry Pi verloren. Sie müssen wahlweise im Bluetooth Manager das Connect-Kommando ausführen oder mit bluetoothctl die Verbindung wiederherstellen. In einem Script kann das z.B. so erfolgen (wobei Sie natürlich die ID-Nummer ändern müssen):

echo -e "connect FC:58:FA:A0:4D:E7\nquit" | bluetoothctl

Lästig ist, dass die unter Raspbian zugänglichen Lautstärkeregler keinen Einfluss auf die Bluetooth-Lautstärke haben. Die Lautstärke kann einerseits auf der Box selbst und andererseits mit pactl verändert werden, z.B. so:

pactl set-sink-volume bluez_sink.FC_58_FA_A0_4D_E7 50%

Beachten Sie, dass die beiden Lautstärken sich multiplizieren: Die pactl-Lautstärke gibt an, in welcher Lautstärke die Daten per Bluetooth übertragen werden. Die Lautstärke der Box verstärkt dieses Signal dann nochmals.

Ein ärgerliches Verhalten meines Testkandidaten (Anker A7908) bestand darin, dass das Gerät nach jedem Aus- und Einschalten die interne Lautstärke auf 100% zurücksetzt.

Restlos begeistert hat mich die Kombination aus dem Raspberry Pi mit dem Anker-Lautsprecher also nicht. Aber immerhin hat sich gezeigt, dass eine Audio-Wiedergabe per Bluetooth grundsätzlich möglich ist und dass es keine unüberwindbaren Hürden gibt.

Quellen

9 Gedanken zu „Bluetooth-Konfiguration im Terminal mit bluetoothctl“

  1. Besten Dank für die Anleitung! Sie war extrem hilfreich beim Verbinden meines Bluetooth Microsoft Mobile Keyboard 5000 .
    Zum Glück bin ich mit der Google-Suche und dem richtigen Suchwort auf deine Seite gestoßen.
    Dritter Treffer bei der Suche mit „bluetoothctl“
    Sehr gut erklärt und mit dem Beispiel leicht in die Praxis umzusetzen.
    Endlich nimmt der Raspberry die Tastatureingaben kabellos an!
    Sechs Stunden verzweifelte Bemühungen wurden gekrönt.
    Danke für die Veröffentlichung deiner Erkenntnisse!

  2. Vielen vielen Dank, mit dieser Anleitung konnte ich wirklich was anfangen!
    Diese Seite wird auf jeden Fall gebookmarked…

    Meine Bluetooth Tastatur unter OpenElec auf meinem RaspberryPi 3 funktioniert

    ;-)

  3. Bei mir kommt bei dem schritt mit connect xxxxxx
    failed to connect: org.bluez.error.failed

    Wie kann ich das beheben?

    1. I have just ran into this issue.

      I’m looking to fix it with a workaround and a few other things.

      do this.

      pulseaudio -k

      followed with

      pulseaudio –start

      Then attempt to connect using bluetoothclt.

      I’m going to be working on a project that should simplify this a bunch…but we will see if I get the time.

      1. Hallo zusammen,

        ich habe ein ähnliches Problem.

        Ich verbinde ein Samsung S3 mini mittels Bluetooth. Wenn ich dann mich verbinde über BLUETOOTHCTL bekomme ich nach ca 30 Sekunden einen Disconnect.

        [bluetooth]# connect 1C:66:AA:3B:41:6B
        Attempting to connect to 1C:66:AA:3B:41:6B
        [CHG] Device 1C:66:AA:3B:41:6B Connected: yes
        Failed to connect: org.bluez.Error.Failed
        [CHG] Device 1C:66:AA:3B:41:6B Connected: no

        Ich habe das Bluetooth-Modul für den Audioserver PulseAudio auch schon deinstalliert jedoch besteht das Problem immer noch. Ich setze 4.7.0-0.bpo.1-686-pae #1 SMP Debian 4.7.5-1~bpo8+2 (2016-10-01) i686 GNU/Linux ein.

        Was ist das Problem bei mir?

        Beste Grüße

  4. Besten Dank für diese ausgezeichnete Beschreibung zum Tools bluetoothctl.

    Mit diesem Tool habe ich eine Logitech K810 Tastatur an meinem Raspberry
    angeschlossen.
    Auch in meinem Ubuntu 16.04.01 LTS ist die Installation mit dem Tool gelungen.

    Beste Grüße
    P.Fuchs

  5. Erst mal vielen Dank für die gute Beschreibung. Mein Versuch, dies auf einem Raspberry PI 3 mit OpenElec nachzuvollziehen scheiterte aber daran, daß bei dem Gerät hinter /var/lib/ kein Verzeichnis „bluetooth“ existiert. Kann (oder muß) ich dieses Verzeichnis händisch anlegen?
    Momentan muß ich jedes Mal am Raspi die Bluetooth-Tastatur neu verbinden, wenn ich sie nutzen will…

    1. OpenELEC ist nicht Raspbian. In OpenELEC sind viele Verzeichnisse anders, weil sich der Großteil von OpenELEC in einem Read-Only-Dateisystem befindet. Ich habe ad-hoc keine Ahnung, wo die Bluetooth-Verzeichnisse sind, und ich habe aktuell leider nicht die Möglichkeit, danach zu suchen.

Kommentare sind geschlossen.