🔊

EndeavourOS設定:PipeWire + AVアンプ(HDMI 5.1ch サラウンド)

に公開

概要

EndeavourOS(Arch Linux)+ Sway 環境で、HDMI 経由の AVアンプ(Onkyo TX-L50)に 5.1ch サラウンドで出力するまでの設定。
デフォルトでは pro-audio プロファイルが選択され、モニタ内蔵スピーカーにステレオ出力されてしまう問題を解決する。

環境

  • OS: EndeavourOS(Arch Linux)
  • WM: Sway(Wayland)
  • GPU: AMD Radeon RX 6800(Navi 21)
  • AVアンプ: Onkyo TX-L50(Dolby Atmos / DTS:X 対応、3.1.2ch 構成)
  • PipeWire: 1.6.5
  • WirePlumber: 1.6.5

問題

  • AVアンプに HDMI 接続しているのにボリュームが極端に小さい、音がこもる
  • 5.1ch サラウンドにならない
  • GUI(pavucontrol)でボリュームが正しく表示されない

原因

HDMI オーディオカード(Navi 21/23 HDMI/DP Audio Controller)のプロファイルが pro-audio に設定されていた。

pro-audio は ALSA デバイスを生のまま個別に露出するモードで:

  • チャンネルマッピングが無い(5.1ch として扱われない)
  • ソフトウェアボリューム制御が無効
  • 出力先がモニタ(EV2750)に向いていた

診断

サービス確認

systemctl --user status pipewire pipewire-pulse wireplumber

3つとも active (running) であることを確認。

カード情報の確認

pactl list cards

重要な確認ポイント:

Active Profile が何になっているか
AVアンプが接続されたポートの iec958.codecs.detected と audio.channels.detected

今回の環境では hdmi-output-3 に AVアンプが接続されており、EDID 経由で以下が取得できていた:

device.product.name = "Sound System"
iec958.codecs.detected = ["PCM","DTS","AC3","MPEG2-AAC","EAC3","TrueHD","DTS-HD"]
audio.channels.detected = "8"
audio.position.detected = "[FL,FR,LFE,FC,RL,RR,SL,SR]"

ハードウェア的には 7.1ch + 主要コーデック全対応。問題はプロファイル選択だけだった。

ルーティング確認

wpctl status

Streams セクションで、アプリの出力先がどのシンクに向いているかを確認できる。

修正

1. プロファイル変更

# 5.1ch
pactl set-card-profile alsa_card.pci-0000_0c_00.1 output:hdmi-surround-extra3

# 7.1ch にする場合
pactl set-card-profile alsa_card.pci-0000_0c_00.1 output:hdmi-surround71-extra3

extra3hdmi-output-3(HDMI 4 ポート)に対応。環境によって番号が異なるので pactl list cards で確認すること。

2. デフォルトシンク変更

# シンク ID を確認
wpctl status

# デフォルトに設定(ID は wpctl status で確認した番号)
wpctl set-default <sink_id>

3. 動作確認

# 6ch スピーカーテスト
speaker-test -t wav -c 6 -l 1



# 8ch の場合
speaker-test -t wav -c 8 -l 1

FL → FR → FC → LFE → RL → RR の順で各スピーカーから音が出ればOK。

永続化

WirePlumber のルールファイルで再起動後もプロファイルとデフォルトシンクを維持する。

mkdir -p ~/.config/wireplumber/wireplumber.conf.d

プロファイル固定

~/.config/wireplumber/wireplumber.conf.d/51-hdmi-avr.conf

monitor.alsa.rules = [
  {
    matches = [
      { device.name = "alsa_card.pci-0000_0c_00.1" }
    ]
    actions = {
      update-props = {
        api.acp.auto-profile = false
        device.profile = "output:hdmi-surround-extra3"
      }
    }
  }
]

デフォルトシンク固定

~/.config/wireplumber/wireplumber.conf.d/52-default-sink.conf

wireplumber.settings = {
  default-audio-sink-name = "alsa_output.pci-0000_0c_00.1.hdmi-surround-extra3"
}

ボリューム制御

コマンドライン

# 現在のボリューム
wpctl get-volume @DEFAULT_AUDIO_SINK@

# 設定(0.0〜1.0)
wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.85

# 増減
wpctl set-volume --limit 1.0 @DEFAULT_AUDIO_SINK@ 5%+
wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-

PC 側は 80〜100% 固定にして、普段の音量は AVアンプのリモコンで調整する方が音質的に有利。ソフトウェアボリュームを絞るとビット深度が落ちる。

Sway キーバインド

デフォルトの amixer は ALSA 直叩きで PipeWire 環境では正しく動作しない。wpctl に置き換える。

bindsym --locked XF86AudioRaiseVolume exec wpctl set-volume --limit 1.0 @DEFAULT_AUDIO_SINK@ 5%+

bindsym --locked XF86AudioLowerVolume exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-

bindsym --locked XF86AudioMute exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle

--locked でロック画面中も音量操作が可能。

Waybar

pulseaudio モジュールは PipeWire の PulseAudio 互換レイヤーで動作するため、モジュール名の変更は不要。

"pulseaudio": {
    "format": "{volume}% 󰕾",
    "scroll-step": 5,
    "on-click": "pwvucontrol"
}

GUI

アプリ 概要 インストール
pwvucontrol PipeWire ネイティブ。GTK4/libadwaita。シンプルで見やすい yay -S pwvucontrol
pavucontrol 定番。GTK4。タブが多くやや複雑 pacman -S pavucontrol
qpwgraph ノード接続のグラフ表示。デバッグ用 pacman -S qpwgraph

pwvucontrol を推奨。プロファイル切替・ボリューム・デバイス選択が1画面で完結する。

AVアンプ側の設定(Onkyo TX-L50)

私の環境ではhdmi出力を経由してOnkyo TX-L50に回しているので本体側の設定項目をみつつ、あわせていく。
Linux 側は PCM マルチチャンネルを送るだけ。チャンネルのスピーカー割り当て(Height 含む)は AVアンプが担当する。

  • Speaker Channels: 3.1.2 等、実際の構成に合わせる
  • Listening Mode: PCM 入力時に Dolby Surround または DTS Neural:X を選択(Height チャンネルが自動生成される)
  • AccuEQ: スピーカー構成変更後は再キャリブレーション推奨

chezmoi で管理

WirePlumber の設定ファイルは chezmoi で管理しておくと、再セットアップ時に再現できる。

chezmoi add ~/.config/wireplumber/wireplumber.conf.d/51-hdmi-avr.conf
chezmoi add ~/.config/wireplumber/wireplumber.conf.d/52-default-sink.conf

参考リンク

Discussion