PipeWire
PipeWire は、GNOME が開発した新しいマルチメディアフレームワークです。開発を担当しているのはWim Taymans です。
PipeWire は Flatpak のようなコンテナをサポートしており、 ユーザーグループ の オーディオ や ビデオ に依存するのではなく、Flatpak や Wayland にスクリーンやオーディオを録音する許可を求める Polkit のようなセキュリティモデルを使用しています。
目次
- 1 インストール
- 2 使用方法
- 3 オーディオの後処理
- 4 トラブルシューティング
- 4.1 PipeWire によってマイクが検出されません
- 4.2 Bluetooth デバイスに接続しても音が聞こえない
- 4.3 音量が小さい
- 4.4 RLIMIT_MEMLOCK の増加
- 4.5 再接続後に外付けサウンドカードがアクティブにならない
- 4.6 No Sound または pactl info show Failure:Connection refused
- 4.7 Bluetooth のオーディオ品質が低い
- 4.8 PipeWire の更新と再起動後 (git/>=0.3.23) デバイスが検出されません
- 4.9 再生開始時にオーディオに遅延が発生する
- 4.10 複数のストリームの再生開始時にオーディオがカットアウトされる
- 5 参照
インストール
公式リポジトリの pipewire パッケージを インストール します。
Pipewire は systemd/ユーザー を使用してサーバーの管理と自動ソケット起動を行います。サービスの起動動作とログの詳細については、それぞれの systemd/ユーザー を参照してください。
必要に応じて、 pipewire-docs をインストールしてドキュメントを確認します。 pipewire-alsa、 pipewire-pulse、 pipewire-jack などの他のパッケージは、 PulseAudio/JACKの代わりにPipeWireを使用 したくない場合を除き、通常は必要ありません。 multilib をサポートするために、 lib 32-pipewireAUR、 lib 32-pipewire-jackAUR も利用できます。
使用方法
WebRTC スクリーンの共有
ほとんどのブラウザは、 WebRTC を使用しているとき (例えば Google Hongouts で) デスクトップ (または個々のアプリケーション) をキャプチャするために X11 に依存していました。 Wayland では、セキュリティ上の理由から、共有メカニズムは異なる方法で処理されます。 PipeWire は、アクセスコントロールを使用して、 Wayland の下のコンテンツを共有できます。
これには xdg-desktop-portal とそのバックエンドの1つが必要です [1] 利用可能なバックエンドは次のとおりです。
- xdg-desktop-portal-gtk gnomeの場合。
- xdg-desktop-portal-kde KDEの場合。
- xdg-desktop-portal-wlr wlroots ベースのコンポジター(例えば Sway、 dwl)
Firefox(84+)はデフォルトでこのメソッドをサポートしていますが、Chromium(73以降)では、WebRTC PipeWireサポート を有効にする必要があります。次のURLの対応する(実験的)フラグ
chrome://flags/#enable-webrtc-pipewire-capturer
xdg-Desktop-Portal-WLR
の作業には、 xdg_current_desktop
[2] を設定する必要があります。
XDG_CURRENT_DESKTOP=SWAY をエクスポートします
Chromium は 現在 PipeWire 0.2 を使っていますが、Arch Linux では PipeWire 0.3 を提供しているので、スクリーン共有を行うには libpipewire02 もインストールする必要があります。
唯一サポートされている機能はデスクトップ全体を共有することであり、特定のアプリ/ウィンドウを共有することではありません [4] [5]
Video
ソフトウェアはまだ製造済みではありませんが、GStreamer に頼るほとんどのアプリケーション。 PipeWire GStreamer プラグインのおかげで、ビデオストリームはボックス外で機能するはずです。例えばの用途のような用途。そのため、 cheese したがって、すでにそれを使用してビデオ入力を共有できます。
Audio
PulseAudio と Jack と同様に、 PipeWire をオーディオサーバーとして使用できます。 PulseAudio 互換のサーバー実装と JACK クライアント用の ABI 互換ライブラリを提供することで、 PulseAudio と Jack の両方を置き換えることを目的としています。詳細については、このブログエントリ
ALSA/レガシーアプリケーション
pipewire-alsa をインストールして、 PipeWire を介して ALSA API を使用してすべてのアプリケーションをルーティングします。
PulseAudio クライアント
pipewire-pulse をインストールします。通常、ユーザーサービス pipewire-pulse.socket
がパッケージによって自動的に有効にする必要があるため、それ以上の動作は不要です。システム起動時に PipeWire が正しく機能しない場合は、ユーザーサービス pipewire-pulse.service
と pipewire.service
が起動して実行されていることを検証します。 Systemd/ユーザーを参照してください。
再起動または再ログインして効果を確認してください。
交換が機能しているかどうかを確認するには、次のコマンドを実行して出力を参照してください。
$ pactl info
... Server Name: PulseAudio (on PipeWire 0.3.16) ...
JACK clients
pipewire-jack をインストールし、 PW-JACK
を使用して、元の libjack*
ではなく互換性のあるライブラリを持つジャッククライアントを起動します。
pw-jack application
BufferSize/SampLerate (秒単位でブロック待ち時間に等しい) を設定することで、カスタムバッファサイズを要求することも可能です。
PIPEWIRE_LATENCY="128/48000" pw-jack application
あるいは、 pipewire-jack-dropinAUR} またはアンインストール jack2}/jack2 を自動的にロードさせるために}
JACK アプリケーションが正しいライブラリにリンクしていることを確認するには、LDD
を使用します。
$ ldd /usr/bin/qjackctl | grep -i libjack
libjack.so.0 => /usr/lib/pipewire-0.3/jack/libjack.so.0 (0x00007f7e5080a000)
Bluetooth デバイス
PipeWire は、Bluetooth オーディオデバイスをハンドルします。 pipewire-pulse パッケージがインストールされている場合。具体的には、メディアセッションデーモンは /etc/pipewire/media-session.d/with-pulseaudio
をチェックし、ファイルが存在する場合は自動的にその BLUEZ5
モジュールを有効にします。
ネイティブジャックの上で PipeWire を実行します
PipeWire は、必要に応じてネイティブジャックデーモンの上にあるジャッククライアントとして実行することもできます。詳細については、and pipewire を参照してください。
オーディオの後処理
パルス効果
PulseEffects は GTK ユーティリティで、個々のアプリケーション出力ストリームとマイク入力ストリームに多数のオーディオエフェクトとフィルタを提供します。注目すべきエフェクトには、入出力イコライザー、出力ラウドネスイコライゼーションとベースエンハンスメント、入力ディエッサーとノイズリダクションプラグインなどがあります。エフェクトの全リストについては、 GitHubページ を参照してください。
PipeWire で PulseEffects を使用するには、pulseeffects または pulseeffects-gitAUR をインストールします。
プリセット設定のコレクションについては、Community Presets を参照してください。
トラブルシューティング
PipeWire によってマイクが検出されません
PipeWire の alsa-monitor
モジュールは、デフォルトで alsa-card-profiles を使用してデバイスを検出します。これでうまくいかない場合は、 api.alsa.use-acp
をオフにするか、 /etc/pipewire/media-session.d/alsa-monitor.conf
の rules
->最初のルール->actions
->update-props
の下でオプションとして api.alsa.use-ucm
をオンにしてみてください。
... update-props = { api.alsa.use-acp = false ...
次に、PipeWire を再起動し、使用可能なデバイスをチェックします。
$ pw-record --list-targets
Available targets ("*" denotes default): 62 58: description="Built-in Audio" prio=1872 60: description="Built-in Audio" prio=2000 * 62: description="Built-in Audio (Loopback PCM)" prio=1984
Bluetooth デバイスに接続しても音が聞こえない
2020-12-07 の時点で、Bluetooth デバイスを接続しても音が出ない場合は、デフォルトのシンクに切り替えるか、シンク入力を正しいシンクに移動する必要があります。 pactl list sinks
を使用して使用可能なシンクを一覧表示し、pactl set-default-sink
を使用してデフォルトのシンクを Bluetooth デバイスに切り替えます。これは この1 のようなスクリプトを使って udev で自動化できます。
この問題については、この Redditスレッド を参照してください。スクリプトの作成者によると、ヘッドセットプロファイル (HSP) にまだ問題がある可能性があります。
音量が小さい
PulseAudio を Pipewire に置き換えた後、サウンドは正常に動作しましたが、再起動後にボリュームが極端に低くなりました。
alsamixer
を開き、F6
を使って適切なサウンドカードを選び、 ALSA のボリュームが100%であることを確認してください。 alsactl
は、再起動後もこの設定を維持する必要があります。
RLIMIT_MEMLOCK の増加
12月13日 11:11:11 HOST pipewire-pulse [99999] :mlock memory 0x7f4f659d8000 32832:に失敗しました。これは問題ではありませんが、最高のパフォーマンスを得るために、 RLIMIT_MEMLOCK の増加を検討してください。
realtime-privileges をインストールし、 realtime
グループに自分のユーザーを追加します。
あるいは、memlock を 64kB から 128kB に増やすことで、この問題を解決できるようです。systemd/ユーザー で pipewire-pulse
を実行している場合は、{{ic|/etc/security/limits.d/username.conf} に次を追加します。
username soft memlock 64 username hard memlock 128
再接続後に外付けサウンドカードがアクティブにならない
~/.config/pipewire-media-session/default-profile
にデフォルトプロファイル オフ のエントリがあるかどうかを確認し、削除します。それでも解決しない場合は、 ~/.config/pipewire-media-session/
からすべてのファイルを削除し、 systemctl--user restart pipewire.service
を使用して PipeWire を再起動します。
No Sound または pactl info show Failure:Connection refused
これは、アプリケーションが PipeWire-Pulse サービスに接続できず、/etc/pipewire/pipewire-pulse.conf
が存在し空でないことを確認し、 systemctl--user restart pipewire-pulse.service
を使用して PipeWire-Pulse を再起動して下さい。
それでも解決しない場合は、 strace-f-o/tmp/pipe.txt pactl情報
と pastebin /tmp/pipe.txt
を実行し、IRC (Freenode #pipewire) かメーリングリストでヘルプを探してください。
Bluetooth のオーディオ品質が低い
Feb 17 18:23:01 HOST pipewire[249297]: (bluez_input.18:54:CF:04:00:56.a2dp-sink-60) client too slow! rate:512/48000 pos:370688 status:triggered
Bluetooth 再生が途切れる場合は、systemctl --user status pipewire.service
で pipewire.service
を確認してください。このようなエラーが発生した場合は、pactl list sinks
を使用して現在選択されているコーデックをチェックし、 {{ic|/etc/pipewire/media-session.d/bluez-monitor.conf} の bluez 5.codecs
を sbc aac ldac aptx aptx_hd の場合
のいずれかに設定して変更を試み、変更を有効にするために systemctl--user restart pipewire.service
を使用して PipeWire を再起動します。
/etc/pipewire/media-session.d/bluez-monitor.conf
... properties = { ... bluez5.codecs = [sbc] ...
PipeWire の更新と再起動後 (git/>=0.3.23) デバイスが検出されません
commit 012a68f8[6] の時点で、新しい systemd サービスが追加され、デフォルトでは無効になっています。これは、システムリブート時に pipewire-media-session
が実行されないことを意味します。サービスの実行を有効にするには、次の手順に従います。 systemctl--user enable--now pipewire-media-session.service
ユーザーまたはパッケージマネージャが更新後に構成ファイルの変更をソートしていない場合、 pipewire.service で pipewire-media-session
の別のインスタンスが実行されている可能性があります。実行をチェックしてください :systemctl --user status pipewire.service
実行中の pipewire および pipewire-media-session が表示される場合は、システムまたはユーザ設定、あるいはその両方を更新します。
/etc/pipewire/pipewire.conf および/または ~/.config/pipewire/pipewire.conf
context.exec = { ... # 以下の行はコメントアウトする必要があります #"/usr/bin/pipewire-media-session" = { args = "" } ... }
再生開始時にオーディオに遅延が発生する
これは、非アクティブ時のノードの中断が原因です。これを修正するには、遅延が発生する場所に応じて /etc/pipewire/media-session.d/*-monitor.conf
を編集し、プロパティ session.suspend-timeout-seconds
を 0 に変更して無効にするか、他の値を試して動作を確認します。あるいは、 /etc/pipewire/media-session.conf
の行 suspend-node
をコメントアウトすることもできます。 pipewire
および pipewire-pulse
systemd サービスの両方を再起動してこれらの変更を適用するか、または再起動します。
複数のストリームの再生開始時にオーディオがカットアウトされる
この問題は通常、 journalctl -b
を実行し、次のような行を検索することで診断できます。
pipewire-pulse[21740]: pulse-server 0x56009b9d5de0: [Nightly] UNDERFLOW channel:0 offset:370676 underrun:940
公式PipeWireトラブルシューティングガイド によると、この問題を解決するには、 /etc/pipewire/media-session.d/alsa-monitor.conf
を編集し、 api.alsa.headroom=0
という行のコメントを外し、値を 1024
に変更します。
参照
- Wiki — PipeWire Wiki on GitHub
- Pipewire Update Blog Post — PipeWire の2018年1月時点での進捗が書かれた記事
- PipeWire Late Summer Update 2020 — 2020年9月からのブログ投稿