PulseAudio nie ustawia profilu karty na „a2dp_sink”. Jak mogę zobaczyć dzienniki i dowiedzieć się, co jest nie tak?


31

Obecnie zainstalowałem Ubuntu 16.04 i a2dp pracowałem przy świeżej instalacji, którą wolę pozostawić jako ostatnią opcję. Po sparowaniu z ustawień Bluetooth i ponownym sparowaniu czasami udaje mu się być na profilu a2dp, ale jeśli zestaw słuchawkowy zostanie odłączony, a następnie ponownie podłączony, profile a2dp nie będą już działać (choć mówi, że jest na a2dp), działa tylko po przejściu na HSP / HSF, a następnie nie mogę ustawić go na a2dp.

Próbowałem zrobić:

 pacmd set-card-profile <index> a2dp_sink

ale pojawia się następujący błąd:

"Failed to set card profile to 'a2dp_sink'"

Jestem dość niedoświadczony w Linuksie, więc nie wiem, jak uzyskać dzienniki ani czego w nich szukać, ale otrzymałem to z kart list pacmd:

Kiedy to działa:

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:

Kiedy nie:

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:

A właścicielem jest:

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"

Próbowałem już zmodyfikować /etc/bluetooth/audio.conf i zainstalować blueman, ale to nie działało. Próbowałem także ponownie zainstalować bluez i pulseaudio, ale nic się nie zmieniło.

Czy jest jakiś sposób, aby wiedzieć, co jest nie tak, i naprawić to?


czy możesz wyjaśnić, skąd czerpiesz te informacje? a czym jest indeks? dzięki!
Ezequiel Moreno

Odpowiedzi:


23

W oparciu o wiersz „aktywny profil: <wyłącz>” profil dźwiękowy nie został aktywowany.

Jednym z łatwych w użyciu programów do zmiany profilu jest pavucontrol. Możesz go zainstalować za pomocą sudo apt install pavucontrol -y. Następnie uruchom pavucontrol z wiersza poleceń lub Alt + F2, jeśli korzystasz z Kubuntu i wchodzisz do pavucontrol.

Wybierz kartę konfiguracji, a następnie spróbuj zmienić profil słuchawek i sprawdź, czy to się aktualizuje. Wygląda na to, że w systemie Linux nadal występuje błąd z a2dp bluetooth i wpływa on na dwie z moich instalacji 16.04. Jeśli już napisano, że A2DP zmieni je na OFF, odłącz urządzenie w aplecie bluetooth, a następnie podłącz je ponownie. Następnie w końcu przejdź do zmiany profilu z powrotem na A2DP i powinien on działać.

Możesz także wypróbować następujące polecenia w wierszu poleceń i powinien on wypełnić większość kart. Zamień liczbę 2 na numer indeksu aktualnie dla obu poniższych poleceń 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

Aby uzyskać bardziej skomplikowany, ale zautomatyzowany sposób wykonania tej samej czynności w celu wyłączenia profilu, a następnie powrotu do formatu a2dp, ale bez odłączania i łączenia urządzenia 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 

Miałem też napisać działający, ale niechlujny skrypt, aby zrobić to samo, ale także odłączyć i ponownie podłączyć słuchawki bluetooth. Pobiera indeks profilu, ponieważ indeks zmienia się za każdym razem, gdy urządzenie jest odłączane i ponownie podłączane. Jest to zapisane na stałe za pomocą identyfikatora urządzenia dla zestawu słuchawkowego wymienionego powyżej

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

Podczas testów skończyło mi się 5 sekund na sen zamiast 3, ponieważ urządzenie nie było jeszcze gotowe do zmiany profilu audio. Twoje wyniki mogą się różnić o kilka sekund +/- 5 sekund. Edycja dotycząca potencjalnej pułapki. Odkryłem, że czasami trzeba uruchomić większy skrypt dwa razy, zanim zadziała. Nie jestem pewien, czy wydłużenie czasu snu pomogłoby, czy nie, ponieważ tego nie testowałem. Ale użyłem go na dwóch maszynach ze słuchawkami tej samej marki BT i robi to, co powinien, w celu zautomatyzowania procesu, aby dźwięk działał na słuchawkach.

Ostatecznie problem zostanie załatany w pakiecie bluetooth, ale wydaje się, że powraca w nowych wersjach Ubuntu, a także w innych wersjach systemu Linux. Ale w każdym razie nadzieja, która ci pomoże


>> Jak mogę zobaczyć logi i dowiedzieć się, co jest nie tak? << Byłoby wspaniale, gdybyś mógł również odpowiedzieć na to pytanie :)
kitingChris

Ustaw dźwięk w słuchawkach Bluetooth w GUI pavucontrol działa dla mnie. Działa lepiej niż narzędzie dźwiękowe Gnome.
QkiZ

1
2 lata później ta odpowiedź była mi potrzebna z moim Sony WH-H900N.
Joakim Wimmerstedt

(1 rok później) za pomocą XFCE i bluemana-managera, często muszę to zrobić bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffprzed kliknięciem prawym przyciskiem myszy w menu Urządzenia pozwoli mi zmienić profil audio na A2DP. Od czasu do czasu muszę też zabijać proces bluemana-menedżera dziecka, kiedy to zbyt długo, aby przywołać menu urządzeń.
ericP

Dziękujemy za udostępnienie tych poleceń. To jedyne obejście, które działało z moim Ubuntu 18.04 i Sony WH-1000xm2. Skryptowałem go na tej liście
egelev

19

W celu umożliwienia system mają być wykrywane jako zlewu A2DP (np do odtwarzania muzyki z telefonu przez głośniki komputera), dodać Enable=Source,Sink,Media,Socketpod [General]w /etc/bluetooth/audio.conf.

Po wykonaniu tej czynności zrestartuj demona bluetooth

systemctl restart bluetooth

Podłącz swoje urządzenie słuchawkowe

bluetoothctl
connect <MAC>

Sprawdź swoją kartę i ustaw profil

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

1
Używanie ubuntu 16.04 /etc/bluetooth/audio.conf nie istnieje, gdzie zamiast tego powinienem napisać ten wiersz?
thebeancounter

Naprawiono to dla mnie w Debian Sid, dziękuję!
Xerz

@thebeancounter dodaj plik, jeśli nie istnieje
Jimubao

czasami jeśli straciłeś połączenie z umywalką A2DP, spróbuj „wyłączyć” w bluetoothctl, a następnie „systemctl zrestartuj bluetooth”, a następnie w bluetoothctl „włącz” i ponownie podłącz swoje urządzenie
Jimubao 14.08.18

1
Pracował na ARch / Manjaro! Jednak plik znajduje się teraz w /etc/bluetooth/main.confnajnowszej wersji
MCMZL

13

Miałem ten problem na Ubuntu 16.04.1 LTS, a zastosowanie rozwiązania GDM znalezionego w https://wiki.debian.org/BluetoothUser/a2dp rozwiązało go.

W szczególności utwórz / edytuj, /var/lib/gdm3/.config/pulse/client.confaby przeczytać:

autospawn = no
daemon-binary = /bin/true

Następnie

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

Dodałem również do /etc/pulse/default.pa

load-module module-switch-on-connect

Chociaż może to nie być absolutnie konieczne.

Po ponownym uruchomieniu, połączyłem się za pomocą menedżera bluetooth, mogłem pomyślnie przełączyć profil audio na a2dp_sink.


Miałem problem, że oprogramowanie Bluez było niedostępne podczas pierwszego kroku łącza, więc nie można znaleźć użytkownika gdm. Ponadto folder gdm3 nie istniał, więc musiał utworzyć całą ścieżkę.
wordsforthewise

Zrobiłem drugie obejście tego linku z Debiana, działa jak urok!
Amfasis

5

lagerismi opublikował tutaj skrypt na starterze w oparciu o odpowiedź Jamie S.

  • Zmień adres MAC urządzenia w zmiennej wewnątrz skryptu! (można znaleźć za pomocą bluetoothctl-> Urządzenie)

  • Spraw, aby skrypt był wykonywalny chmod a-x bluetooth_headphone_reactivation.sh

Do automatycznego wykonywania przy uruchomieniu (działa tylko wtedy, gdy zestaw słuchawkowy jest już włączony):

  • Dodaj skrypt do skryptów uruchamiania / zamykania w panelu sterowania KDE

Aby szybko wykonać ręcznie:

  • Dodaj pozycję do startera aplikacji (możesz także ustawić skrót klawiszowy, taki jak „CTRL + ALT + H” i / lub przypiąć ten starter do paska okna)

Scenariusz:

#!/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

Powinieneś używać -ez echo.
jarno

3

Na Xubuntu 16.04.2
Użyj menedżera blueman :

  1. połącz -> wyłącz profil
  2. reconnect -> ustaw profil a2dp
  3. teraz twój zestaw słuchawkowy jest w porządku!

Mój skrypt bash 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

Ta odpowiedź i @freespace one pomogły mi w konfiguracji i3
Luis Lobo Borobia

Najnowsza aktualizacja zawiera ustawienie domyślnego zlewu, ale nie wiem, czy jest to konieczne.
jarno

2

Jeśli więc używasz Debiana, możesz wykonać następujące czynności: Odmówiono zmiany profilu na a2dp_sink: Brak połączenia

Problem

Zestaw słuchawkowy Bluetooth jest podłączony, ale ALSA / PulseAudio nie odbiera podłączonego urządzenia lub nie ma urządzenia do pobrania. Dzieje się tak, ponieważ GDM przechwytuje ujście A2DP na początku sesji, ponieważ GDM potrzebuje pulseaudio w sesji gdm dla ułatwienia dostępu. Na przykład czytnik ekranu tego wymaga.

Rozwiązanie

Aby uniemożliwić GDM przechwytywanie ujścia A2DP podczas uruchamiania sesji, edytuj /var/lib/gdm3/.config/pulse/client.conf(lub utwórz go, jeśli nie istnieje):

autospawn = no
daemon-binary = /bin/true

Następnie musisz udzielić dostępu do tego pliku użytkownikowi Debian-gdm:

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

Konieczne będzie również wyłączenie uruchamiania pulseaudio:

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

Aby automatycznie połączyć a2dp dla niektórych urządzeń, dodaj to do /etc/pulse/default.pa:

load-module module-switch-on-connect

Restart.


Dziękuję panu, że nie podążyłeś za tłumem kultów ładunków i nie wyjaśniłeś problemu! Mogę potwierdzić, że to naprawdę pomaga w odcinku Debian.
Marcin Owsiany

1

Jestem pewien, że poprzednie odpowiedzi faktycznie próbują rozwiązać pierwotną przyczynę problemu. Nie udało mi się jednak zmusić żadnego z nich do pracy. Miałem dokładnie ten sam problem co OP, ale na Linux Mint 17/18. Napisałem ten skrypt, aby niezawodnie połączyć bluetooth i używać a2dp.

Skopiuj / wklej dla potomności, ale sedno sprawy polega na tym, że dokładnie odwzorowuje to, co OP (i ja) musieliby zrobić w interfejsie użytkownika.

Skrypt Dominika nie działałby dla mnie niezawodnie, ponieważ próbowałby tylko raz wszystko skonfigurować. Musiałbym uruchomić go wiele razy, aby działał. Właśnie z tym skończyłem, to działa za każdym razem.

#!/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

Jak tu udokumentowano , dzieje się tak, ponieważ GDM przechwytuje ujście A2DP na początku sesji, ponieważ GDM potrzebuje pulseaudio w sesji gdm dla ułatwienia dostępu.
Spróbuj dodać to do „/var/lib/gdm3/.config/pulse/default.pa” lub utwórz go, a następnie uruchom ponownie:

#!/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

Próbowałem skonfigurować Bluetooth i zawsze otrzymywałem ten błąd.

Odkryłem, że problemem był Skype. Jeśli mam uruchomiony Skype, nie mogę ustawić a2dp_sinkprofilu.

Jeśli więc napotkasz ten problem, sprawdź, czy Skype jest uruchomiony i wyłącz go.


0
systemctl restart bluetooth
  • Otwórz ustawienia dźwięku (dostępne po kliknięciu ikony głośnika w zasobniku)
  • Spróbuj zmienić profil wyjściowy na Zlew A2DP.
  • Jeśli to nie zadziała, zmień urządzenie na Głośniki lub coś innego, a następnie przełącz je z powrotem.
  • Zazwyczaj stwierdzam, że mogę wtedy ustawić mój profil wyjściowy

0

Wybrałem go rozwiązać z reguły udev, ponieważ jestem jedynym użytkownikiem tego systemu, tak $USER, $XAUTHORITYi $DISPLAYsą dobrze znane.

Być może jest to przydatne dla kogoś, kto chce rozwiązania zdefiniowanego w jednym pliku, działającego na Ubuntu 18.04.1 LTS.

Hak jest uruchamiany przez inputpodsystem, ponieważ głośnik wydaje się być w pełni zainicjowany na tym etapie.

# 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'"

Wiki Archlinux wymienia urządzenia Cambridge Silicon Radio, które podają niewłaściwy profil przy połączeniu ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ). Mogę potwierdzić to zachowanie za pomocą głośnika bluetooth „JBL GO 2”, który zachowuje się źle, jak już wspomniano. a2dp wydaje się być dostępny krótko po podłączeniu - być może problem z synchronizacją?


0

To rozwiązało problem z ustawieniem profilu karty dla mnie: https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1181106/comments/15

Zacytować:

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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.