「WirePlumber」の版間の差分
(英語版へのリンクを追加) |
(→設定: ルール マッチングのためのインターフェース名の取得を翻訳して追加) |
||
| 19行目: | 19行目: | ||
以下に、簡単な設定例を示します。 |
以下に、簡単な設定例を示します。 |
||
| + | |||
| + | === ルール マッチングのためのインターフェース名の取得 === |
||
| + | |||
| + | Lua スクリプトを使用してデバイスやノードを設定する前に、対象となるデバイス/ノードを指定するための [https://docs.pipewire.org/page_objects_design.html PipeWire オブジェクト] を知っておく必要があります。 |
||
| + | |||
| + | コマンド {{ic|$ pw-cli list-objects}} または {{ic|$ pw-cli ls}} を使用すると、システムで利用可能な全てのオブジェクトを表示することができます。 |
||
| + | |||
| + | 表示するオブジェクトの種類を絞り込むには、 {{ic|<nowiki>[all|Core|Module|Device|Node|Port|Factory|Client|Link|Session|Endpoint|EndpointStream|<id>]</nowiki>}} コマンドに続く {{ic|list-objects}} を一つ追加してください。 |
||
| + | |||
| + | {{hc|$ pw-cli list-objects Device|output=... |
||
| + | id 37, type PipeWire:Interface:Device/3 |
||
| + | object.serial = "264" |
||
| + | factory.id = "14" |
||
| + | client.id = "49" |
||
| + | device.api = "alsa" |
||
| + | device.description = "Starship/Matisse HD Audio Controller" |
||
| + | device.name = "alsa_card.pci-0000_08_00.4" |
||
| + | device.nick = "HD-Audio Generic" |
||
| + | media.class = "Audio/Device" |
||
| + | ...}} |
||
| + | |||
| + | コマンド {{ic|$ pw-cli dump}} でも、このタイプフィルタリングは適用されます。 |
||
| + | |||
| + | ALSA を設定するときに必要なオブジェクトは {{ic|device.name}} か {{ic|node.name}} のどちらかです。 |
||
=== デバイス/ノードのプロパティを変更する === |
=== デバイス/ノードのプロパティを変更する === |
||
2022年2月7日 (月) 20:25時点における版
関連記事
WirePlumber は、PipeWire 用の強力なセッションおよびポリシーマネージャです。モジュール設計に基づき、管理機能を実装し、 Lua プラグインによって、高度な設定と拡張が可能です。
インストール
wireplumber パッケージを インストールしてください。他の PipeWire セッションマネージャーと競合しますので、必ずアンインストールするようにしてください。
WirePlumber は systemd/ユーザー を使ってサーバーを管理し、ソケットを自動で起動します。
オプションとして、ドキュメントを確認するために wireplumber-docs をインストールしてください。
設定
WirePlumber のモジュール設計は、特定の機能の実装を入れ替える際に、残りの機能を再実装する必要がなく、非常に柔軟性があります。詳細な情報は、official documentation で見ることができます。
以下に、簡単な設定例を示します。
ルール マッチングのためのインターフェース名の取得
Lua スクリプトを使用してデバイスやノードを設定する前に、対象となるデバイス/ノードを指定するための PipeWire オブジェクト を知っておく必要があります。
コマンド $ pw-cli list-objects または $ pw-cli ls を使用すると、システムで利用可能な全てのオブジェクトを表示することができます。
表示するオブジェクトの種類を絞り込むには、 [all|Core|Module|Device|Node|Port|Factory|Client|Link|Session|Endpoint|EndpointStream|<id>] コマンドに続く list-objects を一つ追加してください。
$ pw-cli list-objects Device
... id 37, type PipeWire:Interface:Device/3 object.serial = "264" factory.id = "14" client.id = "49" device.api = "alsa" device.description = "Starship/Matisse HD Audio Controller" device.name = "alsa_card.pci-0000_08_00.4" device.nick = "HD-Audio Generic" media.class = "Audio/Device" ...
コマンド $ pw-cli dump でも、このタイプフィルタリングは適用されます。
ALSA を設定するときに必要なオブジェクトは device.name か node.name のどちらかです。
デバイス/ノードのプロパティを変更する
デバイスやノードのプロパティ(説明やニックネームなど)を変更するには、Lua スクリプトを作成し、~/.config/wireplumber に適切なパスと名前で追加する必要があります。
例えば ALSA ノードの説明を変更するには、 ~/.config/wireplumber/main.lua.d/51-alsa-rename.lua のようなファイルを作成して、以下のような内容を記述してください。
51-alsa-rename.lua
rule = {
matches = {
{
{ "node.name", "equals", "alsa_output.pci-0000_00_1f.3.output_analog-stereo" },
},
},
apply_properties = {
["node.description"] = "Laptop",
},
}
table.insert(alsa_monitor.rules,rule)
もし、Bluetooth ノードやデバイスの何かを変更したい場合は、以下のような内容で ~/.config/wireplumber/bluetooth.lua.d/51-rename.lua を作成するとよいでしょう。
51-rename.lua
rule = {
matches = {
{
{ "node.name", "equals", "bluez_output.02_11_45_A0_B3_27.a2dp-sink" },
},
},
apply_properties = {
["node.nick"] = "Headphones",
},
}
table.insert(bluez_monitor.rules,rule)
Lua スクリプトのファイル名と場所は、WirePlumber's Multi-path merging で、デフォルトの設定ファイル(例:/usr/share/wireplumber/main.lua.d/50-alsa-config.lua)でデバイスをロードして有効にするファイル(例:/usr/share/wireplumber/main.lua.d/90-enable-all.lua)の前に実行できるよう設計されています。
デバイスやノードを選択するためのマッチングルールや、変更できるプロパティは ALSA 設定 と Bluetooth 設定 に記載されています。
参照
- Documentation — オフィシャル ドキュメント
- WirePlumber, PipeWire session manager - George Kiagiadakis (Collabora) による2020年5月のブログ記事で、WirePlumber の仕組みが詳しく説明されています。