Bluetooth headset (Русский)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Состояние перевода: На этой странице представлен перевод статьи Bluetooth headset. Дата последней синхронизации: 4 декабря 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

На данный момент Arch Linux поддерживает профиль A2DP (Аудио выход) для беспроводного проигрывания аудио прямо с обычной установкой.

Наушники через Pipewire

PipeWire выступает прямой заменой PulseAudio и даёт лёгкий способ установки Bluetooth-наушников. Он имеет поддержку A2DP-профилей из коробки с использованием кодеков SBC/SBC-XQ, AptX, LDAC или AAC, а также HFP/HSP.

Установите пакет pipewire-pulse (который заменяет pulseaudio и pulseaudio-bluetooth).

Демон запустится автоматически как пользовательская служба. Используйте pavucontrol или настройки вашего окружения рабочего стола для конфигурации. Подробее смотрите PipeWire (Русский)#Bluetooth устройства.

Отчёт об уровне заряда батареи

Чтобы узнать текущий заряд батареи ваших наушников, демон bluetoothd должен быть запущен с экспериментальными возможностями.

Это можно сделать, создав замещение файла юнита bluetooth.service и дописав в строке ExecStart опцию -E. После его создания перезапустите службу.

В качестве альтернативы можно создать drop-in файл для службы bluetooth.service со следующим содержимым:

/etc/systemd/system/bluetooth.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/lib/bluetooth/bluetoothd --experimental

После его создания перезапустите службу.

Наушники через Bluez5/PulseAudio

Merge-arrows-2.pngThis article or section is a candidate for merging with Bluetooth (Русский).Merge-arrows-2.png

Notes: Significant redundancy with general setup on Bluetooth page. Should be merged there. Headset-specific info would stay on this page. (Discuss in Talk:Bluetooth#Merging general setup from Keyboard, Mouse, Headset pages)

Установите пакеты pulseaudio-alsa, pulseaudio-bluetooth и bluez-utils — последний предоставляет инструмент bluetoothctl.

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

Настройка через командную строку

Запустите службу bluetooth.service.

Мы будем использовать утилиту командноу строки bluetoothctl для сопряжения и подключения. Более детальное описание и решение проблем смотрите в основной статье Bluetooth (Русский).

Запустите bluetoothctl:

$ bluetoothctl

Вы попадёте в его командную строку. Затем введите:

[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# scan on

Теперь переведите ваши наушники в режим сопряжения, и компьютер вскоре должен обнаружить её. Например,

[NEW] Device 00:1D:43:6D:03:26 Lasmex LBT10

показывает устройство с названием "Lasmex LBT10" и MAC-адресом "00:1D:43:6D:03:26". Мы будем использовать этот MAC-адрес для инициации сопряжения:

[bluetooth]# pair 00:1D:43:6D:03:26

После сопряжения нужно явно подключить устройство (если это не работает, попробуйте команду trust перед попыткой подключения):

[bluetooth]# connect 00:1D:43:6D:03:26

Если возникает ошибка org.bluez.Error.Failed, попробуйте ещё раз, предварительно завершив демон PulseAudio:

$ pulseaudio -k
[bluetooth]# connect 00:1D:43:6D:03:26

Наконец, если вы хотите автоматически подключаться к этому устройству в будущем:

[bluetooth]# trust 00:1D:43:6D:03:26

Если всё работает корректно, вы увидите отдельное устройство вывода в PulseAudio.

Примечание: Устройство может быть отключено по умолчанию. Выберите профиль аудио (OFF, A2DP, HFP) на вкладке «Конфигурация» в pavucontrol.

Теперь можно направить любое аудио на это устройство на вкладках «Проигрывание» и «Запись» в pavucontrol.

Теперь вы можете остановить сканирование и выйти из программы:

[bluetooth]# scan off
[bluetooth]# exit

Автоподключение

Чтобы наушники автоматически подключались, нужно включить PulseAudio-модуль switch-on-connect. Добавьте следующие строки в /etc/pulse/default.pa:

/etc/pulse/default.pa
### Automatically switch to newly-connected devices
load-module module-switch-on-connect
Примечание:

Мультимедийные кнопки

Для использования мультимедийных кнопок они могут быть перенаправлены в MPRIS, где их подхватят плееры, поддерживающие MPRIS для управления. Подробнее смотрите MPRIS#Bluetooth.

Настройка через GNOME Bluetooth

Примечание: Профиль A2DP не будет активироваться этим способом на pulseaudio 9/10 из-за бага, что приведёт к низкокачественному моно-звуку. Для возможного решения смотрите #A2DP не работает с PulseAudio.

Вы можете использовать графический фронтенд GNOME Bluetooth для лёгкой настройки наушников.

Сперва убедитесь, что служба bluetooth.service запущена.

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

LDAC/aptX

Поддержку кодеков LDAC/aptX можно включить установкой пакетов pulseaudio-modules-btAUR и libldac и перезапуском PulseAudio. Смотрите подсказки по настройке на странице проекта. Вы можете проверить используемый кодек с помощью команды:

$ pactl list | grep a2dp_codec

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

Примечание: У многих пользователей возникают проблемы при попытках добиться работы A2DP/Bluetooth наушников. Подробнее смотрите #Переключение между HSP/HFP и A2DP.

Плохой звук / Постоянный шум / «Мутный» звук

Плохое качество звука скорее всего связано с тем, что не выбран правильный профиль. Смотрите #Переключение между HSP/HFP и A2DP для решения проблемы.

Профиль выбран, но наушники неактивны и звук не может быть перенаправлен

Это меню обманчиво доступно ещё до подключения устройства; пока оно не подключено, это меню не будет иметь никакого эффекта. Кажется, меню создаётся сразу после определения устройства.

Запустите bluetoothctl как root и подключите устройство вручную.

Сопряжение не удаётся с ошибкой AuthenticationFailed

Попробуйте включить или отключить SSPMode:

# btmgmt ssp off

или

# btmgmt ssp on

Может понадобиться выключить Bluetooth на время выполнения этой команды.

Сопряжение работает, но соединение не удаётся

Вы можете увидеть такую ошибку в bluetoothctl:

[bluetooth]# connect 00:1D:43:6D:03:26
Attempting to connect to 00:1D:43:6D:03:26
Failed to connect: org.bluez.Error.Failed

Для изучения проверьте статус bluetooth.service или гляньте журнал:

# journalctl -n 20

Там может оказаться примерно такое сообщение:

bluetoothd[5556]: a2dp-sink profile connect failed for 00:1D:43:6D:03:26: Protocol not available

Это может быть из-за того, что pulseaudio-bluetooth не установлен (или pulseaudio-modules-bt-gitAUR нужно переустановить с нуля). Установите и затем перезапустите PulseAudio.

Это также может быть из-за проблем с правами доступа, особенно если запуск PulseAudio от root решает проблему. Добавьте своего пользователя в группу lp и перезапустите PulseAudio. Смотрите /etc/dbus-1/system.d/bluetooth.conf для справки.

Если перезапуск PulseAudio не помогает, возможно, требуется загрузить module-bluetooth-discover.

# pactl load-module module-bluetooth-discover

Такую же команду load-module можно добавить в /etc/pulse/default.pa.

Если всё равно не работает или ваш PulseAudio общесистемный, также загрузите эти модули (опять же, их можно прописать в default.pa или system.pa):

module-bluetooth-policy
module-bluez5-device
module-bluez5-discover

Ещё может оказаться, что у владельца /var/lib/bluetooth/ нет доступа на запись. В таком случае проблема может решиться повторным сопряжением, но после перезагрузки всё опять перестанет работать. Возвращение прав на запись поможет:

# chmod -R u+w /var/lib/bluetooth

Соединение работает, но в звуке постоянные артефакты

Это скорее всего связано с тем, что Bluetooth и Wi-Fi используют один и тот же чип, одну и ту же антенну и, возможно, диапазон (2.4 ГГц). Хотя это работает без проблем в Windows, в Linux это не так.

Возможным решением является переключение вашей Wi-Fi сети на 5 ГГц, чтобы больше не возникало интерференции. Если карта/роутер не поддерживают этот диапазон, попробуйте обновить драйвера/прошивку Wi-Fi. Это работает на Realtek 8723BE с последними rtl драйверами с AUR.

Если сделать это невозможно, менее эффективным решением будет настройка размера фрагмента и задержки на выходе PulseAudio, через которые можно попытаться скомпенсировать интерференцию. Нужно выбирать разумные значения, так как эти изменения могут привести к рассинхронизации звука (например, при проигрывании видео). Для изменения задержки на порту bluetooth-наушников (например, 125000 микросекунд в данном примере):

$ pactl set-port-latency-offset <bluez_card> headset-output 125000

где идентификатор карты можно узнать с помощью

$ pacmd list-sinks | egrep -o 'bluez_card[^>]*'

Размер фрагмента можно установить в файле /etc/pulse/daemon.conf, изменения применятся после перезапуска PulseAudio (подробнее смотрите PulseAudio/Решение проблем#Определение номера фрагмента по умолчанию и размера буфера в PulseAudio).

Иногда может помочь добавление options ath9k btcoex_enable=1 в файл /etc/modprobe.d/ath9k.conf (с соответствующим адаптером bluetooth):

/etc/modprobe.d/ath9k.conf
# possibly fix for sound glitches
options ath9k btcoex_enable=1

После этого перезагрузитесь.

Соединение работает, но не получается воспроизвести звук

Поищите в системном журнале такие сообщения:

bluetoothd[5556]: Endpoint registered: sender=:1.83 path=/MediaEndpoint/A2DPSource
bluetoothd[5556]: Endpoint registered: sender=:1.83 path=/MediaEndpoint/A2DPSink

Если подобные сообщения есть, можно продолжить изучать конфигурацию PulseAudio. Если нет, то убедитесь, что соединение успешно.

Tango-go-next.pngThis article or section is a candidate for moving to PulseAudio/Troubleshooting.Tango-go-next.png

Notes: The following seems to be general issue: [1] (Discuss in Talk:Bluetooth headset (Русский))

При использовании GDM запускается другой экземпляр PulseAudio, который «захватывает» ваши bluetooth-соединения. Это можно предотвратить, замаскировав сокет pulseaudio для пользователя GDM:

# mkdir -p  /var/lib/gdm/.config/systemd/user
# ln -s /dev/null  /var/lib/gdm/.config/systemd/user/pulseaudio.socket

При следующей перезагрузке второй экземпляр PulseAudio запускаться не будет.

Также может оказаться, что bluez неправильно определяет наушники как не поддерживающие a2dp. В таком случае найдите индекс bluetooth-устройства:

$ pacmd ls

Среди вывода должен быть раздел, связанный с bluetooth-наушниками, выглядящий примерно так:

$ pacmd ls
index: 2
        name: <bluez_card.XX_XX_XX_XX_XX_XX>
        driver: <module-bluez5-device.c>
        owner module: 27
        properties:
                device.description = "SONY MDR-100ABN"
                device.string = "XX:XX:XX:XX:XX:XX"
                device.api = "bluez"
                device.class = "sound"
                ...

Для ручного выбора профиля выполните

$ pacmd set-card-profile 2 a2dp_sink

где 2 это индекс устройства, полученный через pacmd ls.

Соединение работает, звук играет, а после неактивности заикается

Если наушники играют звук нормально до ухода в режим ожидания, а после возобновления начинает заикаться (например, если звук был приостановлен или ничего не воспроизводилось какое-то время), попробуйте отключить автоматическую приостановку входа/выхода в PulseAudio.

Некоторые пользователи сообщают об огромных задержках или даже отсутствии звука, когда Bluetooth-соединение не отправляет никаких данных. Это из-за модуля module-suspend-on-idle, который автоматически приостанавливает неактивные входы/выходы.

Чтобы отключить загрузку этого модуля, закомментируйте эту строку в используемом файле конфигурации (~/.config/pulse/default.pa или /etc/pulse/default.pa):

~/.config/pulse/default.pa
### Automatically suspend sinks/sources that become idle for too long
#load-module module-suspend-on-idle

Перезапустите PulseAudio для применения изменений.

UUIDs has unsupported type

В процессе сопряжения вы можете увидеть в bluetoothctl такой вывод:

[CHG] Device 00:1D:43:6D:03:26 UUIDs has unsupported type

Это сообщение очень частое и может быть проигнорировано.

Компьютер показывает устройство как сопряжённое, но это не распознаётся устройством

Это может быть из-за того, что устройство не поддерживает Bluetooth LE для сопряжения.

Попробуйте прописать настройку ControllerMode = bredr в файле /etc/bluetooth/main.conf. Смотрите [2].

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

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

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-адресом. Смотрите Bluetooth (Русский)#Сопряжение при Dual boot для настройки сопряжения в обоих ОС.

Если другая ОС вас уже не интересует, можно просто выполнить сопряжение заново. Сперва удалите существующее сопряжение:

$ bluetoothctl
[bluetooth]# devices
Device XX:XX:XX:XX:XX:XX My Device
[bluetooth]# remove XX:XX:XX:XX:XX:XX

Затем перезапустите bluetooth.service, включите bluetooth-адаптер, сделайте своё устройство видимым, пересканируйте устройства и выполните сопряжение с вашим устройством (смотрите основную статью). В зависимости от вашего менеджера Bluetooth может понадобиться выполнить полную перезагрузку для переподключения устройств.

В Apple AirPods маленькая громкость

Создайте drop-in файл для службы bluetooth.service со следующим содержимым:

/etc/systemd/system/bluetooth.service.d/noplugin-avrc.conf
[Service]
ExecStart=
ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=avrcp

Затем выполните systemctl daemon-reload, перезапустите bluetooth.service, и переподключите наушники.

Кроме того, для AirPods Pro отключите пространственный звук и включите моно в настройках вашего iPhone.

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

Apple AirPods Pro работает с PulseAudio как выход A2DP, но не как HSP/HFP

Если AirPods Pro работает, но не может использовать HSP/HFP (в pavucontrol на вкладке Конфигурациия обычно отображается как недоступный), попробуйте перейти на pipewire-pulse.

Переход на pipewire-pulse (и перезапуск компьютера или соответствующих пользовательских служб) должен включить HSP/HFP, но также может отключить A2DP (при выборе этого профиля в pavucontrol он мгновенно отключается). Если у вас появилась такая проблема, попробуйте удалить/переименовать папку /var/lib/bluetooth:

# mv /var/lib/bluetooth /var/lib/bluetooth.bak

После этого проведите повторное сопряжение с AirPods Pro (и другими устройствами). После этого все конфигурации (HSP/HFP и A2DP) должны быть снова доступны в pavucontrol и pacmd.

Проблема с HSP: ввод и вывод bluetooth созданы, но звук не передаётся

У вас может отсутствовать прошивка или SCO (аудио протокол HSP и HFP) роутинг может быть неправильным. Смотрите [3] — прошивка для BCM20702 может быть установлена через пакет bcm20702a1-firmwareAUR или bcm20702b0-firmwareAUR.

Error: Failed to start discovery org.bluez.Error.InProgress

Если наушники обнаруживаются, но подключение не проходит с ошибкой "Failed to start discovery org.bluez.Error.InProgress", установите bluez-hciconfigAUR и выполните

$ hciconfig hciX up
$ hciconfig hciX reset

где X это идентификатор bluetooth-устройства вашего компьютера (обычно 0).

Теперь подключение должно работать как описано в #Настройка через командную строку.

Переключение между HSP/HFP и A2DP

Это можно сделать с помощью следующей команды, где номер_карты можно узнать с помощью команды pacmd list-cards.

$ pacmd set-card-profile номер_карты a2dp_sink

Для автоматического переключения с A2DP на HSP при включении записи можно добавить auto_switch=2 к load-module module-bluetooth-policy в файле /etc/pulse/default.pa.

Подробнее о профилях смотрите документацию PulseAudio.

A2DP не работает с PulseAudio

Проблема с интерфейсом Socket

Если PulseAudio не может переключить профиль на A2DP с bluez 4.1+ и PulseAudio 3.0+, можно попробовать отключить интерфейс Socket в файле /etc/bluetooth/main.conf путём удаления строки Enable=Socket и добавления Disable=Socket.

Недоступен профиль выхода A2DP

Когда профиль вывода A2DP недоступен, становится невозможно переключиться на A2DP вывод в настройках PulseAudio или он вообще не отображается в списке. Это можно проверить с помощью pactl:

$ pactl list | grep -C2 A2DP
     Profiles:
             headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 30, available: yes)
             a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 40, available: no)
             off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
        Active Profile: headset_head_unit

Попытка ручного изменения профиля через pacmd также окончится неудачей.

$ pacmd set-card-profile bluez_card.C4_45_67_09_12_00 a2dp_sink
Failed to set card profile to 'a2dp_sink'.

Это известная проблема Pulseaudio с версии 10.0 при подключении Bluetooth-наушников через Bluedevil или другой фронтенд BlueZ. Смотрите связанный баг-репорт.

Эта проблема также случается после сопряжения на некоторых Bluetooth-контроллерах (например, 0a12:0001, Cambridge Silicon Radio), которые по умолчанию включают службу Handsfree или Headset - HS и не позволяют переключиться на A2DP.

Возможные решения:

  • На некоторых наушниках помогает нажатие кнопок управления громкостью и воспроизведением, после чего профиль A2DP становится доступным.
  • Может оказаться, что подключение наушников через bluetoothctl из пакета bluez-utils делает профиль A2DP доступным. Можно автоматизировать это каждый раз при подключении bluetooth: fix-bt-a2dpAUR (детальное описание).
[bluetooth]# connect MAC_адрес_наушников
  • Ручное переключение на Bluetooth-службу AudioSink может сделать профиль A2DP и A2DP-вывод в PulseAudio доступным. Это можно сделать через blueman-manager из пакета blueman или путём регистрации UUID службы AudioSink через bluetoothctl.
$ bluetoothctl
[bluetooth]# menu gatt
[bluetooth]# register-service 0000110b-0000-1000-8000-00805f9b34fb
[bluetooth]# quit
  • Отключите профиль Headset
/etc/bluetooth/main.conf
[General]
Disable=Headset
  • Включите поддержку MultiProfile. Это может помочь для наушников, которые поддерживают как A2DP, так и Headset.
/etc/bluetooth/main.conf
[General]
MultiProfile=multiple
  • Иногда никакой из предыдущих шагов не помогает. Возможно, вы безрезультатно пытались перезагрузить и выключить Bluetooth, а затем снова включить его. В таком случае попробуйте перезапустить службу bluetooth.service.
  • Замена pulseaudio-bluetooth на pulseaudio-modules-btAUR или pulseaudio-modules-bt-gitAUR, которые предоставляют дополнительные Bluetooth-кодеки, может помочь.
  • На некоторых моделях наушников с возможностью управления звуком профиль A2DP необходимо включить, нажав кнопку «Воспроизведение / Пауза».

Gnome с GDM

Merge-arrows-2.pngThis article or section is a candidate for merging with #Соединение работает, но не получается воспроизвести звук.Merge-arrows-2.png

Notes: duplicate instructions (Discuss in Talk:Bluetooth headset (Русский))

Эта инструкция протестирована с Gnome 3.24.2 и PulseAudio 10.0, но может быть полезна и для других версий.

Если PulseAudio не удаётся изменить профиль на A2DP при использовании GNOME с GDM, нужно запретить GDM запуск его собственного экземпляра PulseAudio:

  • Предотвратите запуск сервера клиентами Pulseaudio, если он не запущен, с помощью добавления этих строк:
/var/lib/gdm/.config/pulse/client.conf
autospawn = no
daemon-binary = /bin/true
  • Предотвратите запуск Pulseaudio через socket-активацию:
$ sudo -ugdm mkdir -p /var/lib/gdm/.config/systemd/user
$ sudo -ugdm ln -s /dev/null /var/lib/gdm/.config/systemd/user/pulseaudio.socket
  • Перезагрузитесь и проверьте, что нет процесса PulseAudio, запущенного пользователем gdm:
$ pgrep -u gdm pulseaudio

Обсуждение этой проблемы и другие варианты решения можно почитать на форуме: [4] и [5]. Также можно попробовать fix-bt-a2dpAUR.

HFP не работает с PulseAudio

Наушники с поддержкой только HFP могут не заработать со стандартной конфигурацией PulseAudio. Соответствующие профили есть, но они недоступны:

  • bluetoothctl info показывает:
UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
UUID: Handsfree                 (0000111e-0000-1000-8000-00805f9b34fb)
  • pactl list соответствующего устройства показывает:
...
Profiles:
      ...
      headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 30, available: no)

Для решения проблемы обновите pulseaudio (>=13) и возможно pulseaudio-modules-bt-gitAUR и bluez (>=5.5) до последних версий. Затем установите ofonoAUR (запустите и включите службу systemd) и phonesimAUR и создайте поддельный модем как описано здесь [6]:

Примечание: Шаги после создания phonesim.conf нужно повторять каждый раз для подключения наушников.
  • Создайте /etc/ofono/phonesim.conf:
[phonesim]
Address=127.0.0.1
Driver=phonesim
Port=12345
  • Запустите от имени своего пользователя:
$ phonesim -p 12345 /usr/share/phonesim/default.xml &
  • Включите модем:
$ dbus-send --print-reply --system --dest=org.ofono /phonesim org.ofono.Modem.SetProperty string:"Powered" variant:boolean:true
  • Активируйте модем:
$ dbus-send --print-reply --system --dest=org.ofono /phonesim org.ofono.Modem.SetProperty string:"Online" variant:boolean:true
  • Для проверки результата используйте команды тестирования из пакета ofonoAUR, находящиеся в каталоге /usr/lib/ofono/test/. Для включения, активации и тестирования модема можно использовать:
$ /usr/lib/ofono/test/enable-modem /phonesim
$ /usr/lib/ofono/test/online-modem /phonesim
$ /usr/lib/ofono/test/list-modems

Вывод для соответствующего модема должен выглядеть примерно так:

...
[ /phonesim ]
  Online = 1
  Powered = 1
  Lockdown = 0
  Emergency = 0
  Manufacturer = MeeGo
  ...
  • Наконец, перезапустите pulseaudio и переподключите наушники. Теперь HFP должен стать доступен:
headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 30, available: yes)
Примечание: Поддержка HFP не является стабильной и может приводить к артефактам при переключении на A2DP; попробуйте переподключиться, если нужный режим недоступен.

Отключение автоматического перехода наушникосв на HSP/HFP

При использовании наушников, поддерживающих несколько профилей, некоторые приложения автоматически переключают их на профиль HSP/HFP. Если вас это не устрвивает, можно отключить это добавлением параметра auto_switch=false к модулю bluetooth-policy:

/etc/pulse/default.pa
load-module module-bluetooth-policy auto_switch=false