Bluetooth headset (Русский) - ArchWiki

Jump to content

# Bluetooth headset (Русский)

3 languages

- English
- 日本語
- 中文（简体）

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

Ссылки по теме

- 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-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 на 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 &

- Запустите и включите службу `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

- Для проверки результата используйте команды тестирования из пакета 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, вы можете предпочесть отключить первый вообще. Для этого измените настройки как показано ниже.

Примечание: 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"

Categories:

- Sound (Русский)
- Bluetooth (Русский)