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>
Jimubao
источник
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
takeseem
источник
Этот ответ и @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."
Knetic
источник
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 доступен через некоторое время после подключения - возможно, проблема с синхронизацией?

byteborg
источник
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.
xdevs23
источник