Debian はノートブックスピーカーをヘッドフォンに切り替えますが、HDMI をヘッドフォンに切り替えるわけではありません。オーディオ出力を自動的に切り替えることはできますか?

Debian はノートブックスピーカーをヘッドフォンに切り替えますが、HDMI をヘッドフォンに切り替えるわけではありません。オーディオ出力を自動的に切り替えることはできますか?

ノートパソコンのスピーカーを使用するときにヘッドフォンを接続すると、自動的にスピーカー出力がヘッドフォンに切り替わり、プラグを抜くとその逆に自動的に切り替わります。 HDMI経由でモニタースピーカーを使用している場合、自動切り替えはありません。

ヘッドホンを接続(接続解除)すると、オーディオ出力がデバイス間で自動的に切り替わることはありますか?

Debian 12(bookworm)、カーネルバージョン6.7.9-2、パイプワイヤー1.0.5。

答え1

ノートブックスピーカーとアナログヘッドホンのオーディオ自動切り替えは、単一のオーディオチップの異なる出力間で発生します。チップのハードウェアサポートがいくつかあるかもしれません。 HDオーディオスタイルのフロントパネルオーディオジャックを介してサウンドチップ内の切り替え可能な機能で有効にすると、接続されているヘッドフォンを検出すると自動的に他の出力がミュートされます。

(たとえば、alsamixerPipewireが提供する単純化されたボリュームコントロールの代わりにサウンドチップの実際のハードウェアミキサーを選択すると、それをスイッチとして見ることができます。Auto-Mute

古いAC97スタイルのフロントパネルオーディオジャックの場合、実際にはヘッドフォンジャックが接続されているときにスピーカー/ライン出力の出力信号を遮断するオーディオジャック自体内のメカニカルスイッチです。

HDMIとあらゆるタイプのヘッドフォン間、またはノートパソコンのスピーカーとUSBヘッドフォンを切り替える場合は、オーディオデータストリームを別のオーディオチップに切り替える必要があります。 Pipewireはこれを実行できますが、出力シンクの優先順位が正しく設定され、自動切り替えが有効になっている場合にのみそうします。

バラよりこのブログエントリwireplumber:Debian 12に含まれている0.4シリーズでオーディオシンクの優先順位を確認して調整する方法について説明します。バージョン 0.5 以降の場合、wireplumberバージョン 0.5 で構成方法が変更されたため、この推奨事項は直接適用されません。

簡単に言えば、最初のステップは、新しいサウンドデバイスが接続されたときに自動切り替えを有効にすることです。を実行して一時的にこれを実行できますpactl load-module module-switch-on-connect

このAskUbuntu.SEの質問また、実行の推奨事項も含まれていますpactl load-module module-switch-on-port-available。既存のオーディオデバイスで新しいポートを使用できるようになると、切り替えが可能になることがわかります。

上記のコマンドを永続化するには、/usr/share/pipewire/pipewire-pulse.conf例を読み、関連部分をディレクトリ*.confのファイルに追加します~/.config/pipewire/pipewire-pulse.conf.d/(存在しない場合は新規作成)。たとえば、

pulse.cmd = [
    { cmd = "load-module" args = "module-always-sink" flags = [ ] } #default
    { cmd = "load-module" args = "module-switch-on-connect" } #uncommented
    { cmd = "load-module" args = "module-switch-on-port-available" }  #added
    #{ cmd = "load-module" args = "module-gsettings" flags = [ "nofail" ] }
]

2番目のステップは、サウンドデバイスに適切な優先順位が割り当てられていることを確認することです。

これを使用して、wpctl statusPipewireが管理するすべてのデバイスの識別番号を確認し、特定のwpctl inspect <number> | grep -e node -e priorityオーディオデバイスの名前、説明、および優先順位を表示できます。デフォルトの優先順位が望ましくない場合は、次の~/.config/wireplumber/main.lua.d/60-*.luaようなファイルを作成して調整できます。

rule = {
  matches = {
    {
      { "node.name", "equals", "alsa_output.usb-MOTU_M4_M4MC0570FU-00.Direct__hw_M4__sink" },
    },
  },
  apply_properties = {
    ["priority.driver"] = 1050,
    ["priority.session"] = 1050,
  },
}

デフォルトのサウンドデバイスの「予想」デフォルトの優先順位は約1009である必要があるため、他のサウンドデバイスに高い値を割り当てると、他のサウンドデバイスpipewireよりも優先順位を付けることができます。ただし、1500より大きい値は監視装置用に予約されているため、割り当ててはいけません。

明らかに、個々のポートにも優先順位の値がありますが、残念ながら現在のものをカスタマイズする方法がわかりません。pactl list cards出力はかなり長いですが、見ることができます。

Pipewireポートの優先順位を調整する良い方法を知っている人がいる場合は、完全な回答を自分で作成したくない場合は自由に編集してください。

関連情報