PipeWireでBluetoothイヤホン・ヘッドホンを使う

2 min read読了の目安(約2300字

分かってしまえば大して悩むようなことではないけど、どこにもわかりやすく書いていなかったのでメモ。「PipeWireはBluetoothをデフォルトでサポートしています」とは書いていても、「でもPipeWireのコマンドとかにはBluetoothイヤホンを接続するようなツールはどこにもないけど?」って悩んでしまいました。

結論から先に言うと、PulseAudioと同様にBlueZを利用して接続します。bluetoothctlなどを使うのが一般的でしょう。

従来のPulseAudioを完全にPipeWireで置き換えて使う場合を想定しています。Arch Linuxを想定して書くので、他のディストリビューションの人は適切に読み替えてください。

PipeWireのインストール

パッケージマネージャを利用してpacman -S pipewire pipewire-pulseみたいにインストールします。
PipeWireのPulseAudio互換レイヤー(呼び方が正しいのかは分かりませんが)であるpipewire-pulseも同時にインストールしています。他のディストリビューションでは同じpipewireパッケージに含まれているかもしれません。

必要ならpipewire-alsaもインストールしておくといいでしょう。レガシーなアプリはPulseAudioやPipeWireではなくALSAという1つ下のレイヤーのAPIを直接叩いていることがあります。pipewire-alsaがALSAに「なりすます」ことによって、ALSAを直接いじるレガシーアプリでもPipeWire経由で音を鳴らせるようになります。

参考(PulseAudioの場合): ざっくりとALSAとPulseAudioの関係 - みつきんのメモ

pactl infoを実行してみて、正しく情報が返ってきたら正常です。ちなみに、pactlはpipewire-pulseの依存パッケージであるlibpulseに含まれているコマンドで、PulseAudioのサーバを操作するものです。PipeWireが用意したPulseAudio互換のサーバも操作できるので、結果的にpactlでPipeWireを操作することができます。他にも、PulseAudioの設定ツールとして定番のpavucontrolでもPipeWireの設定ができたりします。

PipeWireの設定

/etc/pipewire/media-session.d/with-pulseaudioに空のファイルを作成します。このファイルがあると、PipeWireはBluetoothを扱うbluez5モジュールを有効化します。

Bluetoothの設定(初回)

まず、Bluetooth実装のBlueZをインストールします。Bluetoothの接続をCLIで行うためにbluez-utilsもインストールしておくといいと思います。bluez-utilsに含まれるのはbluetoothctlですが、それ以外のCLIツールやGUIツールを使っても構いません。

pacman -S bluez bluez-utils

ここからは、PulseAudio+BlueZと全く同じ手順になります。つまり、systemctl start bluetoothでBluetoothデーモンを起動し、bluetoothctlコマンドでイヤホンと接続します。ArchWikiを参考にしてください。基本的にペアリング→接続の順番になるはずです。必要に応じてscan onとかpower onとかtrustとかのコマンドを使ってください。

Bluetooth - ArchWiki
Bluetooth ヘッドセット - ArchWiki

connectコマンドなどでイヤホンやヘッドホンと接続したら、その時点で自動でPipeWireが音声まわりの設定をしてくれます。あとは適当に音を流して動作確認すればおしまいです。

毎回Bluetoothアダプタの電源を入れたりスキャンをオンにしたりが面倒という人は、/etc/bluetooth/main.confAutoEnabletrueに、DiscoverableTimeout0にしましょう。詳細はArchWikiを参照してもらえれば。

初回以降の接続設定

基本的にPipeWireが勝手にイヤホンを探知して接続してくれます。どうしても接続してくれないようなら手動でbluetoothctl pairとかbluetoothctl connectをしましょう。

より詳細な設定

/usr/share/pipewire/media-session.d/bluez-monitor.confにBlueZまわりの設定ファイルがあるので、これを/etc/pipewire/~/.config/pipewire/media-session.d/bluez-monitor.confにコピーして編集すればいいようです。