web-dev-qa-db-ja.com

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

現在、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を再インストールしようとしましたが、何も変わりませんでした。

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

28
Juan Lopez

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

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

構成タブを選択し、ヘッドフォンのプロファイルを変更してみて、更新されるかどうかを確認してください。まだLinuxにはbluetooth a2dpのバグがあるようで、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でも再発し続けるようです。しかし、とにかくそれがあなたに役立つことを願っています

22
Jamie S.

システムを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>
15
Jimubao

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に正常に切り替えることができました。

13
freespace

lagerismi スクリプトを投稿 ここではランチパッド上 に基づく Jamie S.による回答

  • スクリプト内の変数でデバイスのMACアドレスを変更してください! (bluetoothctl-> Deviceで見つけることができます)

  • スクリプトを実行可能にする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
5

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

here に記載されているように、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
1
Mohamed Amine

したがって、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

リブート。

1
Je Suis Alrick

前の回答は実際に問題の根本原因に対処しようとしていると確信しています。しかし、私はそれらのどれも機能させることができませんでした。 OPとまったく同じ問題がありましたが、Linux Mint 17/18で発生しました。私は このスクリプト を書いて、Bluetoothを確実に接続し、a2dpを使用するようにしました。

後世のためにコピー/貼り付けますが、問題の欠点は、UIでOP(および私)がしなければならないことを正確に複製することです。

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

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

Bluetoothをセットアップしようとして、常にこのエラーが発生しました。

問題はSkypeであることがわかりました。 Skypeを実行している場合、a2dp_sinkプロファイルを設定できません。

そのため、この問題が発生した場合は、Skypeが実行されているかどうかを確認し、オフにしてください。

0
Rafael Basquens
systemctl restart bluetooth
  • サウンド設定を開く(トレイのスピーカーアイコンをクリックしてアクセス可能)
  • 出力プロファイルをA2DPシンクに変更してみてください。
  • それでも解決しない場合は、デバイスをスピーカーなどに変更してから元に戻します。
  • 通常、出力プロファイルを設定できることがわかります
0
Arthur

私はシステムの唯一のユーザーであるため、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
byteborg