PulseAudio не вдається встановити профіль картки на "a2dp_sink". Як я можу побачити журнали та зрозуміти, що не так?


31

На даний момент я встановив ubuntu 16.04 і a2dp, що використовувався для роботи над свіжою установкою, яку я вважаю за краще залишити як останню опцію. Коли спарювання стирається з налаштувань Bluetooth і спарюється знову, іноді йому вдається переглядати профіль a2dp, але якщо гарнітуру відключити та повторно підключити, а2dp-профілі більше не працюють (хоч вона і говорить про 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, але нічого не змінилося.

Чи є якийсь спосіб я знати, що не так, і виправити це?


чи можете ви поясніть, звідки ви берете цю інформацію? а що таке індекс? Спасибі!
Ezequiel Moreno

Перевірте тут askubuntu.com/a/817926/33292
піловер

Відповіді:


23

На основі рядка "активний профіль: <Off>" звуковий профіль не активувався.

Однією з програм, яку легко змінити профіль, є 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

Налаштувати звук на Bluetooth навушники в pavucontrol gui працює для мене. Працює краще, ніж звуковий інструмент Gnome.
QkiZ

1
Через два роки мені ця відповідь була потрібна для мого Sony WH-H900N.
Йоакім Віммерстедт

(1 рік потому), використовуючи XFCE та blueman-менеджер, мені часто доводиться bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffперед клацанням правою кнопкою миші в меню «Пристрої» дозволяти мені переключити звуковий профіль на A2DP. Я також періодично доводиться вбивати процес керування дітьми, котрий керує дітьми, коли для запуску меню пристроїв потрібно занадто багато часу.
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 перезапустити 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-менеджер, міг успішно переключити звуковий профіль на a2dp_sink.


У мене виникла проблема з тим, що програмне забезпечення bluez було недоступним під час першого кроку посилання, тоді користувачу gdm не вдалося знайти. Також папки gdm3 не існувало, тому довелося створити весь цей шлях.
словазвідси

Я зробив другий спосіб вирішення цього посилання з Debian, працює як шарм!
Amfasis

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.
jarno

3

На Xubuntu 16.04.2
використовуйте blueman-менеджер:

  1. connect -> вимкнути профіль
  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 допомогли мені в налаштуванні i3
Луїс Лобо Боробія

Останнє оновлення містить налаштування мийки за замовчуванням, але я не знаю, чи потрібно.
jarno

2

Отже, якщо ви використовуєте Debian, ви можете зробити наступне: Відмовитися від переключення профілю на a2dp_sink: Не підключено

Проблема

Гарнітура Bluetooth підключена, але ALSA / PulseAudio не вдається взяти підключений пристрій або немає пристрою, який можна вибрати. Це відбувається тому, що GDM захоплює мийку A2DP при запуску сеансу, оскільки GDM потребує імпульсного аудіо в сесії 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.
Марчін Овсіані

1

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

Скопіюйте / вставте для нащадків, але основна проблема полягає в тому, що вона точно повторює те, що ОП (і я) мали би зробити в інтерфейсі користувача.

Сценарій Домініка не міг би надійно працювати для мене, оскільки він спробував би лише один раз налаштувати все. Мені доведеться запускати його кілька разів, щоб змусити його працювати. Це те, що я закінчив, що працює щоразу.

#!/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 потребує імпульсного аудіо в сесії 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

Цитата:

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.