На ноутбуке Acer у меня никогда не было рабочей поддержки встроенного адаптера Bluetooth - https://bugs.launchpad.net/ubuntu/+source/linux-firmware/+bug/1643455 - и, наконец, набросил полотенце и купил дешевый USB-адаптер Bluetooth:
# lsusb -v -d 0a12:0001
Bus 002 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 224 Wireless
bDeviceSubClass 1 Radio Frequency
bDeviceProtocol 1 Bluetooth
bMaxPacketSize0 64
idVendor 0x0a12 Cambridge Silicon Radio, Ltd
idProduct 0x0001 Bluetooth Dongle (HCI mode)
bcdDevice 88.91
iManufacturer 0
iProduct 2 CSR8510 A10
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 177
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xe0
Self Powered
Remote Wakeup
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 0
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 1
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 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 224 Wireless
bInterfaceSubClass 1 Radio Frequency
bInterfaceProtocol 1 Bluetooth
iInterface 0
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 0
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 0
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 0
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 0
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 0
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
Device Status: 0x0001
Self Powered
Под Windows 10 (двойная загрузка) все работает, включая встроенный адаптер Bluetooth и USB-ключ Bluetooth адаптер. У меня есть несколько гарнитур, которые поддерживают A2DP (только высококачественный аудиовыход) и HFP / HSP (низкокачественный двунаправленный вход и выход). Под Windows 10 правильный профиль Bluetooth выбирается автоматически, чтобы соответствовать приложению.
Обратите внимание, что я использую Gnome 3, а не Unity, в настоящее время в версии 3.26.2-0ubuntu0.1 (которая поставляется с Ubuntu 17.10).
В Ubuntu до 17.04 я мог вручную переключать гарнитуру между A2DP и HFP / HSP из gnome-control-center. Bluetooth-гарнитуры, которые были сопряжены в более ранних версиях Ubuntu, таких как 16.04, продолжают корректно работать в более поздних версиях, так как Ubuntu была обновлена.
У меня были некоторые изменения в /etc/pulse/default.pa, которые позволили моей основной гарнитуре стать аудиоустройством по умолчанию (заменив встроенные динамики и микрофон на корпусе ноутбука), когда он был подключен. Я сделал это, раскомментировав и, следовательно, включив загрузку модуля «module-switch-on-connect» и вручную указав гарнитуру по уникальному идентификатору устройства в качестве источника по умолчанию и приемника по умолчанию:
set-default-sink bluez_sink.16_07_12_21_09_4B.headset_head_unit
set-default-source bluez_sink.16_07_12_21_09_4B.headset_head_unit
Что не работа заключается в том, что Bluetooth-гарнитуры, недавно сопряженные с момента выпуска 17.04, заблокированы на A2DP и не могут быть переключены. Оба профиля отображаются в соответствующем раскрывающемся списке в gnome-control-center, но выбор HFP / HSP не имеет никакого эффекта и не сохраняется. Фактически, выбор HFP / HSP и затем использование «Тестовых колонок» показывает левый и правый канал, доказывая, что устройство все еще находится в режиме A2DP (который является стерео), а не в режиме HFP / HSP (который является моно).
Вот пример выходных данных из «карт списка pactl», показывающих соответствующую гарнитуру Bluetooth:
Name: bluez_card.FB_60_AD_59_5B_9E
Driver: module-bluez5-device.c
Owner Module: 33
Properties:
device.description = "Premium Earbuds"
device.string = "FB:60:AD:59:5B:9E"
device.api = "bluez"
device.class = "sound"
device.bus = "bluetooth"
device.form_factor = "hands-free"
bluez.path = "/org/bluez/hci0/dev_FB_60_AD_59_5B_9E"
bluez.class = "0x240408"
bluez.alias = "Premium Earbuds"
device.icon_name = "audio-handsfree-bluetooth"
device.intended_roles = "phone"
Profiles:
a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 10, available: yes)
headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 20, available: no)
off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
Active Profile: a2dp_sink
Ports:
handsfree-output: Handsfree (priority: 0, latency offset: 0 usec)
Part of profile(s): a2dp_sink, headset_head_unit
handsfree-input: Handsfree (priority: 0, latency offset: 0 usec, not available)
Part of profile(s): headset_head_unit
Обратите особое внимание на блок «Профили», где «a2dp_sink» указан с «доступно: да» и "headset_head_unit" указан как "доступно: нет". Помните, что это не может происходить напрямую с устройства, потому что (1) эти гарнитуры работают должным образом в Windows 10 и (2) гарнитура той же модели работает правильно, если и только если она была сопряжена с более старой версией Ubuntu. Аналогичные результаты можно получить с четырьмя или пятью разными гарнитурами, поэтому я уверен, что они не являются дефектными.
Попытка установить профиль вручную удалась для A2DP, но не удалась для HFP / HSP с ошибкой:
# pactl set-card-profile 8 a2dp_sink
# pactl set-card-profile 8 headset_head_unit
Failure: Input/Output error
Я был бы удовлетворен тем, что эти гарнитуры навсегда заблокированы для HFP / HSP и никогда не использую A2DP, если необходимо, но я даже не могу понять, как это сделать.
В моем случае проблема была вызвана отсутствием драйвера.
Попробуйте
lsusb | grep Bluetooth
Если у вас чипсет серии Broadcom BCM20702AX
, попробуйте
dmesg | grep -i bluetooth | grep -i firmware -A2
В моем случае отсутствовал драйвер, его можно найти здесь. Подробнее здесь
EDIT: также попробуйте подключиться с помощью Blueman. Я не знаю, почему у PulseAudio так много проблем, но просто открыв Blueman, щелкнув правой кнопкой мыши мои наушники в обзоре и выбрав «Аудиопрофиль»> «Головное устройство гарнитуры (HSP/HFP)», я решил проблему. С тех пор я остановил и удалил oFono, и он все еще работает.
У меня была аналогичная (такая же?) проблема с моим Bose QC35 II, и я решил ее, следуя этим инструкциям («Использование HFP с oFono»).
Я использую Debian buster, так что у вас все может немного отличаться.
Установите ofono
и ofono-phonesim
:
sudo apt-get install ofono-phonesim
Клонируйте Git-репозиторий oFono (в настоящее время cf850de632):
git clone git://git.kernel.org/pub/scm/network/ofono/ofono.git
компакт-диск фоно
Список доступных модемов:
./test/list-modems
Вероятно, в нем не будет модемов, что неудивительно для современного рабочего стола Linux.Но по причинам, которые я не совсем понимаю, вам действительно нужен какой-то модем, чтобы заставить наушники работать, поэтому мы собираемся смоделировать его сейчас.
Начните с имитации одного (возможно, вы можете выбрать другой порт, если хотите):
ofono-phonesim -p 12345 /usr/share/phonesim/default.xml
Измените файл /etc/ofono/phonesim.conf, чтобы использовать этот симулированный модем. Моя версия Debian была так любезна, что уже что-то туда добавила, но закомментировала. Вот так это выглядит у меня сейчас (без комментариев):
[телефонная сим-карта]
Водитель=phonesim
Адрес=127.0.0.1
Порт=12345
Перезапустить oFono:
sudo service ofono перезапустить
Убедитесь, что устройство появилось в списке:
./test/list-modems
Включите устройство:
./test/enable-modem /phonesim
Если вы получили подобное сообщение об ошибке, убедитесь, что ваш phonesim запущен и работает:
Подключение модема/phonesim...
Traceback (последний последний вызов):
Файл "./test/enable-modem", строка 20, в
modem.SetProperty("Powered", dbus.Boolean(1), timeout = 120)
Файл "/usr/lib/python3/dist-packages/dbus/proxy.py", строка 70, в __call__
вернуть self._proxy_method(*аргументы, **ключевые слова)
Файл "/usr/lib/python3/dist-packages/dbus/proxy.py", строка 145, в __call__
**ключевые слова)
Файл "/usr/lib/python3/dist-packages/dbus/connection.py", строка 651, в call_blocking
сообщение, тайм-аут)
dbus.exceptions.DBusException: org.ofono.Error.Failed: операция не удалась
Убедитесь, что устройство теперь включено с помощью ./test/list-modems
.
Надеюсь, теперь это работает! Возможно, вам придется перезапустить и другие службы (bluez, pulseaudio).
Теперь я могу выбрать наушники в качестве устройства ввода. Это приведет к тому, что устройство будет использовать звук очень низкого качества, но, по крайней мере, это работает. Обязательно переключитесь обратно на «Воспроизведение с высокой точностью (приемник A2DP)», когда закончите с микрофоном, иначе вы получите очень низкое качество звука.