Bluetooth
Dieser Eintrag beschreibt die Konfiguration und Anwendung von Bluetooth Controllern und Geräten.
Voraussetzungen
Dieser Artikel erwartet, dass udev und USB bereits eingestellt wurden.
Installation
Kernel
Für den Durchschnitt sollte es reichen RFCOMM (CONFIG_BT_RFCOMM), HIDP (CONFIG_BT_HIDP), HCI USB (CONFIG_BT_HCIBTUSB) und oder HCI UART (CONFIG_BT_HCIUART) einzuschalten. Der User-space Ein-/Ausgabe Driver für HID Eingabegeräte (CONFIG_UHID) sollte für Bluetooth Tastaturen und Mäuse eingeschaltet werden.
[*] Networking support --->
<M> Bluetooth subsystem support --->
[*] Bluetooth Classic (BR/EDR) features
<*> RFCOMM protocol support
[ ] RFCOMM TTY support
< > BNEP protocol support
[ ] Multicast filter support
[ ] Protocol filter support
<*> HIDP protocol support
[*] Bluetooth High Speed (HS) features
[*] Bluetooth Low Energy (LE) features
Bluetooth device drivers --->
<M> HCI USB driver
<M> HCI UART driver
<*> RF switch subsystem support --->
Device Drivers --->
HID support --->
<*> User-space I/O driver support for HID subsystem
Es kann vorkommen, dass der Kernel RFCOMM/BNEP nicht initialisieren kann, wenn er als built-in kompiliert wurde. Das Systemprotokoll für den Bluetooth-Dienst wird in diesem Fall das Fehlen von RFCOMM/BNEP-Unterstützung erwähnen. Und dies wiederum kann zum Beispiel die Initialisierung des HSP/HFP-Headset-Profils unterbrechen. Wenn also dmesg nichts über RFCOMM sagt, sollte man besser als Modul neu kompilieren.
Firmware
Die meisten Bluetooth Controller brauchen Firmware um zu funktionieren. Wenn der Controller von Linux unterstützt wird, kann dmesg ein Indikator sein, dass Firmware eine Voraussetzung ist. Das sys-kernel/linux-firmware Paket sollte die nötige Firmware zur Verfügung stellen, obwohl manche Geräte Firmware benötigen, die in anderen Paketen oder nur der Hersteller selbst zur Verfügung stellt.
root #
emerge --ask --noreplace sys-kernel/linux-firmware
USE-Flags
BlueZ ist eine Implementation der Bluetooth Protokolle für Linux. Es wird vom net-wireless/bluez Paket bereit gestellt.
USE flags for net-wireless/bluez Bluetooth Tools and System Daemons for Linux
+mesh
|
Add support for Bluetooth Mesh control application and advertising bearer. |
+obex
|
Enable OBEX transfer support |
+readline
|
Enable support for libreadline, a GNU line-editing library that almost everyone wants |
+udev
|
Enable virtual/udev integration (device discovery, power and storage device support, etc) |
btpclient
|
Enable BTP client |
cups
|
Add support for CUPS (Common Unix Printing System) |
debug
|
Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces |
deprecated
|
Build deprecated plugins |
doc
|
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally |
experimental
|
Build experimental plugins |
extra-tools
|
Install tools that upstream doesn't install on purpose by default. All this tools shouldn't be used. Then, please notify upstream about you still need them to let them know the situation. |
midi
|
Enable MIDI support |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
systemd
|
Enable use of systemd-specific libraries and features like socket activation or session tracking |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
test-programs
|
Install tools for testing of various Bluetooth functions |
Bluetooth Unterstützung kann Systemweit mit dem beschreiben der USE Variable zu bluetooth
eingeschaltet werden:
USE="bluetooth"
Emerge
Das System muss aktualisiert werden, wenn die USE Variable modifiziert wird:
root #
emerge --ask --changed-use --deep @world
Installiere BlueZ:
root #
emerge --ask --noreplace net-wireless/bluez
Konfiguration
Rechte
Die Rechte der Bluetooth Geräte erfolgt automatisch durch D-Bus. Alle Nutzer haben im Normalzustand Zugriff.
Dienste
OpenRC
Starte Bluetooth:
root #
rc-service bluetooth start
Starte Bluetooth automatisch:
root #
rc-update add bluetooth default
systemd
Starte Bluetooth:
root #
systemctl start bluetooth
Starte Bluetooth automatisch:
root #
systemctl enable bluetooth
Aktivieren von Batterieberichten
Die Verwendung des experimentellen Modus von bluez kann verhindern, dass sich einige Bluetooth-Mikrofone automatisch verbinden.[1]
Bluez hat die Funktion, den Batteriestand eines Geräts an upower zu melden. Dies Funktion ist derzeit experimentell und nicht stabil. Aktivieren Sie den experimentellen Modus:
[General]
Experimental=true
Starten Sie Bluetooth neu, um die Konfigurationsänderungen zu übernehmen:
root #
rc-service bluetooth restart
Jetzt sollte upower den Batteriestand jedes Geräts kennen, das das Senden seines eigenen Batteriestands unterstützt.
Anwendung
Controller Einrichtung
Zeige die Spezifikationen des Controllers:
hciconfig und andere Werkzeuge sind nur mit der
deprecated
USE Markierung für das net-wireless/bluez Paket verfügbar.root #
hciconfig -a
hci0: Type: BR/EDR Bus: USB BD Address: 00:02:72:2F:A9:33 ACL MTU: 1021:8 SCO MTU: 64:1 UP RUNNING PSCAN RX bytes:1166 acl:0 sco:0 events:43 errors:0 TX bytes:960 acl:0 sco:0 commands:43 errors:0 Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH SNIFF Link mode: SLAVE ACCEPT Name: 'BlueZ 5.21' Class: 0x000104 Service Classes: Unspecified Device Class: Computer, Desktop workstation HCI Version: 4.0 (0x6) Revision: 0x1000 LMP Version: 4.0 (0x6) Subversion: 0x220e Manufacturer: Broadcom Corporation (15)
hci0
ist hier der Name des Controllers. UP
(3te Zeile) zeigt, dass der Controller aktiv ist.
Schalte den Controller ein, wenn hciconfig indiziert, dass der Controller inaktiv ist (mit DOWN
in der 3ten Zeile):
root #
hciconfig hci0 up
Beim einschalten des Controllers kann die folgende Nachricht ausgegeben werden: Can't init device hci0: Operation not possible due to RF-kill
Nutze in diesem Fall rfkill um den Zustand des Bluetooth Senders zu erfahren:
root #
rfkill list bluetooth
0: hci0: Bluetooth Soft blocked: no Hard blocked: no
rfkill wird von >=sys-apps/util-linux-2.31 zur Verfügung gestellt. Es kann auch vom ungepflegten net-wireless/rfkill Paket installiert wird.
Wenn Bluetooth im BIOS/UEFI blockiert oder ausgeschaltet ist wird rfkill den Controller eventuell inkorrekt als
Hard blocked: no
anzeigen.Schalte den Controller frei, wenn rfkill ihn als Soft blocked: yes
und somit als blockiert erkennt:
root #
rfkill unblock bluetooth
Wenn rfkill den Controller als Hard blocked: yes
erkennt, muss er mit einem physischen Schalter oder mit einer Funktionstaste auf der Tastatur.
Bluetooth Controller können automatisch mit dem ändern der Einstellung AutoEnable=true
in /etc/bluetooth/main.conf eingeschaltet werden:
[Policy]
AutoEnable=true
In machen Fällen können Bluetooth Controller von den Energieverwaltungswerkzeugen udevs soft-geblockt worden sein. Überprüfe, dass state in der verantwortlichen Regeldatei auf 1
gesetzt ist. Alternativ kann die Regel auch ganz entfernt werden:
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="1"
Geräte koppeln
Bluetooth Geräte müssen erst mit dem Controller gekoppelt worden sein, um genutzt werden zu können. Auf beiden Geräten wird eine PIN (oder eine andere Codeform) über einen Interaktionsagenten eingegeben. Auf manchen Geräten wie z. B. Headsets ist es nicht möglich einen zufälligen Code einzugeben. Solche Geräte haben einen fest vorgelegten Code, welcher meistens 0000,1111,1234 oder 9999 ist. Außerdem gibt es Geräte die keinen Code benötigen (z. B. Sony BD Remote Control). Wenn versucht wird, bei solchen Geräten einen Code zu benutzen, führt es zu einem Fehler. Koppeln ist bei diesen Geräten nicht nötig.
Dieser Artikel deckt nur das Koppeln mit Hilfe von bluetoothctl ab, welches ein Kommandozeilen Werkzeug ist. Wenn eine grafische Desktop Umgebung genutzt wird, kann das Koppeln mit einem grafischen Agenten durchgeführt werden. Für KDE Nutzer gibt es kde-plasma/bluedevil, für GNOME Nutzer net-wireless/gnome-bluetooth und für GTK Nutzer net-wireless/blueman oder net-wireless/blueberry.
Geräte, die mit BlueZ 4. gekoppelt wurden, müssen neu gekoppelt werden.
Starte bluetoothctl:
user $
bluetoothctl
Liste die verfügbaren Controller auf:
[bluetooth]#
list
Zeige die Spezifikationen eines Controllers:
[bluetooth]#
show controller_mac_address
Setze den Standardcontroller:
[bluetooth]#
select controller_mac_address
Schalte den Controller ein:
[bluetooth]#
power on
Aktiviere den Agenten und setze ihn als Standard:
[bluetooth]#
agent on
[bluetooth]#
default-agent
Mache den Controller sichtbar (temporär für 3 Minuten) und kopplungsfähig:
[bluetooth]#
discoverable on
[bluetooth]#
pairable on
Suche nach Geräten:
[bluetooth]#
scan on
Versetze das Geräte in den Kopplungsmodus. Es muss meistens ein Knopf oder eine Kombination der eben genannten gedrückt werden. Dies dann üblicherweise auch über mehrere Sekunden.
Finde die MAC Adresse des Gerätes heraus:
[bluetooth]#
devices
Kopple das Gerät:
[bluetooth]#
pair device_mac_address
Gebe die PIN ein, wenn verlangt:
[agent]
PIN code: ####
Falls der Pin nicht abgefragt wird, aber benötigt wird, müssen Sie diesen Befehl vor dem Pairing mit den Gerät hinzufügen (siehe diesen Post):
[bluetooth]#
agent NoInputNoOutput
Erlaube die Autorisierung des Dienstes wenn angefragt:
[agent]
Authorize service service_uuid (yes/no): yes
Vertraue dem Gerät:
[bluetooth]#
trust device_mac_address
Verbinde das Gerät mit dem System:
[bluetooth]#
connect device_mac_address
Gebe Informationen über das Gerät aus:
[bluetooth]#
info device_mac_address
Jetzt ist das Gerät gekoppelt:
[bluetooth]#
quit
hciconfig
- HCI-Gerät öffnen und initialisieren:
root #
hciconfig -a <hci0> up
- HCI-Gerät schließen:
root #
hciconfig -a <hci0> down
- HCI-Gerät zurücksetzen:
root #
hciconfig -a <hci0> reset
- Statistikzähler zurücksetzen:
root #
hciconfig -a <hci0> rstat
- Authentifizierung einschalten:
root #
hciconfig -a <hci0> auth
- Authentifizierung ausschalten:
root #
hciconfig -a <hci0> noauth
- Verschlüsselung aktivieren:
root #
hciconfig -a <hci0> encrypt
- Verschlüsselung deaktivieren:
root #
hciconfig -a <hci0> noencrypt
- Seiten- und Abfragescan aktivieren:
root #
hciconfig -a <hci0> piscan
- Scan deaktivieren:
root #
hciconfig -a <hci0> noscan
- Suchabfrage aktivieren:
root #
hciconfig -a <hci0> iscan
- Aktivieren des Seiten-Scans:
root #
hciconfig -a <hci0> pscan
- Standard-Pakettyp abrufen/einstellen:
root #
hciconfig -a <hci0> ptype [type]
- Standard-Link-Modus abrufen/einstellen:
root #
hciconfig -a <hci0> lm [mode]
- Standard-Link-Richtlinie abrufen/einstellen:
root #
hciconfig -a <hci0> lp [policy]
- Lokalen Namen abrufen/einstellen:
root #
hciconfig -a <hci0> name [name]
- Klasse des Geräts abrufen/einstellen:
root #
hciconfig -a <hci0> class [class]
- Spracheinstellung abrufen/einstellen:
root #
hciconfig -a <hci0> voice [voice]
- Zugangscode für die Anfrage abrufen/einstellen:
root #
hciconfig -a <hci0> iac [iac]
- Sendeleistung der Abfrage abrufen/einstellen:
root #
hciconfig -a <hci0> nqtpl [level]
- Abfrage-Modus abrufen/einstellen:
root #
hciconfig -a <hci0> inqmode [mode]
- Anfragedaten abrufen/einstellen:
root #
hciconfig -a <hci0> inqdata [data]
- Abfrage-Scan-Typ abrufen/einstellen:
root #
hciconfig -a <hci0> inqtype [type]
- Abfragefenster und Intervall abrufen/einstellen:
root #
hciconfig -a <hci0> inqparms [win:int]
- Fenster und Intervall für Seitensuche abrufen/einstellen:
root #
hciconfig -a <hci0> pageparms [win:int]
- Seiten-Timeout abrufen/einstellen:
root #
hciconfig -a <hci0> ageto [to]
- AFH-Modus abrufen/einstellen:
root #
hciconfig -a <hci0> afhmode [mode]
- Einfachen Kopplungsmodus abrufen/einstellen:
root #
hciconfig -a <hci0> sspmode [mode]
- ACL MTU und Anzahl der Pakete einstellen:
root #
hciconfig -a <hci0> clmtu <mtu:pkt>
- SCO MTU und Anzahl der Pakete einstellen:
root #
hciconfig -a <hci0> scomtu <mtu:pkt>
- Verknüfpungsschlüssel vom Gerät löschen:
root #
hciconfig -a <hci0> delkey <bdaddr>
- Lokale OOB-Daten abrufen:
root #
hciconfig -a <hci0> oobdata
- Unterstützte Befehle anzeigen:
root #
hciconfig -a <hci0> commands
- Merkmale des Geräts anzeigen:
root #
hciconfig -a <hci0> eatures
- Versionsinformationen anzeigen:
root #
hciconfig -a <hci0> version
- Revisionsinformationen anzeigen:
root #
hciconfig -a <hci0> revision
- Hinzufügen eines Geräts zur schwarzen Liste:
root #
hciconfig -a <hci0> block <bdaddr>
- Entfernen eines Geräts von der schwarzen Liste:
root #
hciconfig -a <hci0> unblock <bdaddr>
- LE-Zufallsadresse einstellen:
root #
hciconfig -a <hci0> lerandaddr <bdaddr>
- LE-Werbung aktivieren:
root #
hciconfig -a <hci0> leadv [type]
- Alle Befehle anzeigen, für die das Gerät Unterstützung bietet:
root #
hciconfig get commands
Bluetooth ausschalten
Führe folgendes Kommando aus, um Bluetooth während es ausgeführt wird, zu beenden:
root #
rfkill block bluetooth
Um Bluetooth nicht automatisch bei jedem Bootvorgang zu starten, gibt es folgende Optionen:
Nutzen udevs um Bluetooth zu deaktivieren
Bei der Nutzung udevs muss nur die folgende Regel installiert werden um Bluetooth auszuschalten:
SUBSYSTEM=="rfkill", ATTR{type}=="bluetooth", ATTR{state}="0"
Nutzen OpenRCs um Bluetooth zu deaktivieren
Bei der Nutzung von sys-apps/openrc, installiere das folgende Script als "lokaler" Dienst und versichere, dass es ausführbar ist:
#!/bin/sh
rfkill block bluetooth
root #
chmod o+x /etc/local.d/disable-bluetooth.start
Bluetooth auf Kernel Ebene deaktivieren
Wenn der Kernel Bluetooth modular unterstützt, kann das laden der Module ausgeschaltet werden:
blacklist bnep
blacklist bluetooth
blacklist btusb
Fehlerbehebung
TLP und laptop_mode
Wenn laptop-mode-tools installiert ist, stellen Sie sicher, dass sie Bluetooth nicht deaktivieren, um Strom zu sparen.
XBOX ONE Controller-Kopplung
Es ist ein bekanntes Problem, dass die drahtlosen XBOX ONE-Controller auf den meisten Linux-Systemen nicht sofort gekoppelt werden können. Um dieses Problem zu lösen, müssen Sie ERTM deaktivieren.
Um es manuell zu deaktivieren:
root #
echo 'Y' > /sys/module/bluetooth/parameters/disable_ertm
Dadurch wird ERTM nur so lange deaktiviert, bis das System neu gebootet wird. Um es dauerhaft zu deaktivieren, installieren Sie das Kernelmodul xpadneo
root #
emerge --ask games-util/xpadneo
In den meisten Fällen, wird das Problem dadurch automatisch gelöst. Wenn dies nicht der Fall ist, fügen Sie diese Zeile manuell in die xpadneo-Konfiguration ein:
options bluetooth disable\_ertm=Y
Notebook hat einen Synopsys DesignWare Controller
Bluetooth-Unterstützung für diesen Controller benötigt auch diese Optionen in der Kernelkonfiguration[2]:
Device Drivers --->
Character devices --->
Serial drivers --->
[*] 8250/16550 and compatible serial support
[*] Support for Synopsys DesignWare 8250 quirks
Resolving firmware problems
It happens that the firmware of bluetooth adapters enters a state where it is unable to pair with a certain (or all) bluetooth devices. Resetting the adapter might solve such problems.
In the case of a laptop with a built-in bluetooth adapter this might be achieved by:
- Enter the laptop's firmware settings (BIOS) and disable the built-in adapter
- Save settings and restart the laptop
- Enter the firmware settings a second time and enable the bluetooth adapter again
- Save and restart
- Now try to pair the device again
Siehe auch
- Bluetooth headset — describes the configuration of Bluetooth headsets within Gentoo Linux.
- Bluetooth input devices — describes the setup of Bluetooth input devices, for example a bluetooth mouse, on a Linux system.
- Bluetooth Network Aggregation Point — covers the setup of a Bluetooth Network Aggregation Point (NAP) on Gentoo Linux.
- Broadcom Bluetooth — details setup for Broadcom Bluetooth 4.x devices mostly based on BCM20702, BCM4354, and BCM4356 chipsets.