「WirePlumber」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
22行目: 22行目:
 
=== ルール マッチングのためのインターフェース名の取得 ===
 
=== ルール マッチングのためのインターフェース名の取得 ===
   
Lua スクリプトを使用してデバイスやノードを設定する前に、対象となるデバイス/ノードを指定するための [https://docs.pipewire.org/page_objects_design.html PipeWire オブジェクト] を知っておく必要があります。
+
WirePlumber の Lua スクリプトでは、設定したい対象インターフェースの [https://docs.pipewire.org/page_objects_design.html PipeWire objects] で {{ic|matches}} ルール指定する必要があります。
   
コマンド {{ic|$ pw-cli list-objects}} または {{ic|$ pw-cli ls}} を使用すると、システムで利用可能な全てのオブジェクトを表示することができます。
+
システムで利用可能な全てのオブジェクトを表示するには、コマンド {{ic|pw-cli list-objects}} {{ic|pw-cli dump}} を使用ます。
   
  +
オブジェクト {{ic|Node}} は PipeWire グラフ内のシンクまたはソースです。これらは ALSA の {{ic|Device}} に対応します。
表示するオブジェクトの種類を絞り込むには、 {{ic|<nowiki>[all|Core|Module|Device|Node|Port|Factory|Client|Link|Session|Endpoint|EndpointStream|<id>]</nowiki>}} コマンドに続く {{ic|list-objects}} を一つ追加してください。
 
   
  +
表示するオブジェクトの種類を絞り込むには、 {{ic|<nowiki>[Device|Node]</nowiki>}} オプションを追加してください。例えば:
{{hc|$ pw-cli list-objects Device|output=...
 
  +
  +
{{hc|$ pw-cli list-objects Device|output=
  +
...
 
id 37, type PipeWire:Interface:Device/3
 
id 37, type PipeWire:Interface:Device/3
 
object.serial = "264"
 
object.serial = "264"
38行目: 41行目:
 
device.nick = "HD-Audio Generic"
 
device.nick = "HD-Audio Generic"
 
media.class = "Audio/Device"
 
media.class = "Audio/Device"
...}}
+
...
  +
}}
  +
  +
オブジェクトタイプのフィルタリングは、{{ic|pw-cli dump}} コマンドにも適用されます。
  +
  +
もしエンドポイントの特定のクラス (例:"Audio/Sink") を探しているのであれば、 {{ic|media.class}} プロパティを参照してください。
   
  +
ほとんどの場合、ALSA を設定するときに必要なプロパティは {{ic|device.name}} か {{ic|node.name}} のどちらかです。
コマンド {{ic|$ pw-cli dump}} でも、このタイプフィルタリングは適用されます。
 
   
  +
{{Tip|{{ic|pw-top}} コマンドは現在使用されている {{ic|Node}} のリストを表示します。}}
ALSA を設定するときに必要なオブジェクトは {{ic|device.name}} か {{ic|node.name}} のどちらかです。
 
   
 
=== デバイス/ノードのプロパティを変更する ===
 
=== デバイス/ノードのプロパティを変更する ===

2022年5月16日 (月) 10:54時点における版

関連記事

WirePlumber は、PipeWire 用の強力なセッションおよびポリシーマネージャです。モジュール設計に基づき、管理機能を実装し、 Lua プラグインによって、高度な設定と拡張が可能です。

インストール

wireplumber パッケージを インストールしてください。他の PipeWire セッションマネージャーと競合しますので、必ずアンインストールするようにしてください。

WirePlumber は systemd/ユーザー を使ってサーバーを管理し、ソケットを自動で起動します。

オプションとして、ドキュメントを確認するために wireplumber-docs をインストールしてください。

設定

WirePlumber のモジュール設計は、特定の機能の実装を入れ替える際に、残りの機能を再実装する必要がなく、非常に柔軟性があります。詳細な情報は、official documentation で見ることができます。

以下に、簡単な設定例を示します。

ルール マッチングのためのインターフェース名の取得

WirePlumber の Lua スクリプトでは、設定したい対象インターフェースの PipeWire objectsmatches ルールを指定する必要があります。

システムで利用可能な全てのオブジェクトを表示するには、コマンド pw-cli list-objectspw-cli dump を使用します。

オブジェクト Node は PipeWire グラフ内のシンクまたはソースです。これらは ALSA の Device に対応します。

表示するオブジェクトの種類を絞り込むには、 [Device|Node] オプションを追加してください。例えば:

$ 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 コマンドにも適用されます。

もしエンドポイントの特定のクラス (例:"Audio/Sink") を探しているのであれば、 media.class プロパティを参照してください。

ほとんどの場合、ALSA を設定するときに必要なプロパティは device.namenode.name のどちらかです。

ヒント: pw-top コマンドは現在使用されている Node のリストを表示します。

デバイス/ノードのプロパティを変更する

デバイスやノードのプロパティ(説明やニックネームなど)を変更するには、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 マルチパスマージ で、デフォルトの設定ファイル

(例:/usr/share/wireplumber/main.lua.d/50-alsa-config.lua)デバイスをロードして有効にするファイル

(例:/usr/share/wireplumber/main.lua.d/90-enable-all.lua)の前に実行できるよう設計されています。

デバイスやノードを選択するためのマッチングルールや、変更できるプロパティは ALSA 設定Bluetooth 設定 に記載されています。

デバイス/ノードの無効化

WirePlumber v0.4.7 からは、プロパティ device.disabled または node.disabled で任意のデバイスやノードを無効にできるようになりました。

~/.config/wireplumber/main.lua.d/51-alsa-disable.lua
rule = {
  matches = {
    {
      { "device.name", "equals", "alsa_card.pci-0000_08_00.4" },
    },
  },
  apply_properties = {
    ["device.disabled"] = true,
  },
}

table.insert(alsa_monitor.rules,rule)

システム内の alsa_card.* の名前については、WirePlumber#Obtain interface name for rules matching を参照してください。

ノート: 一般的な使用例としては、NVIDIA の HDMI オーディオ出力を無効にする場合など。

参照