PulseAudio не может установить профиль карты в «a2dp_sink». Как я могу посмотреть логи и выяснить, что не так?


31

В настоящее время я установил Ubuntu 16.04 и a2dp для новой установки, которую я предпочел бы оставить как последний вариант. Когда спаривание стирается из настроек Bluetooth и снова устанавливается в пару, иногда удается установить профиль a2dp, но если гарнитура отключена, а затем повторно подключена, профили a2dp больше не работают (хотя и говорят, что на a2dp), это работает только после переключения на HSP / HSF, а затем я не могу установить его на a2dp.

Я пытался сделать:

 pacmd set-card-profile <index> a2dp_sink

но появляется следующая ошибка:

"Failed to set card profile to 'a2dp_sink'"

Я довольно неопытен в Linux, поэтому я не знаю, как получить логи или что искать в них, но я получил это из списка карт pacmd:

Когда это работает:

name: <bluez_card.50_C9_71_97_A1_86>
driver: <module-bluez5-device.c>
owner module: 27
properties:
    device.description = "Jabra REVO a4.0.0"
    device.string = "50:C9:71:97:A1:86"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "headset"
    bluez.path = "/org/bluez/hci0/dev_50_C9_71_97_A1_86"
    bluez.class = "0x240404"
    bluez.alias = "Jabra REVO a4.0.0"
    device.icon_name = "audio-headset-bluetooth"
    device.intended_roles = "phone"
profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (priority 20, available: unknown)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (priority 10, available: unknown)
    off: Off (priority 0, available: yes)
active profile: <a2dp_sink>
sinks:
    bluez_sink.50_C9_71_97_A1_86/#6: Jabra REVO a4.0.0
sources:
    bluez_sink.50_C9_71_97_A1_86.monitor/#10: Monitor of Jabra REVO a4.0.0
ports:
    headset-output: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

    headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

Когда это не так:

name: <bluez_card.50_C9_71_97_A1_86>
driver: <module-bluez5-device.c>
owner module: 25
properties:
    device.description = "Jabra REVO a4.0.0"
    device.string = "50:C9:71:97:A1:86"
    device.api = "bluez"
    device.class = "sound"
    device.bus = "bluetooth"
    device.form_factor = "headset"
    bluez.path = "/org/bluez/hci0/dev_50_C9_71_97_A1_86"
    bluez.class = "0x240404"
    bluez.alias = "Jabra REVO a4.0.0"
    device.icon_name = "audio-headset-bluetooth"
    device.intended_roles = "phone"
profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (priority 20, available: unknown)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (priority 10, available: yes)
    off: Off (priority 0, available: yes)
active profile: <off>
ports:
    headset-output: Headset (priority 0, latency offset 0 usec, available: yes)
        properties:

    headset-input: Headset (priority 0, latency offset 0 usec, available: unknown)
        properties:

И владеющий модуль это:

name: <module-bluez5-device>
argument: <path=/org/bluez/hci0/dev_50_C9_71_97_A1_86>
used: 0
load once: no
properties:
    module.author = "João Paulo Rechi Vita"
    module.description = "BlueZ 5 Bluetooth audio sink and source"
    module.version = "8.0"

Я уже пытался изменить /etc/bluetooth/audio.conf и установить blueman, но это не сработало. Я также попытался переустановить bluez и pulseaudio, но ничего не изменилось.

Могу ли я узнать, что не так, и исправить это?


не могли бы вы объяснить, откуда вы получаете эту информацию? а что такое индекс? Благодарность!
Иезекииль Морено

Проверьте здесь askubuntu.com/a/817926/33292
pylover

Ответы:


23

На основании строки «активный профиль: <выкл>» звуковой профиль не активирован.

Простая в использовании программа для изменения профиля - это pavucontrol. Вы можете установить его с помощью sudo apt install pavucontrol -y. Затем запустите pavucontrol из командной строки или Alt + F2, если вы находитесь на Kubuntu и вводите pavucontrol.

Выберите вкладку конфигурации, а затем попробуйте изменить профиль наушников и посмотреть, обновится ли он для вас. Кажется, есть ошибка с Bluetooth a2dp все еще в Linux, и это влияет на две из моих установок 16.04. Если он уже говорит A2DP, измените его на OFF, отключите устройство в апплете bluetooth, затем подключите его снова. Затем, наконец, перейдите, чтобы изменить профиль обратно на A2DP, и он должен работать.

Вы также можете попробовать следующую команду в командной строке, и она должна завершить большинство из них за вас. Замените число 2 на порядковый номер для обеих команд pacmd ниже.

pacmd set-card-profile 2 off
bluetoothctl
disconnect 50:C9:71:97:A1:86
connect 50:C9:71:97:A1:86
pacmd set-card-profile 2 a2dp_sink

Для более сложного, но автоматизированного способа сделать то же самое для выключения, а затем возврата к a2dp профиля, но без отключения устройства Bluetooth и подключения к нему.

index=`pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'`;pacmd set-card-profile $index off; pacmd set-card-profile $index a2dp_sink 

Я также должен был сделать работающий, но небрежный скрипт, чтобы сделать то же самое, но также отсоединить и снова подключить наушники Bluetooth. Он захватывает индекс профиля, потому что индекс меняется каждый раз, когда устройство отключается и снова подключается. Это жестко связано с идентификатором устройства для гарнитуры, которую вы перечислили выше

pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` off; sleep 2 ; echo -e "disconnect 50:C9:71:97:A1:86\n quit"|bluetoothctl;sleep 5; echo -e "connect 50:C9:71:97:A1:86\n quit"|bluetoothctl; sleep 5; pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` a2dp_sink

Во время тестирования у меня было 5 секунд для сна вместо 3, потому что устройство еще не было готово для изменения профиля звука. Ваши результаты могут отличаться на несколько секунд +/- 5 секунд. Редактировать относительно потенциальной ловушки. Я обнаружил, что иногда необходимо дважды запустить скрипт побольше, прежде чем он заработает. Я не уверен, поможет ли увеличение времени сна, потому что я не проверял это. Но я использовал его на двух устройствах с наушниками BT той же марки, и он делает то, что должен, для автоматизации процесса, чтобы звук работал в наушниках.

В конце концов проблема будет исправлена ​​в пакете bluetooth, но, похоже, она будет возвращаться в новых версиях Ubuntu, а также в других версиях Linux. Но в любом случае надеюсь, что это поможет вам


>> Как я могу посмотреть логи и выяснить, что не так? << Было бы здорово, если бы вы также могли ответить на этот вопрос :)
kitingChris

У меня установлен звук на блютуз наушники в pavucontrol gui у меня работает. Работает лучше, чем Gnome Sound Tool.
QkiZ

1
2 года спустя, и этот ответ был необходим для меня с моей Sony WH-H900N.
Йоаким Виммерштедт

(1 год спустя), используя XFCE и blueman-manager, мне часто приходится перед bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffтем, как щелкнуть правой кнопкой мыши в меню «Устройства», позволит мне переключить аудио профиль на A2DP. Мне также иногда приходится убивать дочерний процесс blueman-manager, когда для вызова меню устройств требуется слишком много времени.
ericP

Спасибо за предоставление этих команд. Это единственный обходной путь, который работал с моими Ubuntu 18.04 и Sony WH-1000xm2. Я написал это в этой сущности: gist.github.com/egelev/2e6b57d5a8ba62cf6df6fff2878c3fd4
egelev

19

Для того чтобы система могла быть обнаружена как A2DP раковине (например , для воспроизведения музыки с телефона через динамики компьютера), добавить Enable=Source,Sink,Media,Socketпод [General]в /etc/bluetooth/audio.conf.

После этого перезапустите демон Bluetooth

systemctl restart bluetooth

Подключите устройство для наушников

bluetoothctl
connect <MAC>

Проверьте свою карту и установите профиль

pacmd list-cards
pacmd set-card-profile <index> <profile>

1
Использование Ubuntu 16.04 /etc/bluetooth/audio.conf не существует, где мне вместо этого написать эту строку?
thebeancounter

Это исправило это для меня в Debian Sid, спасибо!
Ксерз

@thebeancounter добавить файл, если он не существует
Jimubao

иногда, если вы потеряли соединение с приемником A2DP, попробуйте «выключить» в bluetoothctl, а затем «systemctl restart bluetooth», а затем в bluetoothctl «включите» и снова подключите ваше устройство
Jimubao

1
Работал на ARch / Manjaro! Все же файл теперь находится в /etc/bluetooth/main.confдля последней версии
MCMZL

13

У меня была эта проблема в Ubuntu 16.04.1 LTS, и применение решения GDM, найденного в https://wiki.debian.org/BluetoothUser/a2dp, решило ее.

В частности, создать / изменить, /var/lib/gdm3/.config/pulse/client.confчтобы читать:

autospawn = no
daemon-binary = /bin/true

затем

sudo chown gdm:gdm /var/lib/gdm3/.config/pulse/client.conf

Я также добавил в /etc/pulse/default.pa

load-module module-switch-on-connect

Хотя это не может быть строго необходимо.

После перезагрузки я подключился через bluetooth manager и смог успешно переключить аудио профиль на a2dp_sink.


У меня была проблема, что bluez-firmware был недоступен во время первого шага в ссылке, тогда пользователь gdm не может быть найден. Кроме того, папка gdm3 не существует, поэтому пришлось создать весь этот путь.
словами

Я сделал второй обход по этой ссылке из Debian, работает как шарм!
Амфасис

5

lagerismi разместил скрипт на панели запуска, основываясь на ответе Джейми С.

  • Измените MAC-адрес устройства в переменной внутри скрипта! (можно найти с помощью bluetoothctl-> Устройство)

  • Сделайте скрипт исполняемым chmod a-x bluetooth_headphone_reactivation.sh

Для автоматического выполнения при запуске (работает, только если гарнитура уже включена):

  • Добавьте сценарий к сценариям запуска / выключения на панели управления KDE

Для быстрого ручного исполнения:

  • Добавьте запись в приложение-стартер (вы также можете установить сочетание клавиш, например «CTRL + ALT + H» и / или закрепить этот стартер на панели окон)

Сценарий:

#!/bin/sh
device_mac='<your-devices-mac-address-here>'
pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` off
sleep 2 
echo "disconnect $device_mac\n quit"|bluetoothctl
sleep 5
echo "connect $device_mac\n quit"|bluetoothctl
sleep 5
pacmd set-card-profile `pacmd list-cards | grep bluez_card -B1 | grep index | awk '{print $2}'` a2dp_sink

Вы должны использовать -eс echo.
Ярно

3

На Xubuntu 16.04.2
используйте blueman-manager:

  1. подключить -> отключить профиль
  2. Переподключиться -> установить профиль a2dp
  3. теперь ваша гарнитура в порядке!

Мой скрипт на JBL

#!/bin/bash
#headset mac
mac="00:1D:DF:67:0A:29"
profile="a2dp"
# Special Bluetooth controller, default is empty
btMac=""
#connect|disconnect wait time
waitTime=5

macId="${mac//:/_}"
deviceId="bluez_card.$macId"

declare -A profiles
profiles['a2dp']='a2dp_sink'
profiles['hsp']='headset_head_unit'
profiles['off']='off'

function btCmd() {
    cmd="$1\nquit"
    [ ! -z "$btMac" ] && cmd="select $btMac\n$cmd"
    echo -e "$cmd" | bluetoothctl
}
function setProfile() {
    cmd="pactl set-card-profile $deviceId ${profiles[$1]}"
    echo $cmd
    $cmd
}
function btWaitConnect() {
    conState=$1
    for ((i=1;i<=$waitTime;++i)); do
        tmp="`btCmd "info $mac"|grep 'Connected: '`"
        [ ! -z "`echo "$tmp"|grep $conState`" ] && echo "$tmp" && return 0
        sleep 1s
    done
    echo "$tmp"
    return 1
}
function btConnect() {
    tmp="`btCmd "trust $mac\nconnect $mac" | grep -v 'NEW\|DEL\| quit'`"
    echo "$tmp"

    tmp="`btWaitConnect yes`"
    echo $tmp
    [ -z "`echo "$tmp" | grep yes`" ] && echo -e "Device $mac:\n\tConnected: fail." && return 1
    sleep 2s
    return 0
}
function btDisConnect() {
    tmp="`btCmd "disconnect $mac" | grep -v 'NEW\|DEL\| quit'`"
    echo "$tmp"

    tmp="`btWaitConnect no`"
    echo $tmp
    [ -z "`echo "$tmp" | grep no`" ] && echo -e "Device $mac:\n\tdisconnected: fail." && return 1
    sleep 1s
    return 0    
}


# controller
echo ""
btCtls="`btCmd list | grep '^Controller' | grep " $btMac"`"
echo -e "controller:\n$btCtls"
[ -z "$btCtls" -o ! -z "`echo "$btCtls" | grep "not available"`" ] && exit 1


# connect -> set off
echo ""
tmp="`btCmd paired-devices | grep '^Device' | grep " $mac"`"
echo -e "paired-devices:\n$tmp"
[ `echo "$tmp" | wc -l` != 1 ] && echo "Please pair the Bluetooth headset first: $mac" && exit 1
btConnect || exit $?
setProfile off

# reconnect -> set profile
btDisConnect || exit $?
btConnect || exit $?
setProfile $profile

Этот ответ и @freespace one помогли мне в моей настройке i3
Луис Лобо Borobia

Последнее обновление содержит настройку приемника по умолчанию, но я не знаю, если это необходимо.
Ярно

2

Итак, если вы используете Debian, вы можете сделать следующее: Отказался от переключения профиля на a2dp_sink: не подключен

проблема

Bluetooth-гарнитура подключена, но ALSA / PulseAudio не может подключиться к подключенному устройству или нет устройства для выбора. Это происходит из-за того, что GDM захватывает приемник A2DP при запуске сеанса, так как для доступа GDM требуется Pulsedio в сеансе GDM. Например, для чтения с экрана это требуется.

Решение

Чтобы запретить GDM захватывать приемник A2DP при запуске сеанса, отредактируйте /var/lib/gdm3/.config/pulse/client.conf(или создайте его, если он не существует):

autospawn = no
daemon-binary = /bin/true

После этого вы должны предоставить доступ к этому файлу пользователю Debian-gdm:

chown Debian-gdm:Debian-gdm /var/lib/gdm3/.config/pulse/client.conf

Вам также нужно будет отключить запуск pulseaudio:

rm /var/lib/gdm3/.config/systemd/user/sockets.target.wants/pulseaudio.socket

Для автоматического подключения a2dp для некоторых устройств добавьте это в /etc/pulse/default.pa:

load-module module-switch-on-connect

Перезагружать.


Спасибо, сэр, что вы не следите за толпой культового груза и не объясняете проблему! Я могу подтвердить, что это на самом деле помогает в Debian Stretch.
Марцин Овсяни,

1

Я уверен, что предыдущие ответы на самом деле пытаются устранить коренную причину проблемы. Я, однако, не смог заставить никого из них работать. У меня была та же проблема, что и у OP, но на Linux Mint 17/18. Я написал этот скрипт, чтобы надежно подключить Bluetooth и использовать a2dp.

Скопируйте / вставьте для потомков, но главная проблема в том, что он точно повторяет то, что OP (и я) должны были бы сделать в пользовательском интерфейсе.

Сценарий Доминика не будет надежно работать для меня, потому что он попытается все настроить один раз . Мне пришлось бы запустить его несколько раз, чтобы заставить его работать. Это то, что я закончил, это работает каждый раз.

#!/bin/bash

MAC=$1
CARD=$(echo "${MAC}" | sed -e 's/:/_/g')
CARD="bluez_card.${CARD}"

$(pactl list | grep -qi 'Active Profile: a2dp_sink')
a2dpUsed=$?

# this loops until a2dp is _actually used_ on the given MAC.
while [ ${a2dpUsed} -ne 0 ];
do
    #
    echo "Restarting bluetooth."
    rfkill unblock bluetooth
    sudo service bluetooth restart
    sudo hciconfig hci0 up

    # reconnect
    echo -e "power on\nconnect ${MAC}" | bluetoothctl

    #
    echo "Waiting for headset to be connected..."
    btConnected=1

    while [ ${btConnected} -gt 0 ];
    do

        sleep .1
        $(bluetoothctl <<< "info ${MAC}" | grep -qi "Connected: yes")
        btConnected=$?
    done

    #
    echo "Bluetooth connected, waiting for profiles to register"

    cardFound=1
    while [ ${cardFound} -ne 0 ];
    do
        $(pactl list | grep -qi "${CARD}")
        cardFound=$?
    done

    #
    echo "Setting bluetooth a2dp profile"
    pactl set-card-profile ${CARD} a2dp_sink
    $(pactl list | grep -qi 'Active Profile: a2dp_sink')
    a2dpUsed=$?
done

echo "a2dp is working."

1

Как описано здесь , это происходит потому, что GDM захватывает приемник A2DP при запуске сеанса, так как для доступа GDM требуется PulseAdio в сеансе GDM.
Попробуйте добавить это в «/var/lib/gdm3/.config/pulse/default.pa» или создайте его, затем перезагрузите компьютер:

#!/usr/bin/pulseaudio -nF
#

# load system wide configuration
.include /etc/pulse/default.pa

### unload driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
  unload-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
  unload-module module-bluetooth-discover
.endif

0

Я пытался настроить свой Bluetooth и всегда получал эту ошибку.

Я обнаружил, что проблема была в Skype. Если у меня работает Skype, я не могу установить a2dp_sinkпрофиль.

Итак, если вы столкнулись с этой проблемой, посмотрите, работает ли у вас Skype и выключите его.


0
systemctl restart bluetooth
  • Открыть настройки звука (доступно, нажав на значок динамика в трее)
  • Попробуйте изменить профиль вывода на A2DP Sink.
  • Если это не сработает, измените ваше устройство на «Динамики» или что-то еще, а затем переключите его обратно.
  • Я обычно нахожу, что я могу затем установить свой профиль вывода

0

Я решил решить с помощью правила udev, так как я единственный пользователь системы, поэтому $USER, $XAUTHORITYи $DISPLAYхорошо известны.

Возможно, это полезно для тех, кому нужно решение, определенное в одном файле и работающее на Ubuntu 18.04.1 LTS.

Хук запускается через inputподсистему, потому что на этом этапе динамик, кажется, полностью инициализирован.

# file: /etc/udev/rules.d/99-jbl-go2.rules
# fix JBL GO2 with CSR bluetooth: switch to a2dp profile upon connect
# byteborg 20190110
SUBSYSTEMS=="input", ACTION=="add", ATTRS{name}=="70:99:1C:41:C6:EB", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/run/user/1000/gdm/Xauthority", RUN+="/bin/su alpha -c '/usr/bin/pacmd set-card-profile bluez_card.70_99_1C_41_C6_EB a2dp_sink'"

В Archlinux Wiki упоминаются устройства Cambridge Silicon Radio, предоставляющие неправильный профиль при подключении ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ). Я могу подтвердить это с помощью Bluetooth-динамика «JBL GO 2», который ведет себя неправильно, как уже упоминалось. Кажется, a2dp доступен через некоторое время после подключения - возможно, проблема с синхронизацией?


0

Это исправило проблему с профилем набора карт: https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1181106/comments/15

Quote:

1) Modify the /etc/bluetooth/audio.conf
================================

[General]
Enable = Source,Sink,Headset,Gateway,Control,Media
Disable = Socket

HFP=false

[A2DP]
SBCSources=1
MPEG12Sources=0

2) Check for pulseaudio module :
==========================

$ pactl list | grep -i module-bluetooth

If you dont have :
     module-bluetooth-policy
     module-bluetooth-discover
     module-bluetooth-device

Just do :
$ sudo apt-get install pulseaudio-module-bluetooth
$ pulseaudio -k
$ pactl load-module module-bluetooth-device
$ pactl load-module module-switch-on-connect

3) Connect the bluetooth headset
===========================

Use blueman to pair, and connect audio sink
Use pavucontrol to change for A2DP (even if blueman said "audio profile off")

Please confirm that works for you too.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.