it-swarm.com.de

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

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?

28
Juan Lopez

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 Sudo apt install pavucontrol -y installieren. 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 Gefahr. 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

22
Jamie S.

Fügen Sie Enable=Source,Sink,Media,Socket unter [General] in /etc/bluetooth/audio.conf hinzu, damit Ihr System als A2DP-Senke erkannt werden kann (z. B. um Musik von Ihrem Telefon über die Computerlautsprecher abzuspielen).

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>
15
Jimubao

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

Erstellen/bearbeiten Sie /var/lib/gdm3/.config/Pulse/client.conf, um Folgendes zu lesen:

autospawn = no
daemon-binary = /bin/true

Dann

Sudo chown gdm:gdm /var/lib/gdm3/.config/Pulse/client.conf

Ich habe auch zu /etc/Pulse/default.pa hinzugefügt

load-module module-switch-on-connect

Dies ist jedoch möglicherweise nicht unbedingt erforderlich.

Nach einem Neustart konnte ich über den Bluetooth-Manager das Audioprofil erfolgreich auf a2dp_sink umstellen.

13
freespace

lagerismi hat ein Skript gepostet hier auf dem Launchpad basierend auf die Antwort von Jamie S.

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

  • Mach 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 KDE 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
5

Auf Xubuntu 16.04.2
Verwende blueman-manager:

  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
3
takeseem

Wie in hier dokumentiert, liegt es daran, dass GDM die A2DP-Senke beim Sitzungsstart erfasst, da GDM pulseaudio in der GDM-Sitzung für die Barrierefreiheit benötigt.
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
1
Mohamed Amine

Wenn Sie Debian verwenden, können Sie also Folgendes tun: Es wurde abgelehnt, das Profil auf a2dp_sink zu ändern: 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

Um zu verhindern, dass GDM die A2DP-Senke beim Sitzungsstart erfasst, bearbeiten Sie /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

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

load-module module-switch-on-connect

Starten Sie neu.

1
Je Suis Alrick

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 schrieb dieses Skript , 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 versuchen würde , alles einzurichten. Ich musste es mehrmals ausführen, um es zum Laufen zu bringen. Dies ist, was ich am Ende, das jedes Mal funktioniert.

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

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 das a2dp_sink -Profil nicht festlegen.

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

0
Rafael Basquens
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
Arthur

Ich entschied mich, es mit einer udev-Regel zu lösen, da ich der einzige Benutzer des Systems bin, also sind $USER, $XAUTHORITY und $DISPLAY wohlbekannt.

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 Subsystem input 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 ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ) das falsche Profil bereitstellen. 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
byteborg