「WirePlumber」の版間の差分
(→設定: 設定ファイルのレイアウトを翻訳して追加) |
(→ルールマッチングのためのインターフェース名の取得: 情報を更新) |
||
(2人の利用者による、間の2版が非表示) | |||
35行目: | 35行目: | ||
{{ic|lua.d/}} ディレクトリ内の Lua 設定ファイルは、{{ic|''config-dir''/scripts/}} から Lua スクリプトも読み込みます。これらのスクリプトは Pipewire のロジック/機能の一部を実装しており、特定の状況下では変更する価値がある場合もあります。 |
{{ic|lua.d/}} ディレクトリ内の Lua 設定ファイルは、{{ic|''config-dir''/scripts/}} から Lua スクリプトも読み込みます。これらのスクリプトは Pipewire のロジック/機能の一部を実装しており、特定の状況下では変更する価値がある場合もあります。 |
||
+ | |||
+ | === 設定の変更 === |
||
+ | |||
+ | WirePlumber を設定する推奨方法は、{{ic|/etc/wireplumber/}} または {{ic|~/.config/wireplumber/ 内の適切な {{ic|lua.d/}} ディレクトリに Lua スクリプトを追加することです。}} 考慮すべき点は次のとおりです。 |
||
+ | |||
+ | * 上書きしたい既存のスクリプトがある場合は、{{ic|/usr/share/wireplumber/}} からコピーしてください。同じ名前で優先順位の低い場所にある設定ファイルは無視されます [https://pipewire.pages.freedesktop.org/wireplumber/configuration/locations.html#location-of-configuration-files] |
||
+ | * 新しいスクリプトを追加する場合、50 より大きな数字で始めるべきです (例:{{ic|51-my-config.lua}}) デフォルトの設定は、英数字の並び順で 50 かそれ以下で行われることがほとんどだからです。 |
||
+ | ** WirePlumber は [https://pipewire.pages.freedesktop.org/wireplumber/configuration/config_lua.html#multi-path-merging multi-path merging] を実行するため、英数字の並び順がディレクトリの優先順位よりも優先されるため、番号の低いストックの設定が新しいスクリプトよりも先に実行されることに注意してください。 |
||
+ | * 選択するディレクトリは、ストックの設定が行うものと一致している必要がありますが、[https://pipewire.pages.freedesktop.org/wireplumber/configuration/multi_instance.html 複数インスタンスを使用する] 場合ではない限り、厳密には重要ではありません。 |
||
+ | * Bluetooth デバイスの ALSA プロパティは {{ic|bluetooth.lua.d/}} で設定する必要があります。Bluetooth デバイスの ALSA プロパティは {{ic|main.lua.d/}} で設定されたものでは ''ありません''。 |
||
=== ルールマッチングのためのインターフェース名の取得 === |
=== ルールマッチングのためのインターフェース名の取得 === |
||
− | + | Lua スクリプトでは、設定するインターフェイスの [https://docs.pipewire.org/page_objects_design.html オブジェクト] のプロパティを使用して {{ic|matches}} ルールを指定する必要があります。 |
|
− | + | WirePlumber によって管理されているすべてのオブジェクトを表示するには、コマンド {{ic|wpctl status}} を使用します。ターゲットインターフェイスに割り当てられた {{ic|''ID''}} を見つけます。次に、コマンド {{ic|wpctl Inspection ''ID''}} を使用して、必要なプロパティを取得します。 |
|
+ | たとえば、ターゲットインターフェイスが {{ic|HD Audio Controller Analog Stereo}} であり、次の出力を検討する場合: |
||
− | オブジェクト {{ic|Node}} は PipeWire グラフ内のシンクまたはソースです。これらは ALSA の {{ic|Device}} に対応します。 |
||
+ | {{hc|$ wpctl status|output= |
||
− | 表示するオブジェクトの種類を絞り込むには、 {{ic|<nowiki>[Device|Node]</nowiki>}} オプションを追加してください。例えば: |
||
+ | PipeWire 'pipewire-0' [0.3.56, user@hostname, cookie:1163266174] |
||
+ | Audio |
||
− | {{hc|$ pw-cli list-objects Device|output= |
||
+ | ├─ Devices: |
||
− | ... |
||
+ | │ 42. HD Audio Controller [alsa] |
||
− | id 37, type PipeWire:Interface:Device/3 |
||
+ | │ 105. USB PnP Audio Device [alsa] |
||
− | object.serial = "264" |
||
+ | │ |
||
− | factory.id = "14" |
||
+ | ├─ Sinks: |
||
− | client.id = "49" |
||
+ | │ * '''48. HD Audio Controller Analog Stereo''' [vol: 0.50] |
||
− | device.api = "alsa" |
||
+ | │ |
||
− | device.description = "Starship/Matisse HD Audio Controller" |
||
+ | ├─ ... |
||
− | device.name = "alsa_card.pci-0000_08_00.4" |
||
+ | │ |
||
− | device.nick = "HD-Audio Generic" |
||
+ | ├─ Sources: |
||
− | media.class = "Audio/Device" |
||
+ | │ * 101. USB PnP Audio Device Mono [vol: 0.74] |
||
− | ... |
||
+ | │ |
||
+ | └─ ...}} |
||
+ | |||
+ | インターフェース {{ic|''ID''}} は {{ic|48}} です。 |
||
+ | |||
+ | 次に、inspect コマンドを使用してオブジェクトの詳細を表示し、そのオブジェクト内のすべてのプロパティをリストします。 |
||
+ | |||
+ | {{hc|$ wpctl inspect 48|output= |
||
+ | id 48, type PipeWire:Interface:Node |
||
+ | ... |
||
+ | device.api = "alsa" |
||
+ | device.class = "sound" |
||
+ | * device.id = "42" |
||
+ | device.profile.description = "Analog Stereo" |
||
+ | device.profile.name = "analog-stereo" |
||
+ | ... |
||
+ | * factory.id = "18" |
||
+ | factory.mode = "merge" |
||
+ | factory.name = "api.alsa.pcm.sink" |
||
+ | ... |
||
+ | * media.class = "Audio/Sink" |
||
+ | * node.description = "HD Audio Controller Analog Stereo" |
||
+ | * node.name = "alsa_output.pci-0000_08_00.4.analog-stereo" |
||
+ | * node.nick = "ALC1220 Analog" |
||
+ | ... |
||
+ | * object.path = "alsa:pcm:1:front:1:playback" |
||
+ | * object.serial = "49" |
||
+ | ... |
||
}} |
}} |
||
+ | Lua 構成スクリプトの {{ic|matches}} ルールで使用する {{ic|device.name}} または {{ic|node.name}} プロパティを選択します。 |
||
− | オブジェクトタイプのフィルタリングは、{{ic|pw-cli dump}} コマンドにも適用されます。 |
||
+ | {{ic|device.id}} は動的であり、頻繁に変更されるため、使用は避けてください。 |
||
− | もしエンドポイントの特定のクラス (例:"Audio/Sink") を探しているのであれば、 {{ic|media.class}} プロパティを参照してください。 |
||
+ | {{ic|matches}} ルールでは複数のプロパティが可能です。[https://pipewire.pages.freedesktop.org/wireplumber/configuration/alsa.html#modifying-the-default-configuration WirePlumber ALSA 設定のドキュメント] の {{ic|alsa_monitor.rules}} セクションを参照してください。 |
||
− | ほとんどの場合、ALSA を設定するときに必要なプロパティは {{ic|device.name}} か {{ic|node.name}} のどちらかです。 |
||
+ | {{Note| |
||
− | {{Tip|{{ic|pw-top}} コマンドは現在使用されている {{ic|Node}} のリストを表示します。}} |
||
+ | * このオブジェクトの {{ic|Endpoint}} クラスは {{ic|media.class}} プロパティから判断できます。 |
||
+ | * ALSA では {{ic|node}} オブジェクトはシンクまたはソース / {{ic|device}} オブジェクトはカードに対応します。 |
||
+ | * v0.4.9以降、ALSA ノードは PCM 名を使って {{ic|node.nick}} を生成します。これは少なくとも UCM を使っている HDA カードでは便利で、全ての出力 (アナログ、HDMI など) が一つのプロファイル上で {{ic|node}} として公開されます。 |
||
+ | }} |
||
+ | |||
+ | {{Tip| |
||
+ | * コマンド {{ic|pw-top}} は、現在使用中の PipeWire {{ic|Device}} と {{ic|Node}} を表示します。 |
||
+ | * PipeWire の同様の検査コマンドは {{ic|pw-cli info ''ID''}} です。 |
||
+ | }} |
||
=== デバイス/ノードのプロパティを変更する === |
=== デバイス/ノードのプロパティを変更する === |
||
212行目: | 260行目: | ||
=== ログアウト後も Bluetooth を実行し続ける/ヘッドレス Bluetooth === |
=== ログアウト後も Bluetooth を実行し続ける/ヘッドレス Bluetooth === |
||
− | デフォルトでは、{{ic|/usr/share/wireplumber/bluetooth.lua.d/50-bluez-config.lua}} により [https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/222 |
+ | デフォルトでは、{{ic|/usr/share/wireplumber/bluetooth.lua.d/50-bluez-config.lua}} により [https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/222/diffs?commit_id=a253aa4c4948cdd87ba222670ee17db849af85dd logind モジュール]が有効化されます。このモジュールは、セッションが終了すると Bluetooth を無効化します。この挙動は以下の設定で無効化できます: |
− | {{hc|/etc/wireplumber/bluetooth.lua.d/50-bluez-config.lua ( |
+ | {{hc|/etc/wireplumber/bluetooth.lua.d/50-bluez-config.lua (あるいは ~/.config/wireplumber/bluetooth.lua.d/50-bluez-config.lua)|2= |
bluez_monitor.properties = { |
bluez_monitor.properties = { |
||
["with-logind"] = false, |
["with-logind"] = false, |
||
220行目: | 268行目: | ||
}} |
}} |
||
− | {{Note|[[PipeWire]]/Wireplumber を実行しているユーザーに対して |
+ | {{Note|これに加えて、[[PipeWire]]/Wireplumber を実行しているユーザーに対しては[[systemd/ユーザー#systemd のユーザーインスタンスを自動起動|残留 (lingering)]] を有効にする必要があります。}} |
== 参照 == |
== 参照 == |
2023年10月19日 (木) 18:34時点における最新版
関連記事
WirePlumber は、PipeWire 用の強力なセッションおよびポリシーマネージャです。モジュール設計に基づき、管理機能を実装し、 Lua プラグインによって、高度な設定と拡張が可能です。
目次
インストール
wireplumber パッケージを インストールしてください。他の PipeWire セッションマネージャーと競合しますので、必ずアンインストールするようにしてください。
WirePlumber は systemd/ユーザー を使ってサーバーを管理し、ソケットを自動で起動します。
オプションとして、ドキュメントを確認するために wireplumber-docs をインストールしてください。
設定
設定ファイルのレイアウト
WirePlumber の設定 は、変更された context
や alsa_monitor
などのグローバル PipeWire 風味の JSON オブジェクトで設定されていますその行動を変えるために。設定ファイルは、~/.config/wireplumber/
(ユーザー構成)、/etc/wireplumber/
(グローバル構成)、そして /usr/share/wireplumber/
(ストック構成) から読み取られます。
WirePlumber は、メイン設定ファイル を読み取ることから開始します。これは、PipeWire コンテキスト、SPA プラグイン、モジュール、およびコンポーネントを設定する JSON のようなファイルです。これらのコンポーネントの中には、グローバルオブジェクトを動的に変更するために使用される Lua スクリプトエンジンがあります。
パッケージに同梱されているさまざまな設定ファイルがあります。
- シングルインスタンス設定ファイル
/usr/share/wireplumber/wireplumber.conf
これはデフォルトの設定であり、他のすべての設定の機能を1つのプロセス内に含んでいます。- すべてのメイン設定ファイルで使用されている "context" オブジェクトについては、ドキュメント を参照。
- メイン設定ファイル
/usr/share/wireplumber/main.conf
WirePlumber コアに必要なモジュールとコンポーネントをロードし、config-dir/main.lua.d/
から Lua 設定ファイル をロードします。[1] を参照してください。- ALSAオブジェクト と "アクセス" オブジェクト のドキュメントを参照してください。
- Bluetooth 設定ファイル
/usr/share/wireplumber/bluetooth.conf
コアプロセスの Bluetooth 接続を処理する WirePlumber プロセスに適しています。これはconfig-dir/bluetooth.lua.d/
から Lua ファイルをロードします。- Bluetooth オブジェクトのドキュメント を参照してください。
- policy 設定ファイルは
/usr/share/wireplumber/policy.conf
にあります。これは、WirePlumber がノードの移動や変更を判断するためのポリシー機能をカプセル化したものです。config-dir/policy.lua.d/
から Lua ファイルを読み込みます。- ポリシー関連オブジェクトについては、ドキュメント を参照してください。
lua.d/
ディレクトリ内の Lua 設定ファイルは、config-dir/scripts/
から Lua スクリプトも読み込みます。これらのスクリプトは Pipewire のロジック/機能の一部を実装しており、特定の状況下では変更する価値がある場合もあります。
設定の変更
WirePlumber を設定する推奨方法は、/etc/wireplumber/
または ~/.config/wireplumber/ 内の適切な
考慮すべき点は次のとおりです。
lua.d/
ディレクトリに Lua スクリプトを追加することです。
- 上書きしたい既存のスクリプトがある場合は、
/usr/share/wireplumber/
からコピーしてください。同じ名前で優先順位の低い場所にある設定ファイルは無視されます [2] - 新しいスクリプトを追加する場合、50 より大きな数字で始めるべきです (例:
51-my-config.lua
) デフォルトの設定は、英数字の並び順で 50 かそれ以下で行われることがほとんどだからです。- WirePlumber は multi-path merging を実行するため、英数字の並び順がディレクトリの優先順位よりも優先されるため、番号の低いストックの設定が新しいスクリプトよりも先に実行されることに注意してください。
- 選択するディレクトリは、ストックの設定が行うものと一致している必要がありますが、複数インスタンスを使用する 場合ではない限り、厳密には重要ではありません。
- Bluetooth デバイスの ALSA プロパティは
bluetooth.lua.d/
で設定する必要があります。Bluetooth デバイスの ALSA プロパティはmain.lua.d/
で設定されたものでは ありません。
ルールマッチングのためのインターフェース名の取得
Lua スクリプトでは、設定するインターフェイスの オブジェクト のプロパティを使用して matches
ルールを指定する必要があります。
WirePlumber によって管理されているすべてのオブジェクトを表示するには、コマンド wpctl status
を使用します。ターゲットインターフェイスに割り当てられた ID
を見つけます。次に、コマンド wpctl Inspection ID
を使用して、必要なプロパティを取得します。
たとえば、ターゲットインターフェイスが HD Audio Controller Analog Stereo
であり、次の出力を検討する場合:
$ wpctl status
PipeWire 'pipewire-0' [0.3.56, user@hostname, cookie:1163266174] Audio ├─ Devices: │ 42. HD Audio Controller [alsa] │ 105. USB PnP Audio Device [alsa] │ ├─ Sinks: │ * 48. HD Audio Controller Analog Stereo [vol: 0.50] │ ├─ ... │ ├─ Sources: │ * 101. USB PnP Audio Device Mono [vol: 0.74] │ └─ ...
インターフェース ID
は 48
です。
次に、inspect コマンドを使用してオブジェクトの詳細を表示し、そのオブジェクト内のすべてのプロパティをリストします。
$ wpctl inspect 48
id 48, type PipeWire:Interface:Node ... device.api = "alsa" device.class = "sound" * device.id = "42" device.profile.description = "Analog Stereo" device.profile.name = "analog-stereo" ... * factory.id = "18" factory.mode = "merge" factory.name = "api.alsa.pcm.sink" ... * media.class = "Audio/Sink" * node.description = "HD Audio Controller Analog Stereo" * node.name = "alsa_output.pci-0000_08_00.4.analog-stereo" * node.nick = "ALC1220 Analog" ... * object.path = "alsa:pcm:1:front:1:playback" * object.serial = "49" ...
Lua 構成スクリプトの matches
ルールで使用する device.name
または node.name
プロパティを選択します。
device.id
は動的であり、頻繁に変更されるため、使用は避けてください。
matches
ルールでは複数のプロパティが可能です。WirePlumber ALSA 設定のドキュメント の alsa_monitor.rules
セクションを参照してください。
デバイス/ノードのプロパティを変更する
デバイスやノードのプロパティ(説明やニックネームなど)を変更するには、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 を参照してください。
同じサウンドカード上の複数のシンクへの同時出力
/usr/share/alsa-card-profile/mixer/profile-sets/default.conf
のコピーを作成して、更新後も変更が維持されるようにします。ここでは、アナログと HDMI の 2 つのデフォルトマッピングを結合するプロファイルを定義します。
/usr/share/alsa-card-profile/mixer/profile-sets/multiple.conf
[General] auto-profiles = no [Mapping analog-stereo] device-strings = front:%f channel-map = left,right paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic priority = 15 [Mapping hdmi-stereo] description = Digital Stereo (HDMI) device-strings = hdmi:%f paths-output = hdmi-output-0 channel-map = left,right priority = 9 direction = output [Profile multiple] description = Analog Stereo Duplex + Digital Stereo (HDMI) Output output-mappings = analog-stereo hdmi-stereo input-mappings = analog-stereo
ここで、一致するデバイスに新しいカードプロファイルを使用するように Wireplumber を設定します。識別情報については、ルール マッチングのためのインターフェース名の取得 を参照してください。次のような Lua スクリプトを作成して構成を適用します。
/etc/wireplumber/main.lua.d/51-alsa-custom.lua (or ~/.config/wireplumber/main.lua.d/51-alsa-custom.lua)
rule = { matches = { { { "device.nick", "matches", "HDA Intel PCH" }, }, }, apply_properties = { ["api.alsa.use-acp"] = true, ["api.acp.auto-profile"] = false, ["api.acp.auto-port"] = false, ["device.profile-set"] = "multiple.conf", ["device.profile"] = "multiple", }, } table.insert(alsa_monitor.rules,rule)
ヒントとテクニック
キーボードで音量コントロール
次のコマンドをボリュームキーにバインドするには、キーボードショートカット#Xorg を参照してください: XF86AudioRaiseVolume
、XF86AudioLowerVolume
、XF86AudioMute
、および XF86AudioMicMute
音量を 150% の制限で上げるには:
$ wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+
音量を下げるには:
$ wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
ボリュームをミュート/ミュート解除するには:
$ wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
マイクをミュート/ミュート解除するには:
$ wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
音量レベルを表示
デフォルトのシンクの音量レベルとミュート状態を取得するには、次の手順を実行します。
$ wpctl get-volume @DEFAULT_AUDIO_SINK@
Volume: 0.45
ログアウト後も Bluetooth を実行し続ける/ヘッドレス Bluetooth
デフォルトでは、/usr/share/wireplumber/bluetooth.lua.d/50-bluez-config.lua
により logind モジュールが有効化されます。このモジュールは、セッションが終了すると Bluetooth を無効化します。この挙動は以下の設定で無効化できます:
/etc/wireplumber/bluetooth.lua.d/50-bluez-config.lua (あるいは ~/.config/wireplumber/bluetooth.lua.d/50-bluez-config.lua)
bluez_monitor.properties = { ["with-logind"] = false, }
参照
- Documentation — オフィシャル ドキュメント
- WirePlumber, PipeWire session manager - George Kiagiadakis (Collabora) による2020年5月のブログ記事で、WirePlumber の仕組みが詳しく説明されています。