PulseAudio kann das Kartenprofil nicht auf 'a2dp_sink' setzen. Wie kann ich die Protokolle sehen und herausfinden, was falsch ist?


31

Ich habe momentan Ubuntu 16.04 installiert und a2dp arbeitete an einer Neuinstallation, die ich lieber als letzte Option belassen würde. Wenn das Pairing aus den Bluetooth-Einstellungen gelöscht und manchmal erneut gepaart wird, kann es sich auf einem a2dp-Profil befinden. Wenn das Headset jedoch getrennt und dann wieder verbunden wird, funktionieren die a2dp-Profile nicht mehr (obwohl es sich auf a2dp befindet), funktioniert es nur nachdem ich zu HSP / HSF gewechselt habe und es dann nicht mehr auf a2dp einstellen kann.

Ich habe versucht zu tun:

 pacmd set-card-profile <index> a2dp_sink

aber der folgende Fehler tritt auf:

"Failed to set card profile to 'a2dp_sink'"

Ich bin ziemlich unerfahren in Linux, daher weiß ich nicht, wie ich Logs bekommen soll oder wonach ich suchen soll, aber ich habe das von pacmd list-cards:

Wenn es funktioniert:

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:

Wenn dies nicht der Fall ist:

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:

Und das besitzende Modul ist:

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"

Ich habe bereits versucht, /etc/bluetooth/audio.conf zu ändern und blueman zu installieren, aber es hat nicht funktioniert. Ich habe auch versucht, bluez und pulseaudio neu zu installieren, aber nichts hat sich geändert.

Kann ich auf irgendeine Weise wissen, was falsch ist, und es beheben?


Könntest du bitte erklären, woher diese Informationen stammen? und was ist Index? Vielen Dank!
Ezequiel Moreno

Überprüfen Sie hier askubuntu.com/a/817926/33292
Pylover

Antworten:


23

Anhand der Zeile "aktives Profil: <aus>" wurde das Soundprofil nicht aktiviert.

Ein einfach zu verwendendes Programm zum Ändern des Profils ist pavucontrol. Sie können es mit installieren sudo apt install pavucontrol -y. Führen Sie dann pavucontrol über die Befehlszeile oder Alt + F2 aus, wenn Sie sich in Kubuntu befinden und pavucontrol eingeben.

Wählen Sie die Registerkarte Konfiguration und versuchen Sie dann, das Profil für Ihre Kopfhörer zu ändern und festzustellen, ob das für Sie aktualisiert wird. Es scheint einen Fehler mit Bluetooth A2DP in Linux zu geben, der zwei meiner 16.04-Installationen betrifft. Wenn bereits A2DP angezeigt wird, ändern Sie die Einstellung in OFF, trennen Sie das Gerät im Bluetooth-Applet und schließen Sie es erneut an. Ändern Sie anschließend das Profil wieder in A2DP, und es sollte funktionieren.

Sie können auch Folgendes in der Befehlszeile versuchen, und die Registerkarte sollte das meiste für Sie erledigen. Ersetzen Sie die Nummer 2 durch die aktuelle Indexnummer für die beiden folgenden pacmd-Befehle.

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

Für eine kompliziertere, aber automatisierte Möglichkeit, dasselbe zu tun, indem Sie das Profil ausschalten und dann wieder zu a2dp zurückkehren, das Bluetooth-Gerät jedoch nicht trennen und verbinden

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 

Ich sollte auch ein funktionierendes, aber schlampiges Skript erstellen, um das Gleiche zu tun, aber auch die Bluetooth-Kopfhörer zu trennen und wieder anzuschließen. Es erfasst den Profilindex, da sich der Index jedes Mal ändert, wenn das Gerät getrennt und erneut verbunden wird. Dies ist mit der Geräte-ID für das oben aufgeführte Headset fest codiert

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

Während des Tests habe ich 5 Sekunden für den Ruhezustand anstatt 3 Sekunden erhalten, da das Gerät noch nicht bereit war, das Audioprofil zu ändern. Ihre Ergebnisse können um einige Sekunden +/- 5 Sekunden variieren. Bearbeiten Sie in Bezug auf eine potenzielle Falle. Ich habe festgestellt, dass es gelegentlich erforderlich ist, das größere Skript zweimal auszuführen, bevor es funktioniert. Ich bin mir nicht sicher, ob eine Verlängerung der Schlafzeiten helfen würde oder nicht, da ich das nicht getestet habe. Aber ich habe es auf zwei Computern mit BT-Kopfhörern der gleichen Marke verwendet und es tut, was es soll, um den Prozess zu automatisieren, damit der Sound auf den Kopfhörern funktioniert.

Irgendwann wird das Problem im Bluetooth-Paket behoben, scheint aber in neuen Versionen von Ubuntu und anderen Linux-Versionen immer wieder vorzukommen. Aber trotzdem hoffe das hilft dir


>> Wie kann ich die Protokolle sehen und herausfinden, was falsch ist? << Wäre großartig, wenn Sie auch diese Frage beantworten könnten :)
kitingChris

Das Einstellen des Klangs für Bluetooth-Kopfhörer in der Pavucontrol-Benutzeroberfläche funktioniert bei mir. Funktioniert besser als das Gnome Sound Tool.
QkiZ

1
2 Jahre später und diese Antwort wurde für mich mit meinem Sony WH-H900N benötigt.
Joakim Wimmerstedt

(1 Jahr später) Mit XFCE und Blueman-Manager muss ich häufig mit der bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffrechten Maustaste in das Menü Geräte klicken, um das Audioprofil auf A2DP umzustellen. Ich muss gelegentlich auch einen untergeordneten Blueman-Manager-Prozess beenden, wenn es zu lange dauert, das Gerätemenü aufzurufen.
ericP

Vielen Dank für die Bereitstellung dieser Befehle. Dies ist die einzige Problemumgehung, die mit meinem Ubuntu 18.04 und Sony WH-1000xm2 funktioniert hat. Ich habe es auf dieser Seite geschrieben: gist.github.com/egelev/2e6b57d5a8ba62cf6df6fff2878c3fd4
egelev

19

Um zu ermöglichen, dass Ihr System als A2DP-Senke erkannt wird (z. B. um Musik von Ihrem Telefon über Ihre Computerlautsprecher abzuspielen), fügen Sie Enable=Source,Sink,Media,Socketunter [General]in hinzu /etc/bluetooth/audio.conf.

Starten Sie danach den Bluetooth-Daemon neu

systemctl restart bluetooth

Schließen Sie Ihr Kopfhörergerät an

bluetoothctl
connect <MAC>

Überprüfen Sie Ihre Karte und legen Sie das Profil fest

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

1
Die Verwendung von Ubuntu 16.04 /etc/bluetooth/audio.conf ist nicht vorhanden. Wo soll ich stattdessen diese Zeile schreiben?
thebeancounter

Dies hat es für mich auf Debian Sid behoben, danke!
Xerz

@thebeancounter die Datei hinzufügen, wenn es nicht existiert
Jimubao

gelegentlich , wenn Sie Verbindung mit A2DP Spüle verloren, versucht „power off“ in bluetoothctl und „systemctl Neustart Bluetooth“ dann und danach in bluetoothctl „power on“ und das Gerät wieder anschließen
Jimubao

1
Arbeitete an ARch / Manjaro! Die Datei befindet sich jetzt in der /etc/bluetooth/main.confneuesten Version
MCMZL

13

Ich hatte dieses Problem unter Ubuntu 16.04.1 LTS und das Anwenden der GDM-Problemumgehung unter https://wiki.debian.org/BluetoothUser/a2dp löste es.

Insbesondere erstellen / bearbeiten, um /var/lib/gdm3/.config/pulse/client.confzu lesen:

autospawn = no
daemon-binary = /bin/true

Dann

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

Ich habe auch hinzugefügt /etc/pulse/default.pa

load-module module-switch-on-connect

Dies ist jedoch möglicherweise nicht unbedingt erforderlich.

Nach einem Neustart konnte ich mit dem über Bluetooth verbundenen Manager das Audioprofil erfolgreich auf umschalten a2dp_sink.


Ich hatte das Problem, dass die bluez-Firmware im ersten Schritt des Links nicht verfügbar war und der Benutzer gdm nicht gefunden werden konnte. Außerdem existierte der Ordner gdm3 nicht und musste den gesamten Pfad erstellen.
wordsforthewise

Ich habe die zweite Problemumgehung für diesen Link von Debian gemacht, funktioniert wie ein Zauber!
Amfasis

5

lagerismi hat hier auf dem Launchpad ein Skript veröffentlicht , das auf der Antwort von Jamie S. basiert .

  • Ändern Sie die MAC-Adresse des Geräts in der Variablen im Skript! (zu finden mit bluetoothctl-> Gerät)

  • Machen Sie das Skript ausführbar chmod a-x bluetooth_headphone_reactivation.sh

Für die automatische Ausführung beim Start (funktioniert nur, wenn das Headset bereits eingeschaltet ist):

  • Fügen Sie das Skript zu den Start- / Shutdown-Skripten in der KDE-Systemsteuerung hinzu

Für eine schnelle manuelle Ausführung:

  • Hinzufügen eines Eintrags zum Anwendungsstarter (Sie können auch eine Tastenkombination wie "STRG + ALT + H" festlegen und / oder diesen Starter an der Fensterleiste anheften)

Das Drehbuch:

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

Sie sollten -emit verwenden echo.
10.

3

Unter Xubuntu 16.04.2
Blueman-Manager verwenden:

  1. verbinden -> Profil ausschalten
  2. Verbindung wiederherstellen -> Profil a2dp einstellen
  3. Jetzt ist Ihr Headset in Ordnung!

Mein JBL-Bash-Skript

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

Diese Antwort und @freespace half mir bei meinem i3-Setup
Luis Lobo Borobia

Das neueste Update enthält die Einrichtung der Standardsenke, aber ich weiß nicht, ob es notwendig ist.
Jarno

2

Wenn Sie Debian verwenden, können Sie Folgendes tun: Das Profil wurde nicht auf a2dp_sink geändert: Nicht verbunden

Problem

Bluetooth-Headset ist verbunden, aber ALSA / PulseAudio kann das verbundene Gerät nicht abholen oder es ist kein Gerät zum Abholen vorhanden. Dies geschieht, weil GDM die A2DP-Senke beim Sitzungsstart erfasst, da GDM pulseaudio in der GDM-Sitzung für die Barrierefreiheit benötigt. Beispielsweise benötigt der Bildschirmleser dies.

Lösung

Bearbeiten Sie, um zu verhindern, dass GDM die A2DP-Senke beim Sitzungsstart erfasst /var/lib/gdm3/.config/pulse/client.conf (oder erstellen Sie sie, falls sie nicht vorhanden ist):

autospawn = no
daemon-binary = /bin/true

Danach müssen Sie dem Debian-gdm-Benutzer Zugriff auf diese Datei gewähren:

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

Sie müssen auch den Start von pulseaudio deaktivieren:

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

Fügen Sie dies zu hinzu, um a2dp für einige Geräte automatisch zu verbinden /etc/pulse/default.pa :

load-module module-switch-on-connect

Starten Sie neu.


Vielen Dank, dass Sie der Menge der Frachtkultisten nicht gefolgt sind und das Problem tatsächlich erklärt haben! Ich kann bestätigen, dass dies auf Debian-Strecken tatsächlich hilft.
Marcin Owsiany

1

Ich bin sicher, dass die vorherigen Antworten tatsächlich versuchen, die Grundursache des Problems zu beheben. Ich war jedoch nicht in der Lage, einen von ihnen zum Arbeiten zu bringen. Ich hatte genau das gleiche Problem wie OP, aber unter Linux Mint 17/18. Ich habe dieses Skript geschrieben, um zuverlässig eine Bluetooth-Verbindung herzustellen und a2dp zu verwenden.

Kopieren / Einfügen für die Nachwelt, aber das Wichtigste ist, dass es genau nachbildet, was das OP (und ich) in der Benutzeroberfläche tun müssten.

Das Skript von Dominik würde bei mir nicht zuverlässig funktionieren, da es nur einmal versucht , alles einzurichten. Ich musste es mehrmals ausführen, um es zum Laufen zu bringen. Das ist, was ich am Ende hatte, das funktioniert jedes Mal.

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

Wie in dokumentiert hier , ist es , weil GDM erfasst Körper auf Session - Start A2DP, wie GDM Bedürfnisse in der GDM - Sitzung für die Zugänglichkeit Pulseaudio.
Versuchen Sie dies zu "/var/lib/gdm3/.config/pulse/default.pa" hinzuzufügen oder erstellen Sie es und starten Sie es neu:

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

Ich habe versucht, mein Bluetooth einzurichten und habe immer diese Fehlermeldung erhalten.

Ich fand, dass das Problem Skype war. Wenn Skype ausgeführt wird, kann ich keine Einstellungen vornehmena2dp_sink Profil .

Wenn Sie auf dieses Problem stoßen, prüfen Sie, ob Skype ausgeführt wird, und deaktivieren Sie es.


0
systemctl restart bluetooth
  • Klangeinstellungen öffnen (Zugriff durch Klicken auf das Lautsprechersymbol in der Taskleiste)
  • Versuchen Sie, das Ausgabeprofil auf A2DP-Senke zu ändern.
  • Wenn das nicht funktioniert, ändern Sie Ihr Gerät in Lautsprecher oder etwas anderes und schalten Sie es dann zurück.
  • Normalerweise finde ich, dass ich dann mein Ausgabeprofil einstellen kann

0

Ich wähle es mit einer udev - Regel zu lösen, da ich der einzige Nutzer des Systems bin, so $USER, $XAUTHORITYund$DISPLAY sind gut bekannt.

Vielleicht ist dies nützlich für jemanden, der eine in einer einzelnen Datei definierte Lösung unter Ubuntu 18.04.1 LTS haben möchte.

Der Hook wird über das inputSubsystem ausgelöst, da der Lautsprecher zu diesem Zeitpunkt vollständig initialisiert zu sein scheint.

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

Das Archlinux-Wiki erwähnt Cambridge Silicon Radio-Geräte, die bei connect das falsche Profil bereitstellen ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ). Ich kann dieses Verhalten mit einem Bluetooth-Lautsprecher "JBL GO 2" bestätigen, der sich wie bereits erwähnt schlecht verhält. a2dp scheint kurz nach dem verbinden verfügbar zu sein - vielleicht ein zeitproblem?


0

Dies behebt ein Set-Card-Profil-Problem für mich: https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1181106/comments/15

Zitat:

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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.