Linuxを日常的に使う実験ブログ

Xubuntu 14.04LTSでBluetoothヘッドフォンが接続できない場合の対策

 2014-12-20

 Ubuntu

こんにちは。今回のテーマは『Xubuntu 14.04LTSでBluetoothヘッドフォンが接続できない場合の対策』です。筆者はPCの前では音楽聴きながら作業することが多くてArch Linuxを操作する時はBluetoothイヤフォンを使っていました。今回、メインマシンのXubuntuにBluetoothヘッドフォンをつなごうと思ったら思わぬトラブルに見舞われました。調べてみるとXubuntuユーザーの間ではちょっとした話題になってる模様です。 【関連記事】 Arch LinuxでBluetoothヘッドセットを使う [adsense02]

動作検証環境

ディストリビューションXubuntu 14.04LTS
bluetoothアダプターPLANEX製(型番不明)
BluetoothヘッドフォンATH-CKS55BT(audio-technica)
Bluetoothマネージャーblueman

どんな問題に直面したのか?

ペアリングはできる・・・でも

まずペアリングですが、ヘッドフォン側をペアリングモードにしてblueman側で”setup new device”を選択しペアリングをします。ここまでは普通のBluetooth機器と変わりません。問題はこの後です。多くのbluetoothヘッドフォン(イヤホン)はbluetoothのヘッドセット用のHSP/HFPプロトコルとステレオ音声用のA2DPプロトコルが使えます。私の使っているATH-CKS55BTもこの2つのプロトコルが使えます。音楽を聞くときには断然A2DPが良いです。HFPでも音は聞こえますが、公衆電話越しにラジカセを聞いてるような音質です。今回筆者が遭遇したトラブルはA2DPプロトコルでの通信ができないトラブルでした。

A2DP接続が出来ない

下の画像はbluemanです。ペアリングは完了しているのですが”Audio Sink”を選択してA2DP接続をしようとすると”Connection Failed: Stream Setup Failed”というエラーメッセージが出て接続できません。ネットで見てみると同じような症状に悩まされている方は多いようです。(主に海外の方ばかりでしたが) 画像はエラーが出た時のblueman 02

これで解決!Bluetoothで快適な音楽生活

いろいろと試行錯誤しましたが、接続の問題は以下の3ステップで解決しました。 #1 pulseaudio-module-bluetoothのインストール 以下のコマンドでpulseaudio-module-bluetoothをインストールします。

$ sudo apt-get install pulseaudio-module-bluetooth

#2 /etcl/bluetooth/audio.confの編集 /etc/bluetooth/audio.confを編集しておかないとモジュールの読み込みエラーを起こすので編集しておきます。エディタはお好みのエディタでOKですよ。

$ sudo vim /etc/bluetooth/audio.conf

以下のように修正します。(修正部分のみ抜粋)

[General] Disable=Socket

[Headset] HFP=false SBCSources=1 MPEG12Sources=0

#3 module-bluetooth-discoverの読み込み 以下コマンドでモジュールを読み込みます

$ pactl load-module module-bluetooth-discover

この状態で先ほどと同様にbluemanで”Audio Sink”を選択しATH-CKS55BTと接続してみます。 01 接続に成功しました。 03 PulseaudioのGUIフロントエンドのpavucontrolの設定画面でもA2DPが選択でき、再生タブでATH-CKS55BTを選択すれば音声が出ます。 04 この解決方法の問題点はシステム起動の度に以下のモジュールを読み込むコマンドを実行する必要があることです。bluetoothを使う度にこの長いコマンドを入力するのは少々面倒です。本題とは逸れますが、モジュールの読み込みについて以下で触れておきます。

起動毎のモジュール読み込みを簡単にする

システムを起動する度に”pactl load-module module-bluetooth-discover”を実行するは面倒です。そこで起動時に自動で読み込む方法を検討しましたが、結局はシェルスクリプトかエイリアスを作成してbluetootshヘッドフォンを使う際に一度実行するのが無難な対応だというのが現時点での結論です。筆者の対策を簡単に紹介します。

エイリアスの登録(推奨)

恐らく一行のコマンドでしたらエイリアスを登録するのが現実的な対応かと思います。本当は全自動でモジュール読み込みたいですが… 以下コマンドでエイリアス登録してbluetootヘッドフォンをつなぐ前に”btmod”エイリアスを実行します。(エイリアス名はお好きな名前で結構です)

$ alias btmod=‘pactl load-module module-bluetooth-discover’

実行例

$ btmod (←作成したエイリアス名)

シェルスクリプトの作成

一行のコマンドなのでシェルスクリプトを作成するのは大げさな気がしますが、例として紹介します。 今回は~/に作成します。

$ vim ~/laodbtmod

以下のように書き込みます。

#!/usr/bin/sh pactl load-module module-bluetooth-discover

実行例

$ ~/./loadbtmod

試してみたけどNGだった例

モジュールの読み込みの自動化は思ったより難航しました。確かに起動時にモジュールを読み込むだけならば出来るのですが、その後pulseaudioとの連動がうまく行きません。何かのお役に立てばと、以下に筆者が試してみた方法と結果を簡単に記載します。(実行結果は筆者環境のものであり、必ずそうなるという説明ではありません。失敗例なので興味のない方は読み飛ばして結構です) (1) /.config/pulse/dafault.paの編集 pulseaudioの設定ファイルとしては/etc/pulse/default.paがあるのですが、これのユーザー用ファイルとして/.config/pulse/default.paを用意します。

$ vim ~/.config/pulse/default.pa

以下フレーズを追記します。

load-module module-bluetooth-discover

【結果】 これでシステムを再起動するとbluetoothヘッドフォンのAudio Sink接続は成功します。しかしpulseaudioが起動せず”Establishing connection to PulseAudio. Plese wait…”というメッセージが出て止まってしまいます。 (2) /etc/pulse/default.paを~/.config/pulse/default.paにコピーする この場合は現状と何も変わりません。そもそも/etc/pulse/default.paにモジュール読み込みのフレーズは記載されているにも関わらず、それが機能していないのが問題なのですからhomeディレクトリにコピーしても状況が変わらないのは当然です。 (3) /.bashrcや/.bash_profileの編集 pactl load-module module-bluetooth-discoverのフレーズを記載し、システムを再起動してもAudio Sinkは成功しますが、その後A2DPプロトコルで接続しようとすると失敗します。そしてヘッドフォンがpulseaudioに認識されません。 (4) /etc/rc.localの編集 結果は上に同じくで、Audio Sinkは成功しますが、pulseaudioからはヘッドフォンを認識しません。 (5) Xfceの「セッションと起動」で自動開始アプリケーションにシェルスクリプトをセットする。 上記で作成したシェルスクリプトをXfce起動時に実行するようにセットしたのですが、この場合も.bashrcにセットしたのと同様にAudio Sinkの接続は成功しますが、pulseaudioから認識されずA2DP接続はできません。HSP/HFP接続は可能です。

最後に

今回はXubuntu 14.04LTSでの調査なので、Xubuntu 14.10では改善されているかも知れません。これらの問題は本家UbuntuやLinux Mintでは確認されていないようです。筆者もUbuntu Gnomeを使っている時にはこのような問題には遭遇しませんでした。今回は全自動でbluetoothが接続できる環境構築はできませんでしたが、ヘッドフォンを接続し音楽が聞こえるいう課題はクリアしました。Xubuntuユーザーのお役に少しでも立てれば幸いです。 [adsense]