Arch LinuxでBluetoothイヤホンを接続して音を出す

##PulseAudioをアップデート後に音が出なくなった場合

> `pulseaudio-git`はヘッドセット/ハンズフリープロファイルと Bluez5 のネイティブサポートが追加されています

AURからBUILDしなおさなければなりません。なぜなら、` module-bluetooth-discover`をロードできないからです。

したがって、以下の手順を踏みます。

```bash:
## ARCHリポジトリからアップデートしてしまった場合
#$ sudo pacman -Syu
#pulseaudio

# pulseaudio-git はヘッドセット/ハンズフリープロファイルと Bluez5 のネイティブサポートが追加されています
# pulseaudioをビルドする
$ yaourt -S pulseaudio-git

$ pactl load-module module-bluetooth-discover

# 現在使ってるサウンドカードを調べる
$ pacmd list-sinks|egrep -i 'index:|name:'

$ vim /etc/pulse/default.pa
        ##場合によっては、先ほど調べたサウンドカードを指定する(MacBookの場合はcard_1が使われることが多いので、基本的には変更することになります。詳しくは"/etc/asound.conf"を見てください)
        #set-default-sink hoge.index.name
        ##場合によっては、恒久的にモジュールのロードを有効にする必要があるかもしれません
        #load-module module-bluetooth-discover

## 場合によっては、既に登録失敗済みの場合、再接続にはremoveが必要になるかもしれません
$ bluetoothctl
        remove 00:00:00:00:00
```

また、アップデートされないように設定しておくと良いかもしれません。この問題について発生するたびに調べるのも面倒です。

```bash:/etc/pacman.conf
IgnorePkg = pulseaudio
```

しかし、このあたり、挙動が本当に分かりにくいのでそれも注意。例えば、MacBookの場合は、サウンド関連は、通常、index 1,card 1を使用するため、独自に指定する必要があります。デフォルトではここは0を使用するようになってて、ほとんどのコンピュータはそれで音が出ます。

そして、`module-bluetooth-discover`モジュールのロードだけど、ビルド直後はロードできるが、再起動後はできなくなり、かつ設定ファイルに書いても、エラーが出てしまい音が出なくなります。

##基本的な説明

Bluetooth-Headsetで音を出すまでに結構ハマったので、メモ。

ポイントだけ先にあげておくと以下のようになります。

```bash:
# 必要なもの
$ sudo pacman -S pulseaudio-alsa bluez bluez-libs bluez-utils bluez-firmware
# bluetooth-connect
# まず接続できるが、すぐに接続が切れる問題について
$ cat /etc/pulse/default.pa
$ pactl load-module module-bluetooth-discover

# sound-control
# 次に音が出ない問題について
$ sudo pacman -S pavucontrol
$ pavucontrol
```

通常、Bluetoothの接続は以下の手順でできると思われます。

```bash:
$ bluetoothctl
 power on
 scan on
 connect 00:1D:43:6D:03:26

場合にっては
 pair 00:1D:43:6D:03:26
 trust 00:1D:43:6D:03:26
 connect 00:1D:43:6D:03:26

接続解除など
 disconnect 00:1D:43:6D:03:26
 remove 00:1D:43:6D:03:26
```

> ヒント: 最新版の Bluez はヘッドセット/ハンズフリープロファイルをサポートしていません。そのためマイク入力は動作せず、A2DP プロファイルをサポートしていないヘッドセットには音声が出力されません。ヘッドセット/ハンズフリープロファイルのヘッドセットを使うときは、AUR を利用して他のパッケージを取得する旧式の方法を使用する必要があります。

> ヒント: pulseaudio-git はヘッドセット/ハンズフリープロファイルと Bluez5 のネイティブサポートが追加されています。

> ヒント: Bluez5 は PulseAudio しかサポートしておらず ALSA はサポートしていません。PulseAudio を使いたくない場合は AUR から昔のバージョンの Bluez をインストールする必要があります。

https://wiki.archlinux.org/index.php/Bluetooth_headset

では、以下より具体的な説明に入りますが、かなり複雑な話になっていると思われますので、気になる方だけ。

##Bluez5

まず、Bluez5は、[Alsa](https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture)ではなく、[PulseAudio](https://wiki.archlinux.org/index.php/PulseAudio)を使います。私の場合は、Alsaで音を出しており、サウンドカードも既に指定済みでした。

```bash:
# 使いたいサウンドカード情報
$ aplay -l
$ alsamixer 
```

```bash:/etc/asound.conf
pcm.!default {
    type hw
    card 1
}

ctl.!defalt {
    type hw
    card 1
}
#defaults.pcm.card 1
#defaults.pcm.device 0
#defaults.ctl.card 1
```

ここで、PulseAudioをインストールする場合、`/etc/asound.conf`が置き換えられたりするので、音が出なくなることもありますので注意です。

私の場合は、MacBook特有の問題で、PulseAudioをMacBookで使う場合は、デフォルトのサウンドカードがHDMIに設定されてしまうため、pavucontrolをインストールしなければなりません。

> Also, if you are using PulseAudio, sometimes it thinks HDMI is the default sound card; to solve this problem, install pavucontrol and set Analog Stereo as the fallback device.

https://wiki.archlinux.org/index.php/MacBookPro11,x

あとは、`pavucontrol`でGUIにていろいろと設定できます。

```bash:
$ pavucontrol
```

ちなみに、mplayerの場合は、以下の設定が必要です。

```bash:/etc/mplayer/mplayer.conf
ao=pulse
```

##Bluez4

もしAlsaを使いたければ、Bluez5をアンインストールし、Bluez4をインストールして使わなければなりません。その場合、Bluetoothの接続コマンドも変わってきます。

```bash:
$ hcitool scan
  00:1F:20:1D:1B:4B

$ hciconfig hci0 up

$ sudo bluez-simple-agent hci0 00:1F:20:1D:1B:4B
```

##ボリューム調整

私は、正直、Alsaのほうが好きですが、Bluetoothを使う以上、PulseAudioのほうが良いと思われますので、乗り換えました。

したがって、ボリューム調整方法なども変更

```bash:
$ yaourt -S pamixer-git
```

```bash:~/.zshrc
##alsa
#function vol(){
#case $OSTYPE in
#    darwin*)
#        osascript -e "set Volume ${1}"
#    ;;
#    linux*)
#        if [ $# != 1 ];then
#            echo mute
#            amixer sset Master mute
#        else
#            echo $1
#            amixer sset Master unmute
#            amixer sset Master ${1}
#        fi
#    ;;
#esac
#}

#pulseaudio
function vol(){
case $OSTYPE in
    darwin*)
        osascript -e "set Volume ${1}"
    ;;
    linux*)
        if [ $# != 1 ];then
            echo mute
            echo old `pamixer --get-volume`
            pamixer --mute
        else
            echo $1
            pamixer --unmute
            echo old `pamixer --get-volume`
            pamixer --set-volume $1
        fi
    ;;
esac
}
```

##その他

###blueman

メニューとして`blueman`を使ってみました。

```bash:
$ yaourt -S blueman
```

```~/.xinitrc
blueman-applet &
```

しかし、アイコンがダサいので、変更。

```bash:
#!/bin/bash
numix_dir=/usr/share/icons/Numix/24x24/status
blueman_dir=/usr/share/icons/hicolor/24x24/status
sudo cp $numix_dir/bluetooth-tray.svg $blueman_dir/blueman-tray.png
sudo cp $numix_dir/bluetooth-active.svg $blueman_dir/blueman-active.png
sudo cp $numix_dir/bluetooth-active.svg $blueman_dir/blueman.png
```

ちなみに、メニューアイコンとか変更するやつ書きました。

https://github.com/syui/numix-icon-theme/blob/master/setup.sh

気になるのあったら、ぜひ教えてください。

###pasystray

ステータスバーに表示される形のボリューム調整ツールです。

```bash:
$ yarout -S pasystray-git
```

```~/.xinitrc
pasystray &
```