Bluetooth (Русский)

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

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

Установка

  1. Установите пакет bluez, который предоставляет стек протоколов Bluetooth.
  2. Установите bluez-utils, предоставляющий утилиту bluetoothctl. Также можно установить bluez-deprecated-tools, который содержит устаревшие инструменты 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-deprecated-tools. Подробнее смотрите FS#53110 и Bluez mailing list.
  • Начиная с этого коммита, bluez-obex и bluez-mesh отделены от пакета bluez. Поэтому, если вы планируете передавать файлы по Bluetooth, также установите bluez-obex.

Фронтенды

Консольные

  • bluetoothctl — Сопряжение устройств через командную строку является одним из самых простых и надёжных вариантов.
https://www.bluez.org/ || bluez-utils
  • bluetuith — TUI-менеджер bluetooth для облегчения сопряжения и управления устройствами/адаптерами, с передачей файлов OBEX и поддержкой мыши.
https://www.github.com/darkhz/bluetuith || bluetuithAUR
Совет: Для автоматизации команд bluetoothctl используйте echo -e "команда1\nкоманда2\n" | bluetoothctl или bluetoothctl -- команда.

Графические

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

  • GNOME Bluetooth — Инструмент Bluetooth в GNOME.
    • gnome-bluetooth-3.0 предоставляет бэкенд (gnome-bluetooth — старая версия)
    • gnome-shell предоставляет апплет мониторинга статуса
    • gnome-control-center предоставляет графический интерфейс настройки, для открытия которого можно ввести Bluetooth в поиске или выполнить команду gnome-control-center bluetooth.
    • Также можно использовать команду bluetooth-sendto напрямую для отправки файлов на удалённое устройство.
    • nautilus-bluetoothAUR добавляет пункт отправки по Bluetooth в контекстное меню файлов
    • Для получения файлов откройте панель настроек Bluetooth; принимать файлы можно только при открытых настройках.
    • Для добавления пункта отправки файла по Bluetooth в контекстном меню Thunar смотрите инструкции здесь (укажите команду 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
  • Overskride — Простой, но мощный клиент bluetooth.
https://github.com/kaii-lb/overskride#overskride || overskrideAUR

Сопряжение

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

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

Точная процедура зависит от особенностей конкретного устройства; эта инструкция описывает сопряжение с устройством при помощи bluetoothctl лишь в общих чертах.

Запустите интерактивную команду bluetoothctl. После этого можно ввести help для получения списка доступных команд.

  1. (необязательно) Выберите контроллер по умолчанию командой select MAC-адрес.
  2. (необязательно) Включите питание контроллера, введя power on, если он выключен. По умолчанию он включен; смотрите #Состояние питания адаптера по умолчанию.
  3. Введите devices, чтобы увидеть MAC-адрес устройства для сопряжения.
  4. Войдите в режим обнаружения устройств при помощи команды scan on, если нужного вам устройства нет в списке.
  5. Включите агент при помощи agent on или выберите конкретный агент: если вы введёте agent и дважды нажмёте Tab, будет отображён список доступных вариантов. Агент Bluetooth управляет кодом сопряжения. default-agent должен подойти в большинстве случаев. [1]
  6. Введите pair MAC-адрес, чтобы осуществить сопряжение (работает автодополнение по tab).
  7. При использовании устройства без PIN, возможно, потребуется подтверждение, прежде чем оно сможет успешно переподключиться. Для этого введите trust MAC-адрес.
  8. Наконец, используйте 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

Сопряжение при двойной загрузке

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

Ниже описан ручной способ изменения. Для автоматизации можно использовать bt-dualboot.

Подготовка

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

Примечание: Некоторые устройства Logitech, например Logitech MX Master и Logitech 604 Lightspeed, инкрементируют MAC-адрес при каждом сопряжении. Проверьте, случается ли это у вас, и учтите это при завершении процесса.

Для 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-раздел.

$ cd /путь/к/windows/диску/Windows/System32/config
$ chntpw -e SYSTEM
Примечание: Вместо CurrentControlSet вы можете увидеть ControlSet00X, где X — любое число. Проверьте это с помощью команды ls.

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

> cd CurrentControlSet\Services\BTHPORT\Parameters\Keys

или

> cd ControlSet00X\Services\BTHPORT\Parameters\Keys

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

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

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

> hex 123456789876
: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 или новее:
    1. Откройте «Связку ключей» и в строку поиска введите Bluetooth.
    2. Отсортируйте по дате.
    3. Если переподключение устройства выполнялось недавно, можно просто отсортировать ключи по дате и выбрать самый свежий. Скорее всего он будет иметь название MobileBluetooth (для старых устройств) или просто UUID (для Bluetooth 5.1+).
    4. Дважды щёлкните по записи. Проверьте, что в качестве учётной записи указан MAC-адрес вашего устройства.
    5. Поставьте галочку «Показать пароль». Система попросит вас ввести свой пароль.
    6. Скопируйте показанный пароль, который по сути является XML-файлом (⌘+a ⌘+c)
    7. Вставьте и сохраните его в файл 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.strip().split()))

Если это устройство Bluetooth 5.1, то у одного устройства будет несколько ключей. Перейдите к разделу #Подготовка ключей Bluetooth 5.1 для работы с ними.

Наконец, импортируйте ключи в вашу установку Linux, как описано в разделе #Завершение.

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

Если во время выполнения описанных выше шагов вы получили ключи для устройств Bluetooth 5.1, то перед импортом в Linux необходимо преобразовать значения определённым образом для последующего использования на этапе #Завершение. Процесс преобразования зависит от конкретного устройства; примеры для некоторых устройств приведены ниже.

Устройство Источник ключа и преобразования (Windows) Источник ключа и преобразования (macOS) Название получаемого значения
  • Logitech MX Master 3
  • Logitech MX Master 3S
  • Logitech MX Keys
  • 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
  • Скопируйте IRK.
  • Уберите пробелы между октетами.
? IdentityResolvingKey.Key
  • Скопируйте CSRK.
  • Уберите пробелы между октетами.
? LocalSignatureKey.Key
  • Скопируйте LTK.
  • Уберите пробелы между октетами.
? LongTermKey.Key
  • Скопируйте KeyLength.
  • Преобразуйте число в десятичное.
? LongTermKey.EncSize
  • Скопируйте EDIV.
  • Преобразуйте число в десятичное.
? LongTermKey.EDiv
  • Скопируйте ERand.
  • Измените порядок октетов на обратный.
  • Преобразуйте число в десятичное.
? LongTermKey.Rand
  • ThinkPad TrackPoint Keyboard II
  • Pebble M350 mouse
  • Logitech G604 Lightspeed mouse
  • Скопируйте 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
Примечание:
>>> "значение с пробелами".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 может понадобиться выполнить полную перезагрузку для переподключения устройств.

Настройка

Состояние питания адаптера по умолчанию

С версии 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-устройством.

Найдите ID производителя и ID устройства для адаптера Bluetooth.

$ lsusb | grep bluetooth -i
Bus 001 Device 002: ID 8087:0039 Intel Corp. AX200 Bluetooth

Добавьте новое правило udev для указанных ID производителя и ID устройства, чтобы включить для этого устройства пробуждение из сна.

/etc/udev/rules.d/91-keyboard-mouse-wakeup.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/bin/sh -c 'echo enabled > /sys$env{DEVPATH}/../power/wakeup;'"

Чтобы автоматически изменить настройки 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
SUBSYSTEM=="usb", ATTRS{idVendor}=="8087", ATTRS{idProduct}=="0039" RUN+="/путь/к/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-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-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-firmwareAUR, который содержит файлы для большого числа карт.

Если готовых файлов прошивок не нашлось, их можно сконвертировать из 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 и ищите строку [RAMUSBE031.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.

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