PipeWireでBluetoothイヤホン・ヘッドホンを使う
分かってしまえば大して悩むようなことではないけど、どこにもわかりやすく書いていなかったのでメモ。「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.conf
のAutoEnable
をtrue
に、DiscoverableTimeout
を0
にしましょう。詳細は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
にコピーして編集すればいいようです。
Discussion