Bluetooth (Русский) - ArchWiki

Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Bluetooth. Дата последней синхронизации: 24 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Ссылки по теме

- Bluetooth мышь
- Bluetooth клавиатура
- Bluetooth наушники
- Blueman
- ObexFTP

Bluetooth является стандартом для беспроводных соединений малой дальности сотовых телефонов, компьютеров и других электронных устройств. В Linux канонической реализацией стека протоколов Bluetooth является BlueZ.

## Установка

1. Установите пакет bluez, который предоставляет стек Bluetooth протокола.
2. Установите bluez-utils, предоставляющий утилиту `bluetoothctl`. В качестве альтернативы можно установить bluez-utils-compatAUR, который содержит устаревшие инструменты BlueZ.
3. Универсальный драйвер Bluetooth находится в модуле ядра `btusb`. Проверьте, что он загружен. Если нет, то загрузите его вручную.
4. Запустите и включите службу `bluetooth.service`.

Примечание:

- По умолчанию демон bluetooth разрешит использовать устройства bnep0 только пользователям, входящим в группу `lp`. Удостоверьтесь, что учетная запись обычного пользователя добавлена в нее, если вы намереваетесь подключаться по bluetooth. Вы можете изменить группу, требуемую для этого, в файле `/etc/dbus-1/system.d/bluetooth.conf`.
- Некоторые адаптеры Bluetooth встроены в платы Wi-Fi (например, Intel Centrino[устаревшая ссылка 2023-05-06 ⓘ]). В этих случаях необходимо, чтобы сперва была включена плата Wi-Fi (обычно при помощи клавиш(и) на ноутбуке), после чего ядро сможет увидеть адаптер Bluetooth.
- Некоторые адаптеры Bluetooth (например, Broadcom) конфликтуют с сетевыми адаптерами. В этом случае вам необходимо удостовериться, что устройство Bluetooth подключается до начала загрузки сетевых служб.
- Некоторые утилиты вроде hcitool и hciconfig объявлены устаревшими и больше не поставляются в пакете bluez-utils. Так как они не получают обновления, рекомендуется избегать их использования. Если они вам всё ещё нужны, установите bluez-utils-compatAUR. Подробнее смотрите FS#53110 и the Bluez mailing list.

### Фронтенды

#### Консольные

- bluetoothctl — Сопряжение устройств через командную строку является одним из самых простых и надежных вариантов.

  http://www.bluez.org/ || bluez-utils

Совет: Для автоматизации команд bluetoothctl используйте `echo -e "команда1\nкоманда2\n" | bluetoothctl` или `bluetoothctl -- команда`.

#### Графические

Следующие пакеты позволяют настраивать Bluetooth с помощью графического интерфейса.

- GNOME Bluetooth — Инструмент Bluetooth в GNOME.
  - gnome-bluetooth предоставляет бэкенд
  - gnome-shell предоставляет апплет мониторинга статуса
  - gnome-control-center предоставляет графический интерфейс настройки, для открытия которого можно ввести Bluetooth в поиске или выполнить команду `gnome-control-center bluetooth`.
  - Также можно использовать команду `bluetooth-sendto` напрямую для отправки файлов на удалённое устройство.
  - nautilus-bluetoothAUR добавляет пункт отправки по Bluetooth в контекстное меню файлов
  - Для получения файлов откройте панель настроек Bluetooth; принимать файлы можно только при открытых настройка.
  - Для добавления пункта отправки файла по Bluetooth в контекстном меню Thunar смотрите инструкции here. (укажите команду `bluetooth-sendto %F`).

  https://wiki.gnome.org/Projects/GnomeBluetooth ||

- 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

- Blueman — Полнофункциональный менеджер Bluetooth.

  https://github.com/blueman-project/blueman || blueman

- ObexFTP — Инструмент для обмена файлами с устройствами через OBEX.

  http://dev.zuckschwerdt.org/openobex/wiki/ObexFtp || obexftpAUR

## Сопряжение

Примечание: Перед использованием устройство Bluetooth убедитесь, что оно не заблокировано через rfkill.

Этот раздел описывает прямую настройку bluez5 через утилиту командной строки bluetoothctl. Это необязательно, если вы используете какой-нибудь другой инструмент (например, GNOME Bluetooth).

Точная процедура зависит от особенностей конкретного устройства; эта инструкция описывает сопряжение с устройством при помощи `/usr/bin/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 pi [default]
    [bluetooth]# agent KeyboardOnly
    Agent registered
    [bluetooth]# default-agent
    Default agent request successful
    [bluetooth]# scan on
    Discovery started
    [CHG] Controller 00:10:20:30:40:50 Discovering: yes
    [NEW] Device 00:12:34:56:78:90 myLino
    [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

### Сопряжение при Dual boot

Чтобы сопряжение работало во всех установленных операционных системах, необходимо изменить ключи сопряжения так, чтобы они были одинаковыми во всех системах.

#### Установка

Чтобы следать это, сперва сделайте сопряжение в вашем Arch Linux. Потом перезагрузитесь в другую ОС и сделайте сопряжение там. Теперь нужно извлечь ключи сопряжения, но сперва отключите Bluetooth-устройства, чтобы не было ненужных попыток подключения до завершения настройки.

#### Для Windows

##### Извлечение ключей в Windows

The factual accuracy of this article or section is disputed.

Reason: The key structure for a BT5.1 mouse may be different than described here. (Discuss in Talk:Bluetooth (Русский))

Запись реестра, содержащая ключи, доступна только пользователю 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-адресам. Если их несколько и вы не знаете, какой из них вам нужен, смотрите эту инструкцию[устаревшая ссылка 2023-05-06 ⓘ] для выяснения MAC-адреса нужного вам Bluetooth-адаптера.

В ветках каждого адаптера лежат записи для каждого сопряжённого устройства аналогично по MAC-адресам с ключами в бинарном виде.

Для каждого устройства, которое вы хотите сделать доступным во всех ОС, нажмите правой кнопкой мыши на соответствующий ключ в реестре и экспортируйте его в .reg. Как вариант, можно скопировать hex-значение.

Если есть записи `LTK`, `ERand` и `EDIV`, значит это Bluetooth 5.1 устройство и эти записи тоже нужно экспортировать.

##### Извлечение ключей в Linux

Примечание: Если ваш Windows-раздел зашифрован Bitlocker'ом, то получить к нему доступ через chntpw не получится.

Перезагрузитесь в Arch. Установите chntpw. Примонтируйте ваш Windows-раздел.

    $ cd /путь/к/windows/диску/Windows/System32/config
    $ chntpw -e SYSTEM

В окружении `chntpw` выполните

    > cd CurrentControlSet\Services\BTHPORT\Parameters\Keys

Затем узнайте MAC-адрес вашего Bluetooth-адаптера и перейдите в соответствующую папку

    > ls
    > cd mac-адрес

Сделайте то же самое с сопряжёнными устройствами:

    > ls

    Node has 0 subkeys and 1 values
    size  type        value name    [value if type DWORD]
    16    REG_BINARY <123456789876>

Теперь можно получить ключ устройства через `hex`:

    > hex 123456789876

    :00000 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (всякие другие символы)

«XX»ы и являются ключом сопряжения. Запомните, какие ключи каким MAC-адресам соответствуют.

В случае BT5.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]

Здесь нужно сохранить `LTK`, `ERand` и `EDIV`.

##### Подготовка ключей Bluetooth 5.1

Если в реестре для нужного устройства были ключи `LTK`, `ERand` и `EDIV`, они должны быть сконвертированы для использования в Linux. `LTK` соответствует `LongTermKey.Key`, `ERand` — `Rand`, `EDIV` — `EDiv`. Значение `ERand` должно быть развёрнуто и преобразовано в десятичное число. ННапример:

- Из `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`.

Примечание: Можно использовать этот Python-код для конвертирования `ERand`:

    >>> ERand=' 63 02 84 B8 5D 40 44 DF   '
    >>> ERand=list(reversed(ERand.strip().split()))
    >>> int("".join(ERand), 16)
    16088054540146049635

#### Для macOS

Загрузитесь в macOS, откройте терминал.

- Если у вас Sierra или старее, выполните

    $ sudo defaults read /private/var/root/Library/Preferences/blued.plist LinkKeys > ~/bt_keys.txt

- Если у вас High Sierra или новее, выполните

    $ sudo defaults read /private/var/root/Library/Preferences/com.apple.bluetoothd.plist LinkKeys > ~/bt_keys.txt

Для старых версий 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`.

Скопируйте файл `bt_keys.txt` на диск, который можно будет прочитать в Arch Linux, и перезагрузитесь в Arch Linux.

#### Завершение

Теперь, когда у вас есть нужные ключи, войдите как root и перейдите в каталог:

    # cd /var/lib/bluetooth/MAC-адрес-адаптера

Здесь вы найдёте подкаталоги для каждого сопряжённого устройства. Для каждого нужного устройства перейдите в его подкаталог:

    # cd MAC-адрес-устройства

Измените файл `info` и подставьте ключ под `[LinkKey]`, например:

    info

    [LinkKey]
    Key=XXXXXXXXXXXXXXX

Примечание: Все буквы должны быть в верхнем регистре. Уберите все пробелы.

Затем перезапустите `bluetooth.service` и `pulseaudio` (командой `pulseaudio -k && pulseaudio --start`).

Теперь устройство должно успешно подключаться.

Примечание: В зависимости от вашего менеджера Bluetooth может понадобиться выполнить полную перезагрузку для переподключения устройств.

## Настройка

### Автоматическое включение после загрузки

По умолчанию адаптер Bluetooth не включается после перезагрузки. Если вам это нужно, добавьте строку `AutoEnable=true` в файле конфигурации `/etc/bluetooth/main.conf` в разделе `[Policy]`:

    /etc/bluetooth/main.conf

    [Policy]
    AutoEnable=true

### Видимость при запуске системы

Если вы хотите, чтобы ваше устройство всегда было видимо и доступно для подключения:

    /etc/bluetooth/main.conf

    [General]
    DiscoverableTimeout = 0

## Аудио

Обычно нужны дополнительные шаги для интеграции аудиосервера с Bluetooth. Подробнее это описано ниже.

Смотрите также Bluetooth headset для информации о подключении Bluetooth-гарнитуры.

### PulseAudio

Установите пакет pulseaudio-bluetooth. Не забудьте перезапустить PulseAudio после переустановки: `pulseaudio -k`. При стандартной установке PulseAudio после этого у вас сразу должна появиться возможность использования Bluetooth-устройств.

Если ваш PulseAudio работает как общесистемная служба, убедитесь, что пользователь, от имени которого запущен демон (обычно `pulse`), состоит в группе `lp`, и не забудьте загрузить нужные модули:

    /etc/pulse/system.pa

    ...
    load-module module-bluetooth-policy
    load-module module-bluetooth-discover
    ...

### PipeWire

PipeWire с версии 0.3.19 включает свою поддержку Bluetooth по умолчанию, смотрите Config Bluetooth.

### ALSA

Примечание: Bluez5 прекратил поддержку ALSA и поддерживает только PulseAudio. Используйте эту инструкцию, только если вы не можете или не хотите использовать PulseAudio.

Сперва убедитесь, что ваше аудиоустройство Bluetooth подключено и сопряжено с системой.

Затем установите bluez-alsa-gitAUR, запустите (и включите) службу `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-rfcommAUR и bluez-utils-compatAUR, так как они предоставляют функции, отсутствующие в более новых инструментах.

Привяжите MAC-адрес сопряжённого устройства к терминула tty:

    # rfcomm bind rfcomm0 MAC-адрес-устройства

Теперь можно открыть `/dev/rfcomm0` для последовательной связи:

    picocom /dev/rfcomm0 -b 115200

## Решение проблем

This article or section is out of date.

Reason: Replace hciconfig with newer commands. (Discuss in Talk:Bluetooth (Русский))

### Отладка

Для отладки сперва остановите `bluetooth.service`.

Затем запустите его напрямую с параметром `-d`:

    # /usr/lib/bluetooth/bluetoothd -n -d

Другой вариант — использовать инструмент `btmon`.

### Устаревшие инструменты BlueZ

Восемь инструментов BlueZ объявлены устаревшими и удалены из bluez-utils, хотя не для всех из них есть замена среди новых инструментов. Пакет bluez-utils-compatAUR предоставляет альтернативный вариант bluez-utils, включающий в себя устаревшие инструменты.

Устаревший инструмент | Ближайшая замена
--- | ---
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 ⓘ].

### gnome-bluetooth

Если вы видите это при попытке включить получение файлов в настройках bluetooth:

    Bluetooth OBEX start failed: Invalid path
    Bluetooth FTP start failed: Invalid path

То убедитесь, что пользовательские каталоги XDG существуют.

### 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

Чтобы убедиться, что устройство было определено, вы можете использовать `hcitool`, являющуюся частью `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-utils-compatAUR)

    $ 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-хост, они могут прерывать связь с устройствами аудио. Убедитесь, что только Bluetooth-устройство подключено к соответствующей USB-шине. Например:

    $ 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 Dongle 0a12:0001

С устройством `ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)` есть баг, и оно сейчас работает только в версиях ядра ≤ 3.9.11. Есть патч для новых версий. Подробнее смотрите Kernel Bug 60824.

### Logitech Bluetooth USB донгл

Существуют Logitech донглы (например, Logitech MX5000), которые могут работать в двух режимах: встроенный (Embedded) и HCI. Во встроенном режиме донгл эмулирует устройство USB так, что ваш компьютер думает, что вы используете обычную USB мышь/клавиатуру.

Если вы нажмёте маленькую красную кнопку на USB BT мини-приёмнике, включится другой режим. Удерживайте красную кнопку на BT донгле и вставьте его в компьютер, и через 3-5 секунд удерживания кнопки в системном трее появится иконка Bluetooth (Обсуждение).

В качестве альтернативы, вы можете установить пакет bluez-hid2hci. Когда вы подключите ваш Logitech донгл, он автоматически переключится.

### 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

Эта ошибка может случаться, если устройство заблокировано через rfkill.

Также это случается с некоторыми картами intel (такими как 8260), которые не распознаются корректно службой Bluetooth. Иногда использование устаревшего bluez-utils-compatAUR взамен bluez-utils, как сообщалось, решает проблему.

Это также может быть вызвано мерами по энергосбережению, тогда добавление параметра ядра `btusb.enable_autosuspend=n` может помочь. Смотрите также Red Hat Bugzilla – Bug 1573562.

### 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 автоматически.

### rfkill unblock: не происходит разблокировка

Если ваше устройство по-прежнему программно блокируется и у вас запущен connman, попробуйте это:

    $ connmanctl enable bluetooth

### Мой компьютер невидим

Включите режим обнаружения:

    # 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.

### Foxconn / Hon Hai / Lite-On Broadcom

Некоторые из этих устройств необходимо прошивать при загрузке. Файлы прошивок не предоставляются, но их можно сконвертировать из 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 ⓘ] (перечислен среди драйверов для Lifebook P771[устаревшая ссылка 2022-09-17 ⓘ]), который содержит драйверы для многих устройств Broadcomm. В случае Widcomm драйвер является самораспаковывающимя RAR-архивом, так что его можно распаковать с помощью unrar x. Чтобы найти, какой из .hex файлов нужен вам, смотрите `Win32/bcbtums-win7x86-brcm.inf` и ищите `[RAMUSBE031.CopyList]`, где `E031` следует заменить на product code вашего устройства (второе hex-число из lsusb) в верхнем регистре.

Когда вы сконвертируете его в .hcd, скопируйте его в `/lib/firmware/brcm/BCM.hcd` — это имя файла предлагает dmesg и может быть другим, так что проверьте вывод dmesg у себя. Затем перезагрузите модуль

    # rmmod btusb
    # modprobe btusb

Теперь устройство должно быть доступно. Смотрите BBS#162688 для информации о том, как сделать эти изменения постоянными.

### Комбинированные WiFi-Bluetooth карты Intel

See Wireless network configuration (Русский)#Bluetooth Coexistence.

### Устройство подключается и затем отключается спустя мгновение

Если вы видите в журнале подобные сообщения и устройство не может подключиться или отключается вскоре после подключения:

    bluetoothd: Unable to get connect data for Headset Voice gateway: getpeername: Transport endpoint is not connected (107)
    bluetoothd: connect error: Connection refused (111)

Это может быть из-за того, что вы уже настроили сопряжение с этим устройством в другой операционной системе с тем же Bluetooth-адаптером (например, в случае dual-booting). Некоторые устройства не могут обрабатывать несколько сопряжений с одним и тем же MAC-адресом. Смотрите #Сопряжение при Dual boot для решения этой проблемы.

### Устройство не подключается и пишет ошибку в журнал

Если при попытке подключения вы видите в журнале сообщение вроде такого:

    a2dp-source profile connect failed for 9C:64:40:22:E1:3F: Protocol not available

попробуйте установить pulseaudio-bluetooth и перезапустить PulseAudio. Эта ошибка может проявиться даже при использовании только передачи файлов.

### Устройство не видно в scan

Некоторые устройства с Bluetooth low energy не отображаются при сканировании в bluetoothctl, например Logitech MX Master. Самым простым найдённым путём для соединения может быть установка bluez-utils-compatAUR, запуск `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 должен увидеть ваше устройство и позволить нормально настроить сопряжение.

### Не удаётся получить файлы из-за символьной ссылки

Если передача файла обрывается при успешно работающем соединении 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`.

### Интерференция между наушниками и мышью

Если аудио заикается при одновременном использовании Bluetooth мыши и клавиатуры, попробуйте это, как указано в #23 https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/424215

    # hciconfig hci0 lm ACCEPT,MASTER
    # hciconfig hci0 lp HOLD,SNIFF,PARK

### Bluetooth мышь двигается с задержкой

Попробуйте изменить файл `/var/lib/bluetooth/XX:XX:XX:XX:XX:XX/YY:YY:YY:YY:YY:YY/info` (где `XX:XX:XX:XX:XX:XX` - MAC-адрес вашего Bluetooth-адаптера, `YY:YY:YY:YY:YY:YY` - MAC-адрес вашей мыши), добавив туда следующие строки:

    [ConnectionParameters]
    MinInterval=6
    MaxInterval=9
    Latency=44
    Timeout=216

Вы можете посмотреть MAC-адрес адаптера командой `hcitool dev`, а MAC-адреса подключенных устройств командой `hcitool con`

### Адаптер пропадает после ждущего режима

Сперва найдите 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

### Проблемы со всеми устройствами BLE на ядре 5.9+

С версии 5.9 стек Bluetooth в ядре пытается использовать link-layer privacy на BLE соединениях. Если устройство работает после сопряжения, но не переносит перезагрузку или ждущий режим — вероятно, из-за этого.

Чтобы обойти [2] эту проблему, откройте `/var/lib/bluetooth/mac_адаптера/mac_устройства/info`, удалите следующие строки и перезапустите `bluetooth.service`:

    [IdentityResolvingKey]
    Key=...

Смотрите связанное обсуждение на форуме Arch.

## Смотрите также

- Keeping Bluetooth devices paired between Linux and Windows
- Bluetooth link keys on dual-boot systems

Category:

- Bluetooth (Русский)

Hidden categories:

- Pages with dead links
- Pages or sections flagged with Template:Accuracy
- Pages or sections flagged with Template:Out of date