Bluetooth (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Bluetooth
. Дата последней синхронизации: 11 февраля 2024. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Bluetooth мышь
Bluetooth клавиатура
Bluetooth наушники
Blueman
ObexFTP
Bluetooth
— стандарт для беспроводного соединения малой дальности сотовых телефонов, компьютеров и других электронных устройств. В Linux канонической реализацией стека протоколов Bluetooth является
BlueZ
.
Установка
Установите
пакет
bluez
, который предоставляет стек протоколов Bluetooth.
Установите
bluez-utils
, предоставляющий утилиту
bluetoothctl
. Дополнительно стоит установить
bluez-deprecated-tools
, который содержит
устаревшие инструменты BlueZ
.
Универсальный драйвер Bluetooth находится в модуле ядра
btusb
.
Проверьте
, что он загружен. Если нет, то
загрузите его вручную
.
Запустите
и
включите
службу
bluetooth.service
.
Примечание
Некоторые адаптеры Bluetooth встроены в платы Wi-Fi (например, старые платы Intel Centrino). В этих случаях необходимо, чтобы сперва была включена плата Wi-Fi (обычно при помощи сочетания клавиш на ноутбуке), после чего ядро сможет увидеть адаптер Bluetooth.
Некоторые карты Bluetooth (например, Broadcom) конфликтуют с сетевыми адаптерами. В этом случае вам необходимо удостовериться, что устройство Bluetooth подключается до начала загрузки сетевых служб.
Некоторые утилиты вроде hcitool и hciconfig объявлены устаревшими и больше не поставляются в пакете
bluez-utils
. Так как они не получают обновления, рекомендуется избегать их использования. Если они вам всё ещё нужны, установите дополнительно
bluez-deprecated-tools
. Подробнее смотрите
FS#53110
и
Bluez mailing list
.
Начиная с
2024
,
bluez-obex
и
bluez-mesh
отделены от пакета
bluez
. Поэтому, если вы планируете передавать файлы по Bluetooth, также установите
bluez-obex
и пользовательская служба
obex.service
должна быть
включена
.
Фронтенды
Консольные
bluetoothctl
— Сопряжение устройств через командную строку является одним из самых простых и надёжных вариантов.
https://www.bluez.org/
||
bluez-utils
bluetui
— TUI для управления устройствами Bluetooth.
https://github.com/pythops/bluetui
||
bluetui
bluetuith
— TUI-менеджер bluetooth для облегчения сопряжения и управления устройствами/адаптерами, с передачей файлов OBEX и поддержкой мыши.
https://www.github.com/darkhz/bluetuith
||
bluetuith
AUR
Совет
Для автоматизации команд bluetoothctl используйте
echo -e "
команда1
\n
команда2
\n" | bluetoothctl
или
bluetoothctl --
команда
.
Графические
Следующие пакеты позволяют настраивать Bluetooth с помощью графического интерфейса.
GNOME Bluetooth
— Инструменты для Bluetooth в
GNOME
.
gnome-bluetooth-3.0
предоставляет бэкенд (
gnome-bluetooth
AUR
— старая версия)
gnome-shell
предоставляет апплет мониторинга статуса
gnome-control-center
предоставляет графический интерфейс настройки, для открытия которого можно ввести Bluetooth в поиске или выполнить команду
gnome-control-center bluetooth
.
Также можно использовать команду
bluetooth-sendto
напрямую для отправки файлов на удалённое устройство.
nautilus-bluetooth
AUR
добавляет пункт отправки по Bluetooth в контекстное меню файлов
Для получения файлов откройте панель настроек Bluetooth; принимать файлы можно только при открытых настройках.
Для добавления пункта отправки файла по Bluetooth в контекстном меню Thunar смотрите инструкции
здесь
(укажите команду
bluetooth-sendto %F
).
Bluedevil
— Инструмент Bluetooth в
KDE
. Если нет иконки в Dolphin и системном трее, включите её в настройках трея или добавьте виджет. Настроить Bluedevel и обнаружить устройства Bluetooth можно кликом по иконке. Интерфейс также доступен через настройки KDE.
https://invent.kde.org/plasma/bluedevil
||
bluedevil
Blueberry
— Инструмент в Linux Mint, надстройка над GNOME Bluetooth, работает во всех средах рабочего стола.
Blueberry
не поддерживает приём файлов через Obex Object Push.
https://github.com/linuxmint/blueberry
||
blueberry
AUR
Blueman
— Полнофункциональный менеджер Bluetooth.
https://github.com/blueman-project/blueman
||
blueman
ObexFTP
— Инструмент для обмена файлами с устройствами через OBEX.
http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp
||
obexftp
AUR
Overskride
— Простой, но мощный клиент Bluetooth.
https://github.com/kaii-lb/overskride#overskride
||
overskride
AUR
btctl
— Простой менеджер подключений Bluetooth для
fuzzel
и других лаунчеров.
https://codeberg.org/kupospelov/btctl
||
btctl
AUR
Сопряжение
Примечание
Перед использованием устройства Bluetooth убедитесь, что оно не заблокировано через
rfkill
.
Этот раздел описывает прямую настройку
bluez
через утилиту командной строки
bluetoothctl
. Это необязательно, если вы используете какой-нибудь другой инструмент (например, GNOME Bluetooth).
Точная процедура зависит от особенностей конкретного устройства; эта инструкция описывает сопряжение с устройством при помощи
bluetoothctl
лишь в общих чертах.
Запустите интерактивную команду
bluetoothctl
. После этого можно ввести
help
для получения списка доступных команд.
(необязательно) Выберите контроллер по умолчанию командой
select
MAC-адрес
.
(необязательно) Включите питание контроллера, введя
power on
, если он выключен. По умолчанию он включен; смотрите
#Состояние питания адаптера по умолчанию
.
Введите
devices
, чтобы увидеть MAC-адрес устройства для сопряжения.
Войдите в режим обнаружения устройств при помощи команды
scan on
, если нужного вам устройства нет в списке.
Включите агент при помощи
agent on
или выберите конкретный агент: если вы введёте
agent
и дважды нажмёте Tab, будет отображён список доступных вариантов. Агент Bluetooth управляет кодом сопряжения.
default-agent
должен подойти в большинстве случаев.
[1]
Введите
pair
MAC-адрес
, чтобы осуществить сопряжение (работает автодополнение по tab).
При использовании устройства без PIN, возможно, потребуется подтверждение, прежде чем оно сможет успешно переподключиться. Для этого введите
trust
MAC-адрес
.
Наконец, используйте
connect
MAC-адрес
для установки соединения.
Сеанс будет выглядеть примерно так:
$ bluetoothctl
[NEW] Controller 00:10:20:30:40:50
hostname
[default]
[bluetooth]# agent KeyboardOnly
Agent registered

[bluetooth]# default-agent
Default agent request successful

[bluetooth]# power on
Changing power on succeeded
[CHG] Controller 00:10:20:30:40:50 Powered: yes

[bluetooth]# scan on
Discovery started
[CHG] Controller 00:10:20:30:40:50 Discovering: yes
[NEW] Device 00:12:34:56:78:90
device name
[CHG] Device 00:12:34:56:78:90 LegacyPairing: yes

[bluetooth]# pair 00:12:34:56:78:90
Attempting to pair with 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
[CHG] Device 00:12:34:56:78:90 Connected: no
[CHG] Device 00:12:34:56:78:90 Connected: yes
Request PIN code
[agent] Enter PIN code: 1234
[CHG] Device 00:12:34:56:78:90 Paired: yes
Pairing successful
[CHG] Device 00:12:34:56:78:90 Connected: no

[bluetooth]# connect 00:12:34:56:78:90
Attempting to connect to 00:12:34:56:78:90
[CHG] Device 00:12:34:56:78:90 Connected: yes
Connection successful
Сопряжение при двойной загрузке
Для систем Linux с двойной загрузкой, как показано в
#Сохранение конфигурации
[
ссылка недействительна
: раздел не найден]
, просто убедитесь, что все файлы из
/var/lib/bluetooth/"BT-Adapter-MAC-address"
идентичны при каждой установке, либо скопировав их, либо установив на них символические ссылки.
В Windows или macOS для сопряжения устройств при двойной загрузке вам необходимо изменить соответствующие ключи сопряжения в вашей установке Linux.
Ниже описан ручной способ изменения. Для автоматизации можно использовать
bt-dualboot
. (не поддерживает
Bluetooth_с_низким_энергопотреблением
) и
соответствующие репозитории
.  Для полуавтоматического процесса используйте
bluetooth-dualboot script
, который не редактирует файлы, но помогает выполнять нужные команды и вырезать и вставлять правильные значения.
Подготовка
Чтобы сделать это, сперва сделайте сопряжение в вашем Arch Linux. Потом перезагрузитесь в другую ОС и сделайте сопряжение там. Теперь нужно извлечь ключи сопряжения, но сперва отключите Bluetooth-устройства, чтобы не было ненужных попыток подключения до завершения настройки.
Примечание
Некоторые устройства, например
Logitech MX Master
и Logitech 604 Lightspeed, содержат октет их MAC-адреса (как правило, последний) при каждом сопряжении. Проверьте, случается ли это у вас, и учтите это при завершении процесса.
Для Windows
Вы можете извлечь свои Bluetooth-ключи как в Linux, так и в Windows:
Извлечение ключей в Windows
Загрузитесь в Windows.
Запись реестра, содержащая ключи, доступна только
пользователю SYSTEM
, в которого нельзя выполнить вход. Поэтому понадобится утилита
PsExec
с официального сайта Windows Sysinternals для запуска
regedit.exe
от имени
SYSTEM
.
Скачайте архив
PsTools
и извлеките из него файл
PsExec64.exe
.
Запустите командную строку от имени администратора, перейдите в папку с извлечённым exe-файлом и запустите редактор реестра:
.\PsExec64.exe -s -i regedit.exe
В редакторе перейдите к этому разделу:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Keys
В нём содержатся подразделы для каждого Bluetooth-адаптера, названные по их MAC-адресам. Если их несколько и вы не знаете, какой из них вам нужен, смотрите
эту инструкцию
для выяснения MAC-адреса нужного вам Bluetooth-адаптера.
Разделы Bluetooth-адаптеров содержат параметры для каждого сопряжённого устройства, причём имена этих параметров являются MAC-адресами. Также могут присутствовать подразделы, названные по MAC-адресам сопряжённых устройств, и каждый такой подраздел будет содержать ключи с именами вроде
LTK
или
IRK
. Эти подразделы (если они есть) соответствуют устройствам Bluetooth 5.1. Если для нужного вам устройства такой подраздел есть, это устройство Bluetooth 5.1. Если подраздела нет, а есть только параметр, это не устройство Bluetooth 5.1.
Нажмите правой кнопкой мыши на раздел адаптера и экспортируйте его в файл
.reg
. Это текстовый файл, из которого можно копировать ключи. Как описано выше, он содержит параметры с ключами сопряжения для устройств без Bluetooth 5.1 и подразделы с ключами сопряжения (и другой информацией) для устройств Bluetooth 5.1. Сделайте этот файл доступным для вашей установки Linux и перезагрузитесь в него.
Если нужное устройство
не является
устройством Bluetooth 5.1, перейдите к разделу
#Завершение
. Если устройство
является
устройством Bluetooth 5.1, нужно внести некоторые изменения в ключи сопряжения и связанную с ними информацию, как описано в разделе
#Подготовка ключей Bluetooth 5.1
.
Извлечение ключей в Linux
Примечание
Если ваш Windows-раздел зашифрован Bitlocker'ом, то получить к нему доступ через chntpw не получится.
Загрузитесь в Arch. Установите
chntpw
. Примонтируйте ваш Windows-раздел. Перейдите в каталог раздела реестра и запустите
chntpw
в разделе SYSTEM:
Tip
Если установлен
rlwrap
,
chntpw
можно запустить как
rlwrap chntpw
чтобы обеспечить редактирование командной строки в стиле readline и просмотр истории.
$ cd
/путь/к/windows/диску
/Windows/System32/config
$ chntpw -e SYSTEM
В окружении
chntpw
выполните:
> cd CurrentControlSet\Services\BTHPORT\Parameters\Keys
Вместо
CurrentControlSet
, можно увидеть
ControlSet00
X
(проверьте с помощью
ls
); используйте вместо этого:
> cd ControlSet00
X
\Services\BTHPORT\Parameters\Keys
Вероятно, там будет только один подраздел, название которого является MAC-адресом вашего Bluetooth-адаптера.	
Отобразить можно с помощью
ls
и
cd
в нём:
> ls
> cd
your-adapter's-mac-address
Имена подразделов под этим адаптером являются MAC-адресами
устройств
, к которым подключен адаптер.
Отобразите их с помощью
ls
, затем
cd
в каждом из них, которые вы хотите соединить двумя парами:
> ls
> cd
mac-адрес
Если устройство
не является
устройством Bluetooth 5.1, вы увидите только ключ сопряжения:
> ls
Node has 0 subkeys and 1 values
size  type        value name    [value if type DWORD]
16    REG_BINARY <ab12cd34ef56>
Если это так, получите хэш-ключ устройства командой
hex
:
> hex ab12cd34ef56
:00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (всякие другие символы)
«XX»ы и являются ключом сопряжения. Запомните, какие ключи каким MAC-адресам соответствуют.
Если устройство
является
устройством Bluetooth 5.1, вы увидите несколько разных ключей:
Node has 0 subkeys and 8 values
  size     type              value name             [value if type DWORD]
    16  3 REG_BINARY         <LTK>
     4  4 REG_DWORD          <KeyLength>               16 [0x10]
     8  b REG_QWORD          <ERand>
     4  4 REG_DWORD          <EDIV>                 37520 [0x9290]
    16  3 REG_BINARY         <IRK>
     8  b REG_QWORD          <Address>
     4  4 REG_DWORD          <AddressType>              1 [0x1]
     4  4 REG_DWORD          <AuthReq>                 45 [0x2d]
Их использование описано в разделе
#Подготовка ключей Bluetooth 5.1
. Для получения значений параметров используйте команду
hex
value_name
.
Наконец, импортируйте ключи в вашу установку Linux, как описано в разделе
#Завершение
.
Для macOS
Загрузитесь в macOS:
Для macOS Monterey или новее:
Откройте «Связку ключей» и в строку поиска введите Bluetooth.
Отсортируйте по дате.
Если переподключение устройства выполнялось недавно, можно просто отсортировать ключи по дате и выбрать самый свежий. Скорее всего он будет иметь название MobileBluetooth (для старых устройств) или просто UUID (для Bluetooth 5.1+).
Дважды щёлкните по записи. Проверьте, что в качестве учётной записи указан MAC-адрес вашего устройства.
Поставьте галочку «Показать пароль». Система попросит вас ввести свой пароль.
Скопируйте показанный пароль, который по сути является XML-файлом (
⌘+a
⌘+c
)
Вставьте и сохраните его в файл
bt_keys.txt
в вашем домашнем каталоге.
Для High Sierra или новее выполните в терминале:
# defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys > ~/bt_keys.txt
Для Sierra или более старых систем выполните в терминале:
# defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys > ~/bt_keys.txt
Теперь в файле
~/.bt_keys.txt
находятся ключи Bluetooth. Для старых версий macOS (High Sierra и старше) нужно перевернуть ключи перед продолжением. Например,
98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm
нужно изменить на
MM LL KK JJ GG FF EE DD CC BB AA 2F 54 98
.
Примечание
Это можно сделать таким кодом
Python
:
>>> key = "98 54 2f aa bb cc dd ee ff gg hh ii jj kk ll mm"
>>> " ".join(reversed(key.split()))
Если это устройство Bluetooth 5.1, то у одного устройства будет несколько ключей. Перейдите к разделу
#Подготовка ключей Bluetooth 5.1
для работы с ними.
Наконец, импортируйте ключи в вашу установку Linux, как описано в разделе
#Завершение
.
Подготовка ключей Bluetooth 5.1
Если во время выполнения описанных выше шагов вы получили ключи для устройств Bluetooth 5.1, то перед импортом в Linux необходимо преобразовать значения определённым образом для последующего использования на этапе
#Завершение
. Процесс преобразования зависит от конкретного устройства; примеры для некоторых устройств приведены ниже.
Устройство
Источник ключа и преобразования (Windows)
Источник ключа и преобразования (macOS)
Название получаемого значения
Logitech MX Anywhere 3S
Logitech MX Master 3
Logitech MX Master 3S
Logitech MX Keys
Logitech MX Keys Mini
Logitech MX Mechanical
Xbox One S Wireless Controller
Скопируйте
IRK
.
Уберите пробелы между октетами.
?
IdentityResolvingKey.Key
Скопируйте
LTK
.
Уберите пробелы между октетами.
?
SlaveLongTermKey.Key
и
PeripheralLongTermKey.Key
ERand
и
EDIV
должны быть
0
Random Number
и
Encrypted Diversifier
должны быть
0
.
–
Logitech MX Anywhere 2S
ELECOM Bitra
Скопируйте
IRK
.
Уберите пробелы между октетами.
?
IdentityResolvingKey.Key
Скопируйте
CSRK
.
Уберите пробелы между октетами.
?
LocalSignatureKey.Key
Скопируйте
LTK
.
Уберите пробелы между октетами.
?
LongTermKey.Key
Скопируйте
KeyLength
.
Преобразуйте число в десятичное.
?
LongTermKey.EncSize
Скопируйте
EDIV
.
Преобразуйте число в десятичное.
?
LongTermKey.EDiv
Скопируйте
ERand
.
Измените порядок октетов на обратный.
Преобразуйте число в десятичное.
?
LongTermKey.Rand
Dygma Defy
Скопируйте
IRK
.
Удалите пробелы (или запятые) между шестнадцатеричными октетами.
?
IdentityResolvingKey.Key
Скопируйте
LTK
.
Удалите пробелы (или запятые) между шестнадцатеричными октетами.
?
LongTermKey.Key
Скопируйте
KeyLength
.
Преобразуйте целое число из шестнадцатеричного в десятичное.
?
LongTermKey.EncSize
Скопируйте
EDIV
.
Преобразуйте целое число из шестнадцатеричного в десятичное.
?
LongTermKey.EDiv
Скопируйте
ERand
.
Измените порядок октетов на противоположный и уберите пробелы (или запятые).
Преобразуйте целое число из шестнадцатеричного в десятичное.
?
LongTermKey.Rand
Клавиатура Royal Kludge F68 похожа на клавиатуру Logitech MX Anywhere 2S
Скопируйте также
CSRKInbound
.
Удалите пробелы между hex-октетами.
?
RemoteSignatureKey.Key
ThinkPad TrackPoint Keyboard II
Мышь Pebble M350
Мышь Logitech G604 Lightspeed
Скопируйте
IRK
.
Измените порядок октетов на обратный.
Скопируйте
Remote IRK
.
Преобразуйте из base64 в hex.
IdentityResolvingKey.Key
Скопируйте
LTK
.
Уберите пробелы между октетами.
Скопируйте
Remote Encryption
>
Long-term Key
.
Преобразуйте из base64 в hex.
LongTermKey.Key
Скопируйте
ERand
.
Измените порядок октетов на обратный.
Преобразуйте число в десятичное.
Скопируйте
Remote Encryption
>
Random Number
.
Преобразуйте из base64 в little-endian десятичное число (смотрите Python-код ниже).
LongTermKey.Rand
Скопируйте
EDIV
.
Измените порядок октетов на обратный.
Преобразуйте число в десятичное.
Скопируйте
Remote Encryption
>
Encrypted Diversifier
.
Преобразуйте из base64 в little-endian десятичное число (смотрите Python-код ниже).
LongTermKey.EDiv
Другие устройства
Скопируйте
LTK
.
Уберите пробелы между октетами.
Скопируйте
Remote IRK
.
Преобразуйте из base64 в hex.
LongTermKey.Key
Скопируйте
ERand
.
Измените порядок октетов на обратный.
Преобразуйте число в десятичное.
Скопируйте
Remote Encryption
>
Long-term Key
.
Преобразуйте из base64 в hex.
LongTermKey.Rand
Скопируйте
EDIV
.
Уберите пробелы между октетами.
Скопируйте
Remote Encryption
>
Encrypted Diversifier
.
Преобразуйте из base64 в hex.
Измените порядок октетов на обратный.
LongTermKey.EDiv
Xbox wireless controller
Скопируйте
LTK
.
Уберите пробелы между октетами.
?
SlaveLongTermKey.Key
Примечание
Чтобы просто удалить пробелы из значения, можно использовать
этот онлайн-инструмент
или такой код
Python
:
>>> "
значение с пробелами
".replace(" ", "")
Вот так можно изменить порядок октетов на обратный (обратите внимание, что в итоге получится список строк с октетами):
>>> ERand=" 63 02 84 B8 5D 40 44 DF   "
>>> ERand=list(reversed(ERand.strip().split()))
Вот так можно преобразовать этот список в десятичное число, если требуется:
>>> int("".join(ERand), 16)
16088054540146049635
Преобразование base64 в hex (перед этим импортируйте модули командой
import binascii, base64
):
binascii.hexlify(base64.decodebytes(b'...')).upper()
Преобразование macOS Encrypted Diversifier (тоже импортируйте модуль командой
import struct
):
struct.unpack('<H', base64.decodebytes(b'...'))
Преобразование macOS Random Number:
struct.unpack('<Q', base64.decodebytes(b'...'))
Примеры в общем случае:
Из
LTK
со значением
48 4D AF CD 0F 92 22 88 0A 52 9A F4 76 DA 8B 94
должен получиться
LongTermKey.Key
со значением
484DAFCD0F9222880A529AF476DA8B94
.
Из
ERand
со значением
63 02 84 B8 5D 40 44 DF
должен получиться
Rand
со значением
16088054540146049635
.
Из
EDIV
со значением
37520
должен получиться
EDiv
со значением
37520
.
Завершение
Теперь, когда у вас есть нужные ключи, войдите как root и перейдите в каталог:
# cd /var/lib/bluetooth/
MAC-адрес-адаптера'
Здесь вы найдёте подкаталоги для каждого сопряжённого устройства. Для каждого нужного устройства перейдите в его подкаталог:
# cd
MAC-адрес-устройства
Примечание
На этом этапе, если вы используете устройство, которое инкрементирует свой MAC-адрес при каждом сопряжении, вы должны переименовать каталог нужного устройства на актуальный инкрементированный MAC-адрес, получившийся при последнем сопряжении. Либо скопируйте MAC-адрес из другой системы, либо увеличьте его самостоятельно, не забывая о том, что каждый октет — это двузначное
шестнадцатеричное
число.
Если у вас есть только один ключ сопряжения (то есть устройство не является устройством Bluetooth 5.1), измените файл
info
и подставьте ключ под
[LinkKey]
, например:
info
[LinkKey]
Key=XXXXXXXXXXXXXXX
Примечание
Все буквы должны быть в верхнем регистре. Уберите все пробелы.
Если у вас несколько ключей, то есть устройство является устройством Bluetooth 5.1, измените файл
info
, прописав в нём значения, которые вы получили после выполнения описанных выше преобразований. Пример для Xbox One S Wireless Controller:
info
[IdentityResolvingKey]
Key=<IdentityResolvingKey.Key>

[PeripheralLongTermKey]
Key=<PeripheralLongTermKey.Key>

[SlaveLongTermKey]
Key=<SlaveLongTermKey.Key>
Затем
перезапустите
bluetooth.service
и
pulseaudio
(командой
pulseaudio -k && pulseaudio --start
).
Теперь устройство должно успешно подключаться.
Примечание
В зависимости от вашего менеджера Bluetooth может понадобиться выполнить полную перезагрузку для переподключения устройств.
Настройка
Default transport 3.0 vs 5.x (low energy)
Чтобы заставить контроллер Bluetooth использовать более старый транспортный протокол Bluetooth (например, из-за того, что для устройства 3.0 проще настроить сопряжение с двойной загрузкой, чем для устройства 5.x BLE), установите
ControllerMode=bredr
в
/etc/bluetooth/main.conf
в разделе
[General]
:
/etc/bluetooth/main.conf
[General]
ControllerMode=bredr
Значение по умолчанию
ControllerMode=dual
т.е. включены оба: BR/EDR и LE.
Состояние питания адаптера по умолчанию
С версии
bluez
5.65 питание всех Bluetooth-адаптеров по умолчанию включается при запуске службы или после пробуждения из сна.
[2]
Если вы хотите, чтобы адаптер не включался автоматически (например, на портативном устройстве, на котором вы хотите сэкономить заряд батареи), в файле
/etc/bluetooth/main.conf
в разделе
[Policy]
пропишите
AutoEnable=false
:
/etc/bluetooth/main.conf
[Policy]
AutoEnable=false
Адаптер можно будет включить вручную командой
power on
, как упоминалось в разделе
#Сопряжение
.
Видимость при запуске системы
Если вы хотите, чтобы ваше устройство всегда было видимо и доступно для подключения:
/etc/bluetooth/main.conf
[General]
DiscoverableTimeout = 0
Пробуждение из сна
Чтобы разрешить Bluetooth-клавиатурам, мышам и т. д. пробуждать систему из сна, сначала проверьте настройки BIOS и убедитесь, что функция пробуждения от USB включена. Во многих случаях Bluetooth на материнской плате является USB-устройством.
Добавьте новое правило udev для адаптеров Bluetooth (
Базовый класс беспроводного контроллера USB
, протокол интерфейса программирования Bluetooth), чтобы включить выход из режима ожидания:
/etc/udev/rules.d/91-bluetooth-wakeup.rules
ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", \

    ATTR{bDeviceClass}=="e0", \
    ATTR{bDeviceProtocol}=="01", \
    ATTR{bDeviceSubClass}=="01", \
ATTR{power/wakeup}="enabled"
Чтобы автоматически изменить настройки Bluetooth-клавиатуры после пробуждения, например раскладку или частоту повторения зажатых клавиш (смотрите
Конфигурация клавиатуры в Xorg#Регулировка задержки и скорости автоповтора
и
xmodmap (Русский)
), создайте такой скрипт и сделайте его
исполняемым
:
configure_keyboard.sh
#!/bin/sh
export DISPLAY=:0
xset r rate 220 30
xmodmap
/путь/к/.Xmodmap
И добавьте ещё одно правило, подобное приведённому выше, для запуска этого скрипта:
/etc/udev/rules.d/92-keyboard-reconfiguration-wakeup.rules
ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", \
    ATTR{bDeviceClass}=="e0", \
    ATTR{bDeviceProtocol}=="01", \
    ATTR{bDeviceSubClass}=="01" \
RUN+="/
your
/
path
/
to
/configure_keyboard.sh"
Включение экспериментальных функций
В стеке Bluez новые функции, потенциально имеющие ошибки, спрятаны за опциями Experimental и KernelExperimental. Набор функций, управляемых этими опциями, меняется со временем; некоторые функции могут стать стабильными и больше не требовать включения этих опций. Пример: включение экспериментальных интерфейсов D-Bus в настоящее время позволяет сообщать об уровне заряда батареи для старых гарнитур. Для включения раскомментируйте соответствующие строки в файле настроек:
/etc/bluetooth/main.conf
...

# Enables D-Bus experimental interfaces
# Possible values: true or false
Experimental = true
# Enables kernel experimental features, alternatively a list of UUIDs
# can be given.
# Possible values: true,false,<UUID List>
# Possible UUIDS:
...
# Defaults to false.
KernelExperimental = true
Другой способ —
отредактировать
юнит
bluetooth.service
, создав
drop-in файл
и добавив флаг
--experimental
или
--kernel
для запускаемой команды:
/etc/systemd/system/bluetooth.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/lib/bluetooth/bluetoothd --experimental
В обоих случаях
перезапустите
bluetooth.service
после внесения изменений.
Аудио
Обычно нужны дополнительные шаги для интеграции аудиосервера с Bluetooth. Подробнее это описано ниже.
Смотрите также
Bluetooth наушники
для информации о подключении Bluetooth-гарнитуры.
PulseAudio
Установите пакет
pulseaudio-bluetooth
. Не забудьте перезапустить
PulseAudio
после переустановки:
pulseaudio -k
. При стандартной установке PulseAudio (то есть при использовании пользовательской службы со стандартным
default.pa
) после этого у вас сразу должна появиться возможность использования Bluetooth-устройств.
[3]
Если ваш PulseAudio работает как общесистемная служба, убедитесь, что пользователь, от имени которого запущен демон (обычно
pulse
), состоит в группе
lp
, и не забудьте загрузить нужные модули:
/etc/pulse/system.pa
...
load-module module-bluetooth-policy
load-module module-bluetooth-discover
...
Также можно добавить модуль
load-module module-switch-on-connect
, если вы хотите автоматически переключать все звуки на устройство Bluetooth.
PipeWire
PipeWire с версии 0.3.19 включает свою поддержку Bluetooth по умолчанию.
ALSA
Примечание
Bluez5 прекратил поддержку
ALSA
и поддерживает только
PulseAudio
. Используйте эту инструкцию, только если вы не можете или не хотите использовать PulseAudio.
Сперва убедитесь, что ваше аудиоустройство Bluetooth подключено и сопряжено с системой.
Затем установите
bluez-alsa-git
AUR
, запустите (и включите) службу
bluealsa
и добавьте своего пользователя в группу
audio
.
Выполните следующую команду для проверки, что всё работает (замените
XX:XX:XX:XX:XX:XX
и
ФАЙЛ.wav
на нужные значения):
$ aplay -D bluealsa:SRV=org.bluealsa,DEV=
XX:XX:XX:XX:XX:XX
,PROFILE=a2dp
ФАЙЛ.wav
В завершение добавьте эти строки в
~/.asoundrc
:
~/.asoundrc
defaults.bluealsa {
    service "org.bluealsa"
    device "XX:XX:XX:XX:XX:XX"
    profile "a2dp"
}
Теперь можно использовать устройство
bluealsa
для доступа к аудиоустройству Bluetooth. Управление громкостью обычно осуществляется через
alsamixer
с опцией
-D bluealsa
.
Bluetooth serial
Чтобы получить последовательную связь на Bluetooth-to-Serial модулях (HC-05, HC-06), выполните следующие шаги:
Выполните сопряжение с вашим устройством Bluetooth с помощью
bluetoothctl
, как описано в разделе
#Сопряжение
.
Установите
bluez-deprecated-tools
, поскольку он предоставляет функции, отсутствующие в более новых инструментах.
Привяжите MAC-адрес сопряжённого устройства к терминула tty:
# rfcomm bind rfcomm0
MAC-адрес-устройства
Теперь можно открыть
/dev/rfcomm0
для последовательной связи:
$ picocom /dev/rfcomm0 -b 115200
Решение проблем
Основное
Отладка
Для отладки сперва
остановите
bluetooth.service
.
Затем запустите его напрямую с параметром
-d
:
# /usr/lib/bluetooth/bluetoothd -n -d
Другой вариант — использовать инструмент
btmon
.
Устаревшие инструменты BlueZ
Восемь инструментов BlueZ
объявлены устаревшими
и удалены из
bluez-utils
, хотя не для всех из них есть замена среди новых инструментов. Пакет
bluez-deprecated-tools
предоставляет эти устаревшие инструменты.
Устаревший инструмент
Ближайшая замена
gatttool
btgatt-client,
D-Bus Gatt API
[
устаревшая ссылка
2023-10-29 ⓘ]
hciattach
btattach
hciconfig
btmgmt (и bluetoothctl?)
hcidump
btmon (и btsnoop)
hcitool
отсутствует, есть
D-Bus Device API
[
устаревшая ссылка
2023-10-29 ⓘ]
rfcomm
отсутствует, сделать с
D-Bus Profile1 API
[
устаревшая ссылка
2023-10-29 ⓘ]
?
ciptool
sdptool
отсутствует, функциональность кажется разбросанной по разным объектам DBus:
Profile
[
устаревшая ссылка
2023-10-29 ⓘ]
,
Advertising
[
устаревшая ссылка
2023-10-29 ⓘ]
, и массивы UUID в
device
[
устаревшая ссылка
2023-10-29 ⓘ]
и
adapter
[
устаревшая ссылка
2023-10-29 ⓘ]
.
Проблемы службы
systemd: Condition check resulted in Bluetooth service being skipped
bluetooth.service
требует только существование каталога
/sys/class/bluetooth
, который создаётся модулем ядра
bluetooth
, который автоматически загружается через
systemd-udev
, если он находит работающее устройство Bluetooth.
Если у вас
/sys/class/bluetooth
не существует, проверьте, что модуль Bluetooth загружен, командой
lsmod
. Если нет, и вы уверены, что у вас есть устройство Bluetooth, попробуйте
загрузить его вручную
и
перезапустить
службу
bluetooth.service
.
Также нужно загрузить соответствующий драйвер Bluetooth, чаще всего
btusb
, но иногда могут понадобиться
btrtl,btintel,btbcm,bnep,btusb
и т.д.
Проверьте
статус
службы
bluetooth.service
, чтобы убедиться, что она запущена.
Смотрите также
Debian Bug report logs - #853207
.
Если
bluetooth.service
успешно запускается, но нормально использовать Bluetooth всё равно не получается (например,
bluetoothctl
говорит что-то вроде
org.Bluez.Error.NotReady
при выполнении
scan on
), попробуйте перезагрузить компьютер и дважды проверьте: каталог
/sys/class/bluetooth
существует;
lsmod
содержит нужные модули Bluetooth; сообщения в
журнале
; и т.д.
systemd-udev
должен подхватить ваше устройство Bluetooth автоматически.
Bluetooth сразу пробуждает систему из режима suspend-to-idle
На системах с поддержкой
suspend-to-idle/S2idle/S0ix/Modern Standby
Bluetooth-контроллеры остаются включенными в этом режиме сна. Это обычно приводит к тому, что система
просыпается сразу после перехода в сон
, если подключено какое-либо устройство Bluetooth.
Чтобы предотвратить это, вы можете полностью отключить Bluetooth перед переходом в сон. Установите
bluez-utils
и создайте файл:
/etc/systemd/system/bluetooth-disable-before-sleep.service
[Unit]
Description=Disable Bluetooth before going to sleep
Before=sleep.target
Before=suspend.target
Before=hybrid-sleep.target
Before=suspend-then-hibernate.target
StopWhenUnneeded=yes

[Service]
Type=oneshot
RemainAfterExit=yes

ExecStart=/usr/bin/bluetoothctl power off
ExecStop=/usr/bin/bluetoothctl power on

[Install]
WantedBy=sleep.target
WantedBy=suspend.target
WantedBy=hybrid-sleep.target
WantedBy=suspend-then-hibernate.target
Включите
эту службу и проверьте, что Bluetooth отключается при переходе в сон и включается обратно после пробуждения.
При использовании этого обходного решения
#Пробуждение из сна
с помощью клавиатуры или мыши не будет работать.
Bluetooth отключается после выхода на headless-системе или сервере
Это может быть вызвано различными причинами:
И
PulseAudio
, и
PipeWire
по умолчанию работают как пользовательские службы, которые завершают работу после завершения последнего сеанса. Чтобы этого не происходило,
включите lingering
для пользователя.
Кроме того, при использовании
WirePlumber
с
PipeWire
(что обычно и происходит) WirePlumber запускает «logind-monitor», который включает Bluetooth при входе и отключает его при выходе. Решение описано в разделе
WirePlumber#Keep Bluetooth running after logout / Headless Bluetooth
.
Проблемы адаптера
hcitool scan: Устройство не найдено
На некоторых ноутбуках Dell (например, Studio 15) вы должны переключить режим Bluetooth с HID на HCI. Установите пакет
bluez-hid2hci
, после чего
udev
будет делать это автоматически. В качестве альтернативы вы можете выполнить эту команду для переключения на HCI вручную:
# /usr/lib/udev/hid2hci
Если устройство не появится, а на вашей машине есть операционная система Windows, попробуйте загрузиться в её и включить адаптер Bluetooth через Windows.
Иногда также помогает эта простая команда:
# bluetoothctl power on
bluetoothctl: No default controller available
В Bluetooth-контроллерах некоторых материнских плат есть ошибка. Чтобы проверить, столкнулись ли вы с такой ошибкой, выполните
journalctl | grep hci
. Если в журнале есть записи вроде «command tx timeout» или «Reading Intel version command failed», выключите компьютер и физически отсоедините кабель питания на несколько секунд. Таким образом прошивка контроллера будет принудительно перезагружена (в то время как стандартная перезагрузка системы этого не сделает).
Сообщение об ошибке.
Эта ошибка может случаться, если устройство заблокировано через
rfkill
.
Также это случается с некоторыми картами intel (такими как 8260), которые не распознаются корректно службой Bluetooth. Иногда использование устаревшего
bluez-deprecated-tools
, как сообщалось, решает проблему.
Это также может быть вызвано мерами по энергосбережению, тогда добавление
параметра ядра
btusb.enable_autosuspend=n
может помочь. Смотрите также
Red Hat Bugzilla – Bug 1573562
.
Иногда выгрузка и загрузка модуля
btusb
без параметров помогает вернуть контроллер:
# modprobe -r btusb
# modprobe btusb
Это также может случиться с
клоном CSR
.
rfkill unblock: не происходит разблокировка
Если ваше устройство по-прежнему программно блокируется и у вас запущен
ConnMan
, попробуйте это:
$ connmanctl enable bluetooth
Bluetooth USB донгл
Если вы пользуетесь USB донглом, вы должны проверить, что ваш Bluetooth донгл распознан системой. Это можно сделать с помощью команды
journalctl -f
, после того как вы воткнёте USB донгл (или заглянув в
/var/log/messages.log
). Должно появиться что-то вроде следующего (ищите hci):
Feb 20 15:00:24 hostname kernel: [ 2661.349823] usb 4-1: new full-speed USB device number 3 using uhci_hcd
Feb 20 15:00:24 hostname bluetoothd[4568]: HCI dev 0 registered
Feb 20 15:00:24 hostname bluetoothd[4568]: Listening for HCI events on hci0
Feb 20 15:00:25 hostname bluetoothd[4568]: HCI dev 0 up
Feb 20 15:00:25 hostname bluetoothd[4568]: Adapter /org/bluez/4568/hci0 has been enabled
Если вы получили только первые две строки, значит донгл распознан, но вам необходимо его активировать (поднять).
Пример:
# btmgmt
[mgmt]# info
Index list with 1 item
hci0:	Primary controller
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x000000
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
current settings:
connectable discoverable bondable ssp br/edr le secure-conn
	name Mozart
	short name

[mgmt]# select hci0
Selected index 0

[hci0]# power up
hci0 Set Powered complete, settings:
powered
connectable discoverable bondable ssp br/edr le secure-conn

[hci0]# info
hci0:	Primary controller
	addr 00:1A:7D:DA:71:10 version 6 manufacturer 10 class 0x1c0104
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
current settings: powered
connectable discoverable bondable ssp br/edr le secure-conn
Или
# bluetoothctl
[bluetooth]# show
Controller 00:1A:7D:DA:71:10 (public)
	Name: Mozart
	Alias: Mozart
	Class: 0x0000095c
Powered: no
Discoverable: yes
	Pairable: yes

[bluetooth]# power on
[CHG] Controller 00:1A:7D:DA:71:10 Class: 0x001c0104
Changing power on succeeded
[CHG] Controller 00:1A:7D:DA:71:10
Powered: yes
[bluetooth]# show
Controller 00:1A:7D:DA:71:10 (public)
	Name: Mozart
	Alias: Mozart
	Class: 0x001c0104
Powered: yes
Discoverable: yes
	Pairable: yes
Чтобы убедиться, что устройство было определено, вы можете использовать команду
btmgmt
, являющуюся частью
bluez-utils
. Получить список доступных устройств, их идентификаторов и MAC-адресов можно так:
$ btmgmt info
Index list with 1 item
hci0:	Primary controller
	addr 00:1A:7D:DA:71:10
version 6
manufacturer 10 class 0x1c0104
	supported settings: powered connectable fast-connectable discoverable bondable link-security ssp br/edr hs le advertising secure-conn debug-keys privacy static-addr
	current settings: powered connectable discoverable bondable ssp br/edr le secure-conn
Для проверки версии Bluetooth можно сопоставить её с версией HCI по таблице из
официальной спецификации
. Например, в предыдущем выводе HCI
version 6
означает Bluetooth 4.0.
Более детальная информация об устройстве может быть получена с помощью устаревшего инструмента
hciconfig
. (
bluez-deprecated-tools
)
$ hciconfig -a hci0
hci0:   Type: USB
        BD Address: 00:1B:DC:0F:DB:40 ACL MTU: 310:10 SCO MTU: 64:8
        UP RUNNING PSCAN ISCAN
        RX bytes:1226 acl:0 sco:0 events:27 errors:0
        TX bytes:351 acl:0 sco:0 commands:26 errors:0
        Features: 0xff 0xff 0x8f 0xfe 0x9b 0xf9 0x00 0x80
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
        Link policy: RSWITCH HOLD SNIFF PARK
        Link mode: SLAVE ACCEPT
        Name: 'BlueZ (0)'
        Class: 0x000100
        Service Classes: Unspecified
        Device Class: Computer, Uncategorized
        HCI Ver: 2.0 (0x3) HCI Rev: 0xc5c LMP Ver: 2.0 (0x3) LMP Subver: 0xc5c
        Manufacturer: Cambridge Silicon Radio (10)
Устройства аудио начинают пропускать звук на небольшом расстоянии от донгла
Если другие устройства работают через тот же USB-хост, они могут
прерывать связь с устройствами аудио
. Убедитесь, что к USB-шине, к которой подключен Bluetooth, больше не подключено никаких других устройств. Например:
$ lsusb
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 048d:1345 Integrated Technology Express, Inc. Multi Cardreader
Bus 001 Device 003: ID 0424:a700 Standard Microsystems Corp. 2 Port Hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Донгл CSR 0a12:0001
С устройством
ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
есть баг, и оно сейчас работает только в версиях ядра 5.17 и < 6.0. Подробнее смотрите
Kernel Bug 60824
.
Logitech Bluetooth USB донгл
Существуют Logitech донглы (например, Logitech MX5000), которые могут работать в двух режимах: встроенный (Embedded) и HCI. Во встроенном режиме донгл эмулирует устройство USB так, что ваш компьютер думает, что вы используете обычную USB мышь/клавиатуру.
Если вы зажмёте маленькую красную кнопку на USB BT мини-приёмнике, включится другой режим. Удерживайте красную кнопку на BT донгле и вставьте его в компьютер, и через 3-5 секунд удерживания кнопки в системном трее появится иконка Bluetooth (
обсуждение
).
В качестве альтернативы вы можете установить пакет
bluez-hid2hci
. Когда вы подключите ваш Logitech донгл, он автоматически переключится.
Foxconn / Hon Hai / Lite-On Broadcom
Некоторые из этих устройств необходимо прошивать при загрузке.
Некоторые прошивки можно найти в
AUR
по запросу
broadcom
. В частности, стоит упомянуть
broadcom-bt-firmware
AUR
, который содержит файлы для
большого числа карт
.
Если готовых файлов прошивок не нашлось, их можно сконвертировать из Windows-файлов
.hex
в
.hcd
с помощью
hex2hcd
(входит в состав пакета
bluez-utils
).
Чтобы получить нужный
.hex
файл, попробуйте поискать vendor:product (производитель:продукт) из
lsusb
, например:
Bus 002 Device 004: ID
04ca:2006
Lite-On Technology Corp. Broadcom BCM43142A0 Bluetooth Device
или
Bus 004 Device 004: Id
0489:e031
Foxconn / Hon Hai
В качестве альтернативы можно загрузиться в Windows (виртуальная машина тоже подойдёт) и посмотреть название прошивки в «Диспетчере устройств». Если вы хотите знать модель устройства, но не видите его в
lsusb
, его можно увидеть в
lsusb -v
как
iProduct
.
Файл
.hex
можно извлечь из скачанного драйвера Windows без необходимости загружаться в Windows. Скачайте правильный драйвер, например
Bluetooth Widcomm
[
устаревшая ссылка
2023-09-16 ⓘ]
. Для извлечения файлов может понадобиться
unrar
или
cabextract
в зависимости от формата. Чтобы найти, какой из
.hex
файлов нужен вам, смотрите
Win32/bcbtums-win7x86-brcm.inf
и ищите строку
[RAMUSB
E031
.CopyList]
, где
E031
следует заменить на product code вашего устройства (второе hex-число из
lsusb
) в верхнем регистре. Сразу под этой строкой вы увидите имя нужного
.hex
файла.
Когда вы сконвертируете его в
.hcd
, скопируйте его в
/lib/firmware/brcm/BCM.hcd
— это имя файла предлагает
dmesg
и может быть другим, так что проверьте вывод
dmesg
у себя. Затем перезагрузите модуль
# rmmod btusb
# modprobe btusb
Теперь устройство должно быть доступно. Смотрите
BBS#162688
для информации о том, как сделать эти изменения постоянными.
Комбинированные WiFi-Bluetooth карты Intel
See
Wireless network configuration (Русский)#Bluetooth Coexistence
.
Mediatek MT7921 или MT7961 при двойной загрузке с Windows
В системах с двойной загрузкой, если версии прошивок Bluetooth отличаются в Windows и Linux, адаптер Bluetooth не заработает после перезагрузки в Windows.
Лучший способ предотвратить это — обновить драйверы (и особенно прошивку) Bluetooth до последней версии в каждой ОС.
Если вы не можете найти свежий драйвер (или прошивку) для Windows, можно скопировать файл прошивки
/usr/lib/firmware/mediatek/BT_RAM_CODE_MT7961_1_2_hdr.bin.xz
из Arch Linux и распаковать в Windows (например,
C:\WINDOWS\system32\DRIVERS\
, точный путь к файлу прошивки можно найти в диспетчере устройств).
Адаптер пропадает после ждущего режима
Сперва найдите product ID адаптера. Например:
$ lsusb -tv
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
    ...
    |__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
        ID 8087:0025 Intel Corp.
    |__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
        ID 8087:0025 Intel Corp.
    ...
В данном случае vendor ID — 8087, product ID — 0025.
Затем используйте
usb_modeswitch
для сброса адаптера:
# usb_modeswitch -R -v
vendor_ID
-p
product_ID
Проблемы с сопряжением и соединением
Мой компьютер невидим
Включите режим обнаружения:
# bluetoothctl discoverable on
Убедитесь, что он включен:
# bluetoothctl show
Powered: yes
	Discoverable: yes
	Pairable: yes
Примечание
Проверьте
DiscoverableTimeout
и
PairableTimeout
в
/etc/bluetooth/main.conf
.
Если компьютер всё равно невидим, попробуйте изменить класс устройства в
/etc/bluetooth/main.conf
как показано ниже:
# Default device class. Only the major and minor device class bits are
# considered.
#Class = 0x000100 # Computer Type (from default config)
Class = 0x100100 # (Object-Transfer Service & Computer Type)
Примечание
Иногда
Class
в файле
main.conf
оказывается переопределён после инициализации устройства, так что попробуйте установить класс напрямую с помощью
hciconfig hci0 class 100100
.
Пользователь сообщал, что это было единственное решение, сделавшее его компьютер видимым для телефона. Телевизоры LG (и некоторые другие) видимы с других устройств аудио, так что использование класса
000414
(soundbar) заставит такие устройства появиться.
Смотрите
https://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html
для генерации классов устройств/служб Bluetooth.
Устройство подключается и затем отключается спустя мгновение
Если вы видите в журнале подобные сообщения и устройство не может подключиться или отключается вскоре после подключения:
bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107)
bluetoothd: connect error: Connection refused (111)
Это может быть из-за того, что вы уже настроили сопряжение с этим устройством в другой операционной системе с тем же Bluetooth-адаптером (например, в случае двойной загрузки). Некоторые устройства не могут обрабатывать несколько сопряжений с одним и тем же MAC-адресом. Смотрите
#Сопряжение при двойной загрузке
для решения этой проблемы.
Устройство не видно при сканировании
Некоторые устройства Bluetooth low energy не отображаются при сканировании в bluetoothctl, например
Logitech MX Master
. Для их поиска можно использовать
transport le
.
# bluetoothctl
[bluetooth]# menu scan
[bluetooth]# transport le
[bluetooth]# back
[bluetooth]# scan on
[bluetooth]# devices
...
Device XX:XX:XX:XX:XX:XX DA V2 X <---- low energy device here
Другой способ — установить
bluez-deprecated-tools
,
запустить
службу
bluetooth.service
и выполнить:
# bluetoothctl
[NEW] Controller (MAC) myhostname [default]

[bluetooth]# power on
[CHG] Controller (MAC) Class: 0x0c010c
Changing power on succeeded
[CHG] Controller (MAC) Powered: yes

[bluetooth]# scan on
Discovery started
[CHG] Controller (MAC) Discovering: yes
В другом терминале:
# hcitool lescan
Дождитесь появления устройства и затем прервите hcitool с помощью
Ctrl+c
. Теперь bluetoothctl должен увидеть ваше устройство и позволить нормально настроить сопряжение.
Устройства BLE не видны на Intel Corp. AX200 Bluetooth
Похоже, что пассивное сканирование BLE на этом устройстве не работает; смотрите
сообщение об ошибке
.
Не удаётся переподключиться после сна
Вы можете заметить, что не удаётся переподключиться к устройству после того, как оно перешло в спящий режим, или после пробуждения компьютера из сна.
Например, вы можете увидеть в журнале следующие ошибки:
bluetoothd[487]: Authentication attempt without agent
bluetoothd[487]: Access denied: org.bluez.Error.Rejected
Это может быть связано с тем, что устройство не отмечено как доверенное (
trusted
). Смотрите раздел
#Сопряжение
.
Проблемы с определёнными устройствами
Bluetooth-мышь тормозит / отключается / зависает
Смотрите
Bluetooth мышь#Решение проблем
.
Аудиоустройство не может подключиться с ошибкой br-connection-profile-unavailable
Bluetooth-аудио не сможет подключиться, если используется pipewire (вместо pulseaudio-bluetooth), а экземпляр pipewire не запущен. Запустите
пользовательскую службу
pipewire.service
или воспроизведите какой-нибудь звук, чтобы запустился демон pipewire, а затем попробуйте подключить устройство снова.
Интерференция между наушниками и мышью
Если аудио заикается при одновременном использовании Bluetooth-мыши и клавиатуры, попробуйте это, как указано на странице
https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215
в комментарии #23:
# hciconfig hci0 lm ACCEPT,MASTER
# hciconfig hci0 lp HOLD,SNIFF,PARK
Постоянное переподключение с TP-LINK UB400 и контроллером Xbox
Используйте такие настройки:
/etc/bluetooth/main.conf
...
[General]
JustWorksRepairing = always
FastConnectable = true
Class = 0x000100
...
[GATT]
ReconnectIntervals=1,1,2,3,5,8,13,21,34,55
AutoEnable=true
...
Перезапустите
службу
bluetooth.service
после внесения изменений.
Смотрите также
обсуждение в проекте xpadneo
(но использовать сам xpadneo не требуется).
Проблемы с передачей файлов
gnome-bluetooth
Если вы видите это при попытке включить получение файлов в настройках bluetooth:
Bluetooth OBEX start failed: Invalid path
Bluetooth FTP start failed: Invalid path
То убедитесь, что
пользовательские каталоги XDG
существуют.
Не удаётся получить файлы из-за символической ссылки
Если передача файла обрывается, хотя во всём остальном Bluetooth-соединение нормально работает, проблема может быть из-за символических ссылок в пути. В журнале могут появиться примерно такие записи:
Jun 18 11:18:13 ember obexd[3338969]: open(/home/me/.cache/obexd/MOC740): Operation not permitted (1)
Если показанный здесь путь содержит символическую ссылку, то obexd по умолчанию
не примет его
. Поведение можно переопределить с помощью
drop-in файла
для
пользовательской службы
obex.service
:
~/.config/systemd/user/obex.service.d/10-symlink.conf
[Service]
ExecStart=
ExecStart=/usr/lib/bluetooth/obexd --symlinks
Затем выполните
systemctl daemon-reload --user
от имени нужного пользователя и
перезапустите
пользовательский юнит
obex.service
.
Смотрите также
Keeping Bluetooth devices paired between Linux and Windows
Bluetooth link keys on dual-boot systems