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

Jump to content

# Bluetooth (Русский)

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). В этих случаях необходимо, чтобы сперва была включена плата 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-адресам. Если их несколько и вы не знаете, какой из них вам нужен, смотрите эту инструкцию для выяснения 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
hciattach | btattach
hciconfig | btmgmt (и bluetoothctl?)
hcidump | btmon (и btsnoop)
hcitool | отсутствует, есть D-Bus Device API
rfcomm | отсутствует, сделать с D-Bus Profile1 API?
ciptool
sdptool | отсутствует, функциональность кажется разбросанной по разным объектам DBus: Profile, Advertising, и массивы UUID в device и adapter.

### 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 (перечислен среди драйверов для Lifebook P771), который содержит драйверы для многих устройств 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 or sections flagged with Template:Accuracy
- Pages or sections flagged with Template:Out of date