Приветствую.
Пока удалось найти решение через замену PulseAudio на PipeWire, но иногда выдает помехи в звуке, непонятно это проблема с гарнитурой или с linux.
Хотелось бы сравнить качество с корректно работающим PulseAudio.
Если же идти путем настройки PulseAudio, то тема отдаёт безнадёжностью.
Как и подобные темы, висеть без решения здесь будет долго, но если решение когда-нибудь найдётся, то напишите сюда, пожалуйста.
Итак больной вопрос: как настроить bluetooth-гарнитуру в linux, чтобы работали не только наушники, но и микрофон?
Всё упирается в то,
какие профили поддерживает PulseAudio и как оно ими управляет (кажется, что гаритурура должна иметь профиль HSP, а если у гарнитуры есть только профиль HFP, то PulseAudio его не подхватывает).
Это в принципе может корректно работать в linux? В android же работает.
На форуме askubuntu.com эту проблему рассматривают со следующих перспектив:
Отключение автоматического переключения профилей PulseAudioВ примечаниях к Pulse написано: Гарнитуры Bluetooth обычно поддерживают как профиль A2DP, который подходит для музыки, так и профиль HSP, который подходит для использования в телефонии. module-bluetooth-policy автоматически переключает профиль Bluetooth-гарнитуры с A2DP на HSP/HFP, когда приложение создает поток записи со свойством media.role=phone (приложения телефонии должны устанавливать это свойство для своих потоков). Когда поток исчезает, профиль восстанавливается обратно в A2DP. Таким образом, пользователю не нужно вручную переключать профили при запуске и остановке вызова. Это поведение можно отключить, указав аргумент auto_switch=false для module-bluetooth-policy.
Поэтому нужно отредактировать строку в файле /etc/pulse/default.pa и/или в файле /var/lib/gdm3/.config/pulse/default.pa, дописав "auto_switch=false":
### Automatically load driver modules for Bluetooth hardware
ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif
На:
### Automatically load driver modules for Bluetooth hardware
ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy auto_switch=false
.endif
Это пока не решает проблему.
Замена PulseAudio на PipeWire.
Откройте терминал и выполните следующие действия:
1. Подключим репозиторий PPA для добавления Pipewire, который регулярно поддерживается:
sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
2. Обновим пакеты:
sudo aptitude update
3. Установим пакет, зависимость и библиотеки:
sudo aptitude install pipewire libspa-0.2-bluetooth pipewire-audio-client-libraries
4. Перезапускаем демон:
systemctl --user daemon-reload
5. Отключаем PulseAudio:
systemctl --user --now disable pulseaudio.service pulseaudio.socket
В Ubuntu 20.04 также необходимо «замаскировать» PulseAudio:
systemctl --user mask pulseaudio
6. Включаем сервис "pipewire-media-session-service":
pipewire-media-session-service
7. Перезапускаем сервис "pipewire" (или систему), проверяем, что Pipewire работает:
systemctl --user restart pipewire
pactl info
Видим имя сервера:
Имя сервера: PulseAudio (on PipeWire 0.3.49)
8. Удаляем ненужные пакеты:
sudo aptitude remove ofono ofono-phonesim
Если нужно откатиться, то:
systemctl --user --now disable pipewire-media-session.service
systemctl --user unmask pulseaudio
systemctl --user --now enable pulseaudio.service pulseaudio.socket
Если будет ошибка:
Connection failure: Connection refused:
выполнить:
systemctl --user restart pipewire-pulse
Всё подхватилось, тест звука (моно) проходит, настройки не слетают и skype из подхватывает автоматически:
Заработало, но иногда выдает помехи в звуке, непонятно это проблема с гарнитурой или с linux. Хотелось бы сравнить качество с корректно работающим PulseAudio.
Технические детали системы.
Система: Ubuntu 22.04
Гарнитура: HONOR Choice CE79 TWS Earbuds поддерживает Bluetooth 5.0, BLE/HFP/A2DP/AVRCP (вроде как нет поддержки HSP)
Ноутбук: Lenovo Ideapad 5-14
При подключении по Bluetooth в настройках звука можно переключить конфигурацию с A2DP на HFP как на "устройстве вывода", так и на "устройстве ввода", но после этого:
1) Выдача звука хоть и переключается со стерео на моно, но тест на звук в наушниках не проходит проверку;
2) Через несколько секунд настройки слетают на по умолчанию: выставляется конфигурация с A2DP, а микрофон используется встроенный.
Вроде нормально:
А потом слетает на по умолчанию:
"Устройство вывода" вроде как сохраняется с HFP, но в действительности не работает и потом так же переключается на A2DP.
Системная информация:
$ bluetoothctl info
Device 5C:56:A4:26:BB:C3 (public)
Name: Wireless Earbuds
Alias: Wireless Earbuds
Class: 0x00240404
Icon: audio-headset
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Audio Sink (0000110b-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
UUID: Advanced Audio Distribu.. (0000110d-0000-1000-8000-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-8000-00805f9b34fb)
UUID: Handsfree (0000111e-0000-1000-8000-00805f9b34fb)
$ pacmd list-cards
3 card(s) available.
index: 0
name: <alsa_card.pci-0000_04_00.1>
driver: <module-alsa-card.c>
owner module: 7
properties:
alsa.card = "0"
alsa.card_name = "HD-Audio Generic"
alsa.long_card_name = "HD-Audio Generic at 0xd03c8000 irq 79"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:04:00.1"
sysfs.path = "/devices/pci0000:00/0000:00:08.1/0000:04:00.1/sound/card0"
device.bus = "pci"
device.vendor.id = "1002"
device.vendor.name = "Advanced Micro Devices, Inc. [AMD/ATI]"
device.product.id = "1637"
device.product.name = "Renoir Radeon High Definition Audio Controller"
device.string = "0"
device.description = "Renoir Radeon High Definition Audio Controller"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-pci"
profiles:
HiFi: Play HiFi quality Music (priority 8000, available: no)
off: Выключено (priority 0, available: unknown)
active profile: <off>
ports:
[Out] HDMI2: HDMI / DisplayPort 2 Output (priority 1200, latency offset 0 usec, available: no)
properties:
[Out] HDMI1: HDMI / DisplayPort 1 Output (priority 1100, latency offset 0 usec, available: no)
properties:
index: 1
name: <alsa_card.pci-0000_04_00.6>
driver: <module-alsa-card.c>
owner module: 9
properties:
alsa.card = "1"
alsa.card_name = "HD-Audio Generic"
alsa.long_card_name = "HD-Audio Generic at 0xd03c0000 irq 80"
alsa.driver_name = "snd_hda_intel"
device.bus_path = "pci-0000:04:00.6"
sysfs.path = "/devices/pci0000:00/0000:00:08.1/0000:04:00.6/sound/card1"
device.bus = "pci"
device.vendor.id = "1022"
device.vendor.name = "Advanced Micro Devices, Inc. [AMD]"
device.product.id = "15e3"
device.product.name = "Family 17h (Models 10h-1fh) HD Audio Controller"
device.string = "1"
device.description = "Family 17h (Models 10h-1fh) HD Audio Controller"
module-udev-detect.discovered = "1"
device.icon_name = "audio-card-pci"
profiles:
HiFi: Play HiFi quality Music (priority 40768, available: unknown)
off: Выключено (priority 0, available: unknown)
active profile: <HiFi>
sinks:
alsa_output.pci-0000_04_00.6.HiFi__hw_Generic_1__sink/#0: Family 17h (Models 10h-1fh) HD Audio Controller Speaker + Headphones
sources:
alsa_output.pci-0000_04_00.6.HiFi__hw_Generic_1__sink.monitor/#0: Monitor of Family 17h (Models 10h-1fh) HD Audio Controller Speaker + Headphones
alsa_input.pci-0000_04_00.6.HiFi__hw_Generic_1__source/#1: Family 17h (Models 10h-1fh) HD Audio Controller Headphones Stereo Microphone
alsa_input.pci-0000_04_00.6.HiFi__hw_acp__source/#2: Family 17h (Models 10h-1fh) HD Audio Controller Digital Microphone
ports:
[Out] Speaker: Speaker (priority 100, latency offset 0 usec, available: unknown)
properties:
[Out] Headphones: Headphones (priority 200, latency offset 0 usec, available: no)
properties:
[In] Mic2: Headphones Stereo Microphone (priority 200, latency offset 0 usec, available: no)
properties:
[In] Mic1: Digital Microphone (priority 100, latency offset 0 usec, available: unknown)
properties:
index: 2
name: <bluez_card.5C_56_A4_26_BB_C3>
driver: <module-bluez5-device.c>
owner module: 24
properties:
device.description = "Wireless Earbuds"
device.string = "5C:56:A4:26:BB:C3"
device.api = "bluez"
device.class = "sound"
device.bus = "bluetooth"
device.form_factor = "headset"
bluez.path = "/org/bluez/hci0/dev_5C_56_A4_26_BB_C3"
bluez.class = "0x240404"
bluez.alias = "Wireless Earbuds"
bluetooth.battery = "100%"
device.icon_name = "audio-headset-bluetooth"
device.intended_roles = "phone"
bluetooth.codec = "sbc"
profiles:
a2dp_sink: Воспроизведение высокого качества (приёмник A2DP) (priority 40, available: unknown)
handsfree_head_unit: Гарнитура (HFP) (priority 30, available: unknown)
off: Выключено (priority 0, available: yes)
active profile: <a2dp_sink>
sinks:
bluez_sink.5C_56_A4_26_BB_C3.a2dp_sink/#1: Wireless Earbuds
sources:
bluez_sink.5C_56_A4_26_BB_C3.a2dp_sink.monitor/#3: Monitor of Wireless Earbuds
ports:
headset-output: Гарнитура (priority 0, latency offset 0 usec, available: unknown)
properties:
headset-input: Гарнитура (priority 0, latency offset 0 usec, available: unknown)
properties:
$ lsusb -v
...
Bus 003 Device 004: ID 0bda:c123 Realtek Semiconductor Corp. Bluetooth Radio
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 224 Wireless
bDeviceSubClass 1 Radio Frequency
bDeviceProtocol 1 Bluetooth
bMaxPacketSize0 64
idVendor 0x0bda Realtek Semiconductor Corp.
idProduct 0xc123
bcdDevice 0.00
iManufacturer 1 Realtek
iProduct 2 Bluetooth Radio
iSerial 3 00e04c000001
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x00b1
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0000 1x 0 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0000 1x 0 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 2
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0009 1x 9 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0009 1x 9 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 2
bNumEndpoints 2
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0011 1x 17 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0011 1x 17 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 3
bNumEndpoints 2
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0019 1x 25 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0019 1x 25 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 4
bNumEndpoints 2
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0021 1x 33 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0021 1x 33 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 5
bNumEndpoints 2
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0031 1x 49 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 1
Transfer Type Isochronous
Synch Type None
Usage Type Data
wMaxPacketSize 0x0031 1x 49 bytes
bInterval 1
...