Bluetooth headset (Русский)
Есть три аудиосистемы 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.
Решение проблем
Высокая громкость звука из-за синхронизации между наушниками и PipeWire
Начиная с версии 0.3.26, PipeWire использует «аппаратную громкость» для связи громкости наушников с системой, что делает невозможным изменение одной громкости независимо от другой. На некоторых устройствах это может привести к тому, что минимально возможная громкость будет некомфортно громкой, а шаг регулировки громкости будет слишком большим. Это можно отключить через WirePlumber или Pipewire Media Session.
Через WirePlumber
Создайте или отредактируйте файл настроек /etc/wireplumber/wireplumber.conf.d/80-bluez-properties.conf
(общесистемный) или ~/.config/wireplumber/wireplumber.conf.d/80-bluez-properties.conf
(для отдельного пользователя), прописав в нём следующее:
monitor.bluez.properties = { bluez5.enable-hw-volume = false }
Перезапустите PipeWire и WirePlumber для применения изменений.
Через Pipewire Media Session
Создайте каталог /etc/pipewire/media-session.d/
(общесистемный) или ~/.config/pipewire/media-session.d/
(для отдельного пользователя), скопируйте в него файл /usr/share/pipewire/media-session.d/bluez-monitor.conf
и отредактируйте копию, добавив строку:
bluez5.enable-hw-volume = false
Перезапустите службы PipeWire для применения изменений.
Наушники через Bluez5/PulseAudio
Установите пакеты pulseaudio-alsa, pulseaudio-bluetooth и bluez-utils — последний предоставляет инструмент bluetoothctl
.
Настройка через командную строку
Запустите службу 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
Настройка через GNOME Bluetooth
Вы можете использовать графический фронтенд GNOME Bluetooth для лёгкой настройки наушников.
Сперва убедитесь, что служба bluetooth.service
запущена.
Откройте GNOME Bluetooth и активируйте bluetooth. После сканирования устройств вы можете подключиться к наушникам, выбрав их в списке устройств. Вы можете получить доступ к настройкам звука из меню устройства. После подключения устройства в настройках звука должен появиться новый аудиовывод.
LDAC/aptX
Кодеки LDAC/aptX поддерживаются с PulseAudio 15.0. Вы можете проверить используемый кодек с помощью команды:
$ pactl list | grep a2dp_codec
Решение проблем
Плохой звук / Постоянный шум / «Мутный» звук
Плохое качество звука скорее всего связано с тем, что не выбран правильный профиль. Смотрите #Переключение между 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.
Если сделать это невозможно, менее эффективным решением будет настройка размера фрагмента и задержки на выводе 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-deprecated-tools и выполните
$ 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 становится доступным.
- Если вы используете нестандартное ядро, попробуйте linux или linux-lts.
- Может оказаться, что подключение наушников через
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. Соответствующие профили есть, но они недоступны:
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)
Отключение автоматического перехода наушников на 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, вы можете предпочесть отключить первый вообще. Для этого измените настройки как показано ниже.
/etc/wireplumber/wireplumber.conf.d/51-mitigate-annoying-profile-switch.conf (или ~/.config/wireplumber/wireplumber.conf.d/51-mitigate-annoying-profile-switch.conf)
## В WirePlumber есть ошибка, из-за которой некоторые приложения провоцируют переключение на профиль гарнитуры ## -- ## Сообщения в баг-трекере: #634, #645, #630, #629, #613 ## -- ## Эта конфигурация решает проблему путём полного отключения переключения и поддержки HFP ## Использовать её имеет смысл, только если вы не планируете использовать микрофон вашей гарнитуры wireplumber.settings = { ## Использовать ли профиль гарнитуры при наличии входного потока. ## -- ## Пока что отключено, так как вызывает проблемы, описанные в примечании выше bluetooth.autoswitch-to-headset-profile = false } monitor.bluez.properties = { ## Включенные роли (по умолчанию: [ a2dp_sink a2dp_source bap_sink bap_source hfp_hf hfp_ag ]) ## ## Некоторые наушники (Sony WH-1000XM3) не работают, когда роли ## hsp_ag и hfp_ag включены одновременно, так что по умолчанию включаем только HFP. ## ## Поддерживаемые роли: hsp_hs (HSP Headset), ## hsp_ag (HSP Audio Gateway), ## hfp_hf (HFP Hands-Free), ## hfp_ag (HFP Audio Gateway) ## a2dp_sink (A2DP Audio Sink) ## a2dp_source (A2DP Audio Source) ## bap_sink (LE Audio Basic Audio Profile Sink) ## bap_source (LE Audio Basic Audio Profile Source) ## -- ## Оставляем только A2DP по описанным выше причинам bluez5.roles = [ a2dp_sink a2dp_source ] }
Данное решение было предложено в баг-трекере WirePlumber.
Альтернатива: A2DP duplex channel
FastStream, AptX LL и «Opus 05 Pro» (специфично для pipewire) имеют «duplex» канал, который позволяет отправлять звук с микрофона без необходимости переключаться HSP/HFP и мириться с ухудшением качества звука. Эту функцию поддерживает PipeWire, но не PulseAudio. Поддержка автоматическая при обнаружении функции. Взаимодействие с существующим переключателем профилей (WirePlumber) неизвестно.
Советы и рекомендации
Применимы и к PipeWire, и к PulseAudio.
Уровень заряда батареи
Чтобы получать данные о текущем уровне заряда батареи наушников в 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"