Bluetooth headset (Русский)

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

Есть три аудиосистемы Bluetooth:

  • A2DP (advanced audio distribution) обеспечивает стереовывод (sink), подходящий для музыки, обычно без источника (source).
    • A2DP может использовать различные кодеки. Стандартный SBC имеет не самое высокое качество, но гораздо более качественные открытые альтернативы (LDAC, AptX) получили широкое распространение.
    • AVRCP используется поверх A2DP для управления воспроизведением.
  • HFP/HSP (hands-free/headset) обеспечивает монофонический вывод для голоса и источник. HFP работает поверх HSP.
  • LE Audio — аудиостандарт с низким энергопотреблением, представленный в 2020 году. Стандартным кодеком является LC3.

Ядро, BlueZ 5 и PipeWire поддерживают все три профиля. Более старые звуковые серверы, такие как PulseAudio и ALSA, поддерживают только A2DP и HFP/HSP. Хотя Bluetooth печально известен своей ненадёжностью[1], многие его реализации получили значительные улучшения, что улучшило ситуацию на хорошо зарекомендовавшем себя оборудовании, таком как Bluetooth-чипы Intel.

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

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

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

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

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

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

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

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

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

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

$ 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
Примечание: Убедитесь, что ваше аудиоустройство bluetooth является доверенным (trusted), иначе повторное сопряжение окончится неудачей. Подробнее смотрите Bluetooth (Русский)#Сопряжение.

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

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

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

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

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

LDAC/aptX

Кодеки LDAC/aptX поддерживаются с PulseAudio 15.0. Вы можете проверить используемый кодек с помощью команды:

$ pactl list | grep a2dp_codec

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

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

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

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

Если вы подозреваете, что плохое качество звука связано с плохим соединением bluetooth, можно попробовать переключиться на кодек с более низким битрейтом и более низким качеством звука, например SBC или aptX, с помощью pactl:

$ pactl send-message /card/bluez_card.XX_XX_XX_XX_XX_XX/bluez switch-codec '"sbc"'

Список доступных кодеков можно посмотреть командой:

$ pactl send-message /card/bluez_card.XX_XX_XX_XX_XX_XX/bluez list-codecs

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

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

Запустите 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.

Это также может быть из-за проблем с правами доступа, особенно если запуск 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 | grep -Eo '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. Если нет, то убедитесь, что соединение успешно.

При использовании 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

Если наушники успешно подключаются (в чём можно убедиться через bluetoothctl), но не отображаются среди устройств вывода или ввода в pavucontrol, попробуйте добавить следующую политику в файл настроек /etc/bluetooth/main.conf:

/etc/bluetooth/main.conf
[General]
Enable=Control,Gateway,Headset,Media,Sink,Socket,Source

Некоторые пользователи сообщали, что это решает проблему.

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

Если наушники играют звук нормально до ухода в режим ожидания, а после возобновления он начинает заикаться (например, если звук был приостановлен или ничего не воспроизводилось какое-то время), попробуйте отключить автоматическую приостановку источника/вывода в 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-адаптером (например, в случае двойной загрузки). Некоторые устройства не могут обрабатывать несколько сопряжений с одним и тем же MAC-адресом. Смотрите Bluetooth (Русский)#Сопряжение при двойной загрузке для настройки сопряжения в обеих ОС.

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

$ 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

Затем выполните 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[ссылка недействительна: package not found] и выполните

$ hciconfig hciX up
$ hciconfig hciX reset

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

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

Высокая громкость звука из-за синхронизации между наушниками и PulseAudio

Начиная с PulseAudio 15, «Absolute Volume» связывает друг с другом громкость звука в наушниках и PulseAudio, делая невозможным изменение отдельно друг от друга. На некоторых наушниках, например на Hoco W25, это может привести к раздражающей громкости. Чтобы отключить «Absolute Volume», отредактируйте файл /etc/pulse/default.pa, изменив строку

load-module module-bluetooth-discover

на

load-module module-bluetooth-discover avrcp_absolute_volume=false

Переключение между 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.
  • На некоторых моделях наушников с возможностью управления звуком профиль A2DP необходимо включить, нажав кнопку «Воспроизведение / Пауза».

Gnome с GDM

Эта инструкция протестирована с 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-активацию в systemd:
$ 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 на PipeWire для поддержки Bluetooth. [6] Смотрите раздел #Наушники через PipeWire.

Наушники с поддержкой только 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 и BlueZ до последних версий. Затем установите пакеты ofonoAUR и phonesimAUR и создайте поддельный модем как описано здесь [7]:

Примечание: Шаги после создания 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 в PulseAudio

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

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

Отключение профиля HSP/HFP в PipeWire

В отличие от PulseAudio, PipeWire не переключается между A2DP и HSP/HFP автоматически в ответ на события ввода. Однако вместо того, чтобы включать автоматическое переключение на профиль HSP/HFP (с более низким качеством звука) при сбое A2DP, вы можете предпочесть отключить первый вообще. Для этого создайте копию файла /usr/share/wireplumber/bluetooth.lua.d/50-bluez-config.lua [8] как показано ниже.

Примечание: HSP необходим для работы микрофона [9].
/etc/wireplumber/bluetooth.lua.d/50-bluez-config.lua (или ~/.config/wireplumber/bluetooth.lua.d/50-bluez-config.lua)
...
bluez_monitor.properties = {
  ...
  ["bluez5.roles"] = "[ a2dp_sink ]",
  ...
  ["bluez5.hfphsp-backend"] = "none",
}
...
bluez_monitor.rules = {
  {
    ...
    apply_properties = {
      ...
      ["bluez5.auto-connect"] = "[ a2dp_sink ]",
      ...
       ["bluez5.hw-volume"] = "[ a2dp_sink ]",
    },
    ...
  },
}

Альтернатива: A2DP duplex channel

FastStream, AptX LL и «Opus 05 Pro» (специфично для pipewire) имеют «duplex» канал, который позволяет отправлять звук с микрофона без необходимости переключаться HSP/HFP и мириться с ухудшением качества звука. Эту функцию поддерживает PipeWire, но не PulseAudio. Поддержка автоматическая при обнаружении функции. Взаимодействие с существующим переключателем профилей (WirePlumber) неизвестно.

Советы и рекомендации

Применимы и к PipeWire, и к PulseAudio.

Уровень заряда батареи

Примечание: Это экспериментальная функция. Её включение может помешать некоторым Bluetooth-мышам подключаться автоматически (смотрите issue на GitHub).

Чтобы получать данные о текущем уровне заряда батареи наушников в upower, нужно включить экспериментальные функции D-Bus в настройках BlueZ, как описано в разделе Bluetooth (Русский)#Включение экспериментальных функций.

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

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

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

Если на наушниках слишком чувствительное сенсорное управление, вы можете захотеть отключить его. Это можно сделать через параметр inhibited в sysfs, соответствующий устройству AVRCP, например, /sys/devices/virtual/input/input877/inhibited. Найти правильное устройство можно по его имени: например, в файле /sys/devices/virtual/input/input877/name может быть записано что-то вроде «Soundcore Life P3 (AVRCP)». Запишите 1 в файл inhibited для отключения или 0 для включения. Изменения применяются на лету, переподключение или перезагрузка чего-либо не требуется.

Этот параметр будет сбрасываться при переподключении устройства, поэтому, чтобы сделать изменение постоянным, можно создать правило udev:

SUBSYSTEM=="input" ATTR{name}=="Soundcore Life P3 (AVRCP)" ATTR{inhibited}="1"