Bluetooth headset (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
Bluetooth headset
. Дата последней синхронизации: 14 октября 2024. Вы можете
помочь
синхронизировать перевод, если в английской версии произошли
изменения
.
Ссылки по теме
Bluetooth (Русский)
Есть три аудиосистемы Bluetooth (профили 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-устройство не заблокировано через
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.
Если сделать это невозможно, менее эффективным решением будет настройка размера фрагмента и задержки на выводе 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-firmware
AUR
[
ссылка недействительна
: package not found]
или
bcm20702b0-firmware
AUR
[
ссылка недействительна
: package not found]
.
Error: Failed to start discovery org.bluez.Error.InProgress
Если наушники обнаруживаются, но подключение не проходит с ошибкой «Failed to start discovery org.bluez.Error.InProgress», установите
bluez-deprecated-tools
и выполните
$ hciconfig hci
X
up
$ hciconfig hci
X
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-a2dp
AUR
(
детальное описание
).
[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-a2dp
AUR
.
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 до последних версий. Затем
установите
пакеты
ofono
AUR
и
phonesim
AUR
и создайте поддельный модем как описано здесь
[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 &
Запустите
и
включите
службу
ofono.service
.
Включите модем:
$ 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
Для проверки результата используйте команды тестирования из пакета
ofono
AUR
, находящиеся в каталоге
/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, вы можете предпочесть отключить первый вообще. Для этого измените настройки как показано ниже.
Примечание
HSP необходим для работы микрофона
[8]
.
/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.
Уровень заряда батареи
Примечание
Это экспериментальная функция. Её включение может помешать некоторым 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"
Bluetooth наушники не воспроизводит звук в Qt
Если приложения на Qt не могут проигрывать звук или не видят Bluetooth‑устройства, добавьте своего пользователя в
группу
audio
.