PulseAudio gagal mengatur profil kartu ke 'a2dp_sink'. Bagaimana saya bisa melihat log dan mencari tahu apa yang salah?


31

Saat ini saya telah menginstal ubuntu 16.04 dan a2dp yang digunakan untuk bekerja pada instalasi baru, yang saya lebih suka untuk meninggalkan sebagai opsi terakhir. Ketika pasangan dihapus dari pengaturan bluetooth dan dipasangkan lagi kadang-kadang berhasil menjadi profil a2dp, tetapi jika headset terputus dan kemudian dihubungkan kembali profil a2dp tidak berfungsi lagi (meskipun dikatakan ada di a2dp), itu hanya berfungsi setelah beralih ke HSP / HSF dan kemudian saya tidak dapat mengaturnya di a2dp.

Saya sudah mencoba melakukan:

 pacmd set-card-profile <index> a2dp_sink

tetapi kesalahan berikut keluar:

"Failed to set card profile to 'a2dp_sink'"

Saya cukup berpengalaman di Linux jadi saya tidak tahu bagaimana cara mendapatkan log atau apa yang harus dicari di dalamnya, tetapi saya mendapatkannya dari kartu daftar pacmd:

Ketika berhasil:

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:

Ketika tidak:

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:

Dan modul yang dimiliki adalah:

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"

Saya sudah mencoba memodifikasi /etc/bluetooth/audio.conf dan menginstal blueman tetapi tidak berhasil. Saya juga mencoba menginstal ulang bluez dan pulseaudio tetapi tidak ada yang berubah.

Apakah ada cara saya bisa tahu apa yang salah dan memperbaikinya?


bisakah Anda menjelaskan dari mana Anda mendapatkan informasi ini? dan apa itu indeks? Terima kasih!
Ezequiel Moreno

Jawaban:


23

Berdasarkan baris "profil aktif: <off>" profil suara tidak diaktifkan.

Salah satu program yang mudah digunakan untuk mengubah profil adalah pavucontrol. Anda dapat menginstalnya dengansudo apt install pavucontrol -y . Kemudian jalankan pavucontrol dari baris perintah atau Alt + F2 jika Anda berada di Kubuntu dan memasuki pavucontrol.

Pilih tab konfigurasi dan kemudian coba ubah profil untuk headphone Anda dan lihat apakah itu diperbarui untuk Anda. Tampaknya ada bug dengan bluetooth a2dp masih di linux dan itu mempengaruhi dua dari instalasi 16,04 saya. Jika sudah ada yang mengatakan A2DP mengubahnya ke OFF, lepaskan perangkat di applet bluetooth, lalu hubungkan kembali. Kemudian akhirnya lanjutkan untuk mengubah profil kembali ke A2DP dan itu akan berfungsi.

Anda juga dapat mencoba yang berikut pada baris perintah dan itu harus tab menyelesaikan sebagian besar untuk Anda. Ganti nomor 2 dengan nomor indeks saat ini untuk kedua perintah pacmd di bawah ini.

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

Untuk cara yang lebih rumit tetapi otomatis melakukan hal yang sama untuk bersepeda profil ke off dan kemudian kembali ke a2dp tetapi tidak melakukan perangkat bluetooth lepaskan dan sambungkan

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 

Saya juga membuat skrip yang berfungsi tetapi ceroboh untuk melakukan hal yang sama tetapi juga melepaskan dan menghubungkan kembali headphone bluetooth. Itu meraih indeks profil karena indeks berubah setiap kali perangkat terputus dan terhubung kembali. Ini dikodekan dengan id perangkat untuk headset yang Anda sebutkan di atas

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

Selama pengujian saya berakhir dengan 5 detik untuk tidur bukannya 3 karena perangkat belum siap untuk mengubah profil audio. Hasil Anda dapat bervariasi beberapa detik +/- 5 detik. Edit tentang jebakan potensial. Saya memang menemukan bahwa kadang-kadang diperlukan untuk menjalankan skrip yang lebih besar dua kali sebelum berfungsi. Saya tidak yakin apakah menambah waktu tidur akan membantu atau tidak karena saya belum mengujinya. Tetapi saya telah menggunakannya pada dua mesin dengan merek headphone BT yang sama dan melakukan apa yang seharusnya untuk mengotomatisasi proses agar suara bekerja di headphone.

Akhirnya masalah ini akan ditambal dalam paket bluetooth tetapi tampaknya tetap kembali dalam rilis baru Ubuntu serta versi Linux lainnya. Tetapi bagaimanapun juga harapan itu membantu Anda


>> Bagaimana saya bisa melihat log dan mencari tahu apa yang salah? << Akan lebih baik jika Anda juga bisa menjawab pertanyaan ini :)
kitingChris

Atur suara ke headphone bluetooth di pavucontrol gui bekerja untuk saya. Bekerja lebih baik daripada alat suara Gnome.
QkiZ

1
2 tahun kemudian dan jawaban ini diperlukan untuk saya dengan Sony WH-H900N saya.
Joakim Wimmerstedt

(1 tahun kemudian) menggunakan XFCE dan blueman-manager, saya sering harus bluetoothctl disconnect aa:bb:cc:dd:ee:ff && bluetoothctl connect aa:bb:cc:dd:ee:ffsebelum mengklik kanan pada menu Perangkat akan memungkinkan saya untuk mengubah profil audio ke A2DP. Kadang-kadang saya juga harus membunuh proses blueman-manager anak ketika terlalu lama untuk membuka menu perangkat.
ericP

Terima kasih telah memberikan perintah ini. Ini adalah satu-satunya solusi yang bekerja dengan Ubuntu 18.04 dan Sony WH-1000xm2 saya. Saya telah menuliskannya di
egelev

19

Untuk memungkinkan sistem Anda terdeteksi sebagai bak A2DP (mis. Untuk memutar musik dari telepon Anda melalui pengeras suara komputer Anda), tambahkan di Enable=Source,Sink,Media,Socketbawah .[General]/etc/bluetooth/audio.conf

Setelah melakukan ini, restart daemon bluetooth

systemctl restart bluetooth

Hubungkan perangkat headphone Anda

bluetoothctl
connect <MAC>

Periksa kartu Anda dan atur profil

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

1
Menggunakan ubuntu 16.04 /etc/bluetooth/audio.conf tidak ada, di mana saya harus menulis baris ini?
thebeancounter

Ini memperbaikinya untuk saya di Debian Sid, terima kasih!
Xerz

@thebeancounter menambahkan file jika tidak ada
Jimubao

kadang-kadang jika Anda kehilangan koneksi dengan wastafel A2DP, coba "matikan" di bluetoothctl dan kemudian "systemctl restart bluetooth" dan setelah itu di bluetoothctl "nyalakan" dan sambungkan perangkat Anda lagi
Jimubao

1
Bekerja di ARch / Manjaro! Namun file tersebut sekarang berada di /etc/bluetooth/main.confversi terbaru
MCMZL

13

Saya punya masalah ini di Ubuntu 16.04.1 LTS, dan menerapkan pekerjaan GDM sekitar ditemukan di https://wiki.debian.org/BluetoothUser/a2dp menyelesaikannya.

Secara khusus, buat / edit /var/lib/gdm3/.config/pulse/client.confuntuk membaca:

autospawn = no
daemon-binary = /bin/true

Kemudian

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

Saya juga menambahkan /etc/pulse/default.pa

load-module module-switch-on-connect

Meskipun ini mungkin tidak sepenuhnya diperlukan.

Setelah reboot, saya terhubung melalui bluetooth manager berhasil mengubah profil audio a2dp_sink.


Saya punya masalah bahwa bluez-firmware tidak tersedia selama langkah pertama dalam tautan, maka gdm pengguna tidak dapat ditemukan. Juga, folder gdm3 tidak ada, jadi harus membuat seluruh path itu.
kata

Saya melakukan solusi kedua dari tautan itu dari Debian, bekerja seperti pesona!
Amfasis

5

lagerismi memposting skrip di sini di launchpad berdasarkan pada jawaban oleh Jamie S.

  • Ubah perangkat MAC-address dalam variabel di dalam skrip! (dapat ditemukan dengan bluetoothctl-> Perangkat)

  • Jadikan skrip dapat dieksekusi chmod a-x bluetooth_headphone_reactivation.sh

Untuk eksekusi otomatis saat startup (hanya berfungsi jika headset sudah dihidupkan):

  • Tambahkan skrip ke skrip start / shutdown di panel kontrol KDE

Untuk eksekusi manual yang cepat:

  • Tambahkan entri ke aplikasi-starter (Anda juga dapat mengatur pintasan keyboad seperti "CTRL + ALT + H" dan / atau pin starter ini ke bilah jendela)

Naskah:

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

Anda harus menggunakan -edengan echo.
jarno

3

Pada Xubuntu 16.04.2
Gunakan blueman -manager:

  1. terhubung -> nonaktifkan profil
  2. hubungkan kembali -> atur profil a2dp
  3. sekarang headset kamu ok!

Skrip bash JBL saya

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

Jawaban ini dan @freespace satu membantu saya dalam pengaturan i3 saya
Luis Lobo Borobia

Pembaruan terbaru berisi pengaturan bak cuci standar, tetapi saya tidak tahu, jika perlu.
jarno

2

Jadi, jika Anda menggunakan Debian Anda dapat melakukan hal berikut: Menolak untuk mengganti profil ke a2dp_sink: Tidak tersambung

Masalah

Headset Bluetooth terhubung, tetapi ALSA / PulseAudio gagal untuk mengambil perangkat yang terhubung atau tidak ada perangkat untuk memilih. Ini terjadi karena GDM menangkap wastafel A2DP pada awal sesi, karena GDM membutuhkan pulseaudio dalam sesi gdm untuk aksesibilitas. Misalnya, pembaca layar membutuhkannya.

Larutan

Untuk mencegah GDM dari menangkap bak cuci A2DP pada awal sesi, edit /var/lib/gdm3/.config/pulse/client.conf(atau buat, jika tidak ada):

autospawn = no
daemon-binary = /bin/true

Setelah itu, Anda harus memberikan akses ke file ini ke pengguna Debian-gdm:

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

Anda juga harus menonaktifkan startup pulseaudio:

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

Untuk menghubungkan secara otomatis a2dp untuk beberapa perangkat, tambahkan ini ke /etc/pulse/default.pa:

load-module module-switch-on-connect

Mulai ulang.


Terima kasih, Pak, karena tidak mengikuti kerumunan pemujaan kargo dan benar-benar menjelaskan masalahnya! Saya dapat mengkonfirmasi bahwa ini sebenarnya membantu Debian.
Marcin Owsiany

1

Saya yakin bahwa jawaban sebelumnya benar-benar mencoba mengatasi akar penyebab masalah. Namun, saya tidak bisa membuat mereka bekerja. Saya memiliki masalah yang sama persis seperti OP, tetapi di Linux Mint 17/18. Saya menulis skrip ini untuk koneksi Bluetooth yang andal dan menggunakan a2dp.

Salin / tempel untuk anak cucu, tetapi yang paling parah adalah bahwa itu persis meniru apa yang OP (dan saya) harus lakukan di UI.

Skrip oleh Dominik tidak akan dapat diandalkan untuk saya, karena hanya akan mencoba sekali untuk mengatur semuanya. Saya harus menjalankannya beberapa kali untuk membuatnya bekerja. Inilah yang akhirnya saya lakukan, yang berfungsi setiap saat.

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

Seperti yang didokumentasikan di sini , itu karena GDM menangkap wastafel A2DP pada awal sesi, karena GDM membutuhkan pulseaudio dalam sesi gdm untuk aksesibilitas.
Coba tambahkan ini ke "/var/lib/gdm3/.config/pulse/default.pa", atau buat, lalu reboot:

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

Saya mencoba mengatur Bluetooth saya dan selalu mendapatkan kesalahan ini.

Saya menemukan bahwa masalahnya adalah Skype. Jika Skype saya aktif, saya tidak dapat mengatur a2dp_sinkprofil.

Jadi, jika Anda mengalami masalah ini, lihat apakah Anda menjalankan Skype dan mematikannya.


0
systemctl restart bluetooth
  • Buka pengaturan suara (dapat diakses dengan mengklik ikon speaker di baki)
  • Coba dan ubah profil Output ke Sink A2DP.
  • Jika itu tidak berhasil, ubah perangkat Anda menjadi Pengeras suara, atau yang lain lalu alihkan kembali.
  • Saya biasanya menemukan bahwa saya kemudian dapat mengatur profil Output saya

0

Saya memilih untuk menyelesaikannya dengan aturan udev, karena saya adalah satu-satunya pengguna sistem, jadi $USER, $XAUTHORITYdan $DISPLAYsudah terkenal.

Mungkin ini berguna untuk seseorang yang menginginkan solusi yang ditentukan dalam satu file, berjalan pada Ubuntu 18.04.1 LTS.

Pengait dipicu melalui inputsubsistem karena pengeras suara tampaknya diinisialisasi penuh pada tahap ini.

# 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 menyebutkan perangkat Cambridge Silicon Radio yang menyediakan profil yang salah saat terhubung ( https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable ). Saya bisa mengakui perilaku ini dengan speaker bluetooth "JBL GO 2", bertingkah seperti yang telah disebutkan. a2dp tampaknya tersedia beberapa saat setelah terhubung - mungkin masalah waktu?


0

Ini memperbaiki masalah set-card-profile untuk saya: https://bugs.launchpad.net/ubuntu/+source/pulseaudio/+bug/1181106/comments/15

Mengutip:

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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.