Bluetooth

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Bluetooth and the translation is 94% complete.
Outdated translations are marked like this.
Resources

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.

KERNEL Bluetooth Unterstützung einstellen
[*] 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
Wichtig
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

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.
mesh Add support for Bluetooth Mesh control application and advertising bearer.
midi Enable MIDI support
obex Enable OBEX transfer support
readline Enable support for libreadline, a GNU line-editing library that almost everyone wants
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
udev Enable virtual/udev integration (device discovery, power and storage device support, etc)

Bluetooth Unterstützung kann Systemweit mit dem beschreiben der USE Variable zu bluetooth eingeschaltet werden:

DATEI /etc/portage/make.conf
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

Hinweis
Das experimental USE-Flag muss für net-wireless/bluez aktiviert werden.
Warnung
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:

DATEI /etc/bluetooth/main.conf
[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:

Hinweis
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
Wichtig
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.

Hinweis
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:

DATEI /etc/bluetooth/main.conf
[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:

DATEI /etc/udev/rules.d/10-local-powersave.rules
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.

Hinweis
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:

DATEI /etc/udev/rules.d/80-disable-bluetooth.rules
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:

DATEI /etc/local.d/disable-bluetooth.start
#!/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:

DATEI /etc/modprobe.d/blacklist-bluetooth.conf
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:

DATEI /etc/modprobe.d/xpadneo.conf
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]:

KERNEL
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

Referenzen