PulseAudioは、カードプロファイルを「a2dp_sink」に設定できません。ログを表示して、何が間違っているのかを知るにはどうすればよいですか?


31

現在、ubuntu 16.04をインストールしており、a2dpを使用して新規インストールを行いました。これは最後のオプションとして残しておきたいと思います。ペアリングがBluetooth設定から消去され、再度ペアリングされると、a2dpプロファイルにあることがありますが、ヘッドセットが切断されてから再接続された場合、a2dpプロファイルは機能しません(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を再インストールしようとしましたが、何も変わりませんでした。

何が間違っているのかを知り、修正する方法はありますか?


この情報はどこから入手できますか?インデックスとは何ですか?ありがとう!
エゼキエルモレノ

回答:


23

「active profile:<off>」という行に基づいて、サウンドプロファイルはアクティブ化されませんでした。

プロファイルを変更するのに使いやすいプログラムの1つがpavucontrolです。でインストールできsudo apt install pavucontrol -yます。次に、コマンドラインからpavucontrolを実行するか、Kubuntuでpavucontrolと入力している場合はAlt + F2を実行します。

構成タブを選択し、ヘッドフォンのプロファイルを変更してみて、更新されるかどうかを確認してください。ブルートゥースa2dpにはまだLinuxのバグがあるようで、16.04のインストールの2つに影響します。すでに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ヘッドフォンを切断して再接続するための、動作しているがずさんなスクリプトを作成しました。デバイスが切断および再接続されるたびにインデックスが変更されるため、プロファイルインデックスを取得します。これは、上記にリストしたヘッドセットのデバイスIDでハードコードされています

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

テスト中に、デバイスがまだオーディオプロファイルを変更する準備ができていなかったため、3秒ではなく5秒のスリープになりました。結果は、数秒+/- 5秒異なる場合があります。潜在的な落とし穴に関する編集。動作する前に大きなスクリプトを2回実行する必要がある場合があることがわかりました。私はそれをテストしていないので、睡眠時間を増やすことが助けになるかどうかはわかりません。しかし、同じブランドのBTヘッドフォンを搭載した2台のマシンで使用しており、ヘッドフォンでサウンドを機能させるプロセスを自動化するために想定されていることを実行しています。

最終的には、この問題はbluetoothパッケージで修正されますが、Ubuntuの新しいリリースやLinuxの他のバージョンでも再発し続けるようです。しかし、とにかくそれがあなたに役立つことを願っています


?>>どのように私はあなたにも:)この質問に答えることができれば、<<素晴らしいことだいただきました!間違ってログアウトし、姿を見ることができます
kitingChris

pavucontrol guiでbluetoothヘッドフォンにサウンドを設定してください。Gnomeサウンドツールよりも適切に動作します。
QkiZ

1
2年後、この答えは私のWH-H900Nで必要でした。
ヨアキムヴィンマーシュテット

(1年後)XFCEとblueman-managerを使用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で修正されました、ありがとう!
Xerz

@thebeancounterが存在しない場合はファイルを追加します
Jimubao

A2DPシンクとの接続が失われた場合は、bluetoothctlで「電源オフ」を試してから「systemctl restart bluetooth」を試し、その後bluetoothctlで「電源オン」してデバイスを再接続してください
-Jimubao

1
ARch / Manjaroに取り組んだ!しかし、ファイルは現在にあり/etc/bluetooth/main.conf、最近のバージョンのために
MCMZL

13

Ubuntu 16.04.1 LTSでこの問題が発生し、https: //wiki.debian.org/BluetoothUser/a2dpにあるGDMの回避策を適用して解決しました。

具体的には、作成/編集して次/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-firmwareが利用できず、ユーザーgdmが見つからないという問題がありました。また、フォルダgdm3は存在しなかったため、そのパス全体を作成する必要がありました。
言葉forthewise

Debianからのリンクから2番目の回避策を行いました。
Amfasis

5

lagerismiは、Jamie Sの回答に基づいてランチパッドにスクリプトをここに投稿しました

  • スクリプト内の変数でデバイスの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

あなたは使うべき-eecho
ジャーノ

3

Xubuntu 16.04.2では、
blueman-managerを使用します。

  1. 接続->プロファイルをオフに設定
  2. 再接続->プロファイルa2dpを設定
  3. ヘッドセットは大丈夫です!

私のJBL bashスクリプト

#!/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 1は私i3の設定に私を助けた
ルイス・ロボBorobia

最新のアップデートにはデフォルトのシンクの設定が含まれていますが、必要かどうかはわかりません。
ジャーノ

2

したがって、Debianを使用している場合、次のことができます。プロファイルをa2dp_sinkに切り替えることを拒否:接続されていません

問題

Bluetoothヘッドセットは接続されていますが、ALSA / PulseAudioは接続されたデバイスのピックアップに失敗するか、ピックアップするデバイスがありません。これは、GDMがアクセシビリティのためにgdmセッションでpulseaudioを必要とするため、GDMがセッション開始時にA2DPシンクをキャプチャするために発生します。たとえば、スクリーンリーダーはそれを必要とします。

溶液

セッション開始時に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で発生しました。私が書いたこのスクリプトを確実にブルートゥース接続して使用して11,010を取得します。

後世のためにコピー/貼り付けますが、問題の欠点は、OP(および私)がUIで行う必要があることを正確に複製することです。

Dominikのスクリプトは、すべてをセットアップするのに1回しか試行しないため、確実に機能しません。動作させるには、複数回実行する必要があります。これは、私が最終的には成功するもので、毎回機能します。

#!/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はアクセシビリティのためにgdmセッションでpulseaudioを必要とするため、セッション開始時にGDMがA2DPシンクをキャプチャするためです。
これを「/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シンクに変更してみてください。
  • それでも解決しない場合は、デバイスをスピーカーなどに変更してから元に戻します。
  • 通常、出力プロファイルを設定できることがわかります

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では、接続時に不正なプロファイルを提供するケンブリッジシリコンラジオデバイスについて言及しています(https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable)。「JBL GO 2」ブルートゥーススピーカーでこの動作を確認できますが、既に述べたように誤動作します。a2dpは接続後しばらくして利用できるようです-おそらくタイミングの問題ですか?


0

これにより、私のためのset-card-profileの問題が修正されました: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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.