DebianでPipeWireオーディオ出力切り替えスクリプトを設定する方法

Debian 上でスクリプトから PipeWire の出力を切り替える最もシンプルで確実な方法はwpctl、WirePlumber コマンドラインツールを使用することです。まず、対象となる 2 つのシンクノードを特定し、現在のデフォルトシンクを調べ、wpctl set-default IDもう一方のシンクを呼び出します。PipeWire オブジェクト ID はデバイスの切断、再接続、またはセッションの再起動時に変更される可能性があるため、数値のノード ID をハードコーディングするよりもこの方法の方が望ましいです。

このガイドでは、ラップトップのスピーカーと Bluetooth ヘッドホンなど、2 つのデバイスの切り替えを使用し、意図的にロジックを現在の Debian 13 (Trixie) と Debian 12 (Bookworm) の両方と互換性のあるものにしています。2026 年 10 月現在、Debian のパッケージ ページには、Debian 13 では WirePlumber 0.5.8、Debian 12 では 0.4.13 が記載されています。新しい WirePlumber リリースでは追加のリスト機能が提供されていますが、ここで必要な共通項は、、、、ですwpctl status -n。wpctl inspectwpctl set-default

この方法が適している場合

PipeWire が既にデスクトップ オーディオを処理していて、キーボード ショートカット、ランチャー、シェル エイリアス、またはホット キーを使用して 2 つの出力を切り替えたい場合は、この方法を使用します。これは、内蔵のアナログ出力と USB DAC、HDMI モニター、Bluetooth ヘッドセット、または PipeWireのSinksセクションに表示される別のシンクでうまく機能しますwpctl status。

これは、あらゆるルーティング問題に対応できる最適なツールではありません。wpctl set-default自動接続が必要なストリームに使用されるデフォルトのターゲットを変更します。既に実行中のすべてのアプリケーションが既存のストリームを即座に移行することを保証するものではありません。一部のアプリケーションは新しいデフォルト設定に自動的に対応しますが、他のアプリケーションではストリームを個別に移動したり、アプリケーションを再起動したりする必要がある場合があります。

脚本を書く前に

ユーザーレベルの PipeWire および WirePlumber セッションが正常であることを確認してください。公式の WirePlumber ドキュメントでは、デーモンを でチェックすることを推奨していますsystemctl --user status wireplumber。また、pipewire-audioDebian 12 以降では、完全な PipeWire オーディオスタックをセットアップする際に、メタパッケージ を使用することを推奨しています。

systemctl --user status wireplumber
systemctl --user status pipewire pipewire-pulse

が欠落している場合はwpctl、無関係なミキサーユーティリティで代用しようとするのではなく、WirePlumberと通常のPipeWireオーディオコンポーネントをインストールしてください。

sudo apt update
sudo apt install pipewire-audio wireplumber

wpctl.で実行しないでくださいsudo。PipeWire と WirePlumber は通常、デスクトップユーザーのセッションで動作するため、コマンドはそのユーザーのメディアグラフに接続する必要があります。

ステップ1:出力シンク名を見つける

走る:

wpctl status -n

この-nオプションwpctlでは、人間が理解しやすい説明の代わりにオブジェクト名を表示するように指定します。オーディオ → シンクで、切り替えたい 2 つの出力の名前をメモしてください。マシンによっては、 のような内蔵シンクalsa_output.pci-0000_00_1f.3.analog-stereoと、 で始まる Bluetooth シンクが表示される場合がありますbluez_output.。

Debianターミナルでwpctl status -nを実行すると、内蔵のアナログシンクとBluetoothシンクがオーディオシンクの下にリスト表示される。
代表的なターミナルビューwpctl status -n:数値IDをスクリプトにコピーするのではなく、Sinksセクションの下にある安定した名前の断片を識別します。

目的の出力のみに一致する、十分に特徴的なフラグメントを選択してください。内蔵カードの場合は、alsa_output...通常、完全なノード名が適切な選択肢となります。Bluetooth デバイスの場合、通常 1 つの Bluetooth オーディオ シンクが接続されている場合にのみ、短いbluez_output.フラグメントが便利です。複数の Bluetooth 出力を頻繁に接続する場合は、目的のデバイスに固有の長いフラグメントを使用してください。

ステップ2:wpctl inspectでシンクを検証する

スイッチをスクリプト化する前に、以下に示すIDのいずれかを調べてくださいwpctl status -n。

wpctl inspect 45

45をシステム上の現在のIDに置き換えてください。node.nameやなどのプロパティを探してくださいmedia.class。再生出力の場合、media.classはオーディオシンクを識別するはずです。数値IDは検査や即時set-defaultコマンドに役立ちますが、以下のスクリプトは実行されるたびに新しいIDを解決します。

Debianターミナルにwpctl inspectの出力が表示され、node.nameは組み込みのオーディオシンク、media.classはAudio Sinkとなっています。
シンクを検査することで、スクリプトが一致させるノード名を確認でき、再生シンクをソースや無関係な PipeWire オブジェクトと区別するのに役立ちます。

WirePlumberでは、数値IDを知らなくても、現在どのシンクがデフォルトになっているかを問い合わせることもできます。

wpctl inspect @DEFAULT_AUDIO_SINK@

この特別な識別子@DEFAULT_AUDIO_SINK@はWirePlumberによって文書化されており、実行時に現在のデフォルト再生ノードに解決されます。

ステップ3:2つの出力を持つトグルスクリプトを作成する

必要に応じて個人用の実行可能ディレクトリを作成し、スクリプトを開いてください。

mkdir -p ~/.local/bin
nano ~/.local/bin/toggle-audio-output

以下のコードを貼り付け、SINK_AとSINK_Bを自分のwpctl status -n出力からの断片に置き換えてください。

#!/usr/bin/env bash
set -euo pipefail

# Replace these with distinctive fragments from `wpctl status -n`.
SINK_A="alsa_output.pci-0000_00_1f.3.analog-stereo"
SINK_B="bluez_output."

find_sink_id() {
    local needle="$1"
    wpctl status -n | awk -v n="$needle" '
        /Sinks:/   { in_sinks=1; next }
        /Sources:/ { in_sinks=0 }
        in_sinks && index($0, n) {
            for (i=1; i<=NF; i++) {
                if ($i ~ /^[0-9]+\.$/) {
                    gsub(/\./, "", $i)
                    print $i
                    exit
                }
            }
        }'
}

current_name="$(
    wpctl inspect @DEFAULT_AUDIO_SINK@ |
    awk -F'= ' '/node.name/ {
        gsub(/"/, "", $2)
        print $2
        exit
    }'
)"

if [[ "$current_name" == *"$SINK_A"* ]]; then
    target_pattern="$SINK_B"
elif [[ "$current_name" == *"$SINK_B"* ]]; then
    target_pattern="$SINK_A"
else
    # If the current default is neither target, switch to A first.
    target_pattern="$SINK_A"
fi

target_id="$(find_sink_id "$target_pattern")"

if [[ -z "$target_id" ]]; then
    printf 'No available sink matched: %s\n' "$target_pattern" >&2
    exit 1
fi

wpctl set-default "$target_id"
printf 'Default audio sink changed to ID %s\n' "$target_id"
DebianターミナルでNanoエディタを開き、2つのPipeWireシンク名を識別し、wpctlコマンドでデフォルトのシンクを変更するBashスクリプトを表示している。
トグルスクリプトは、シンク名を動的に照合し、現在のデフォルトを決定し、呼び出し前にターゲットの現在のオブジェクトIDを解決する必要がありますwpctl set-default。

スクリプトが毎回IDを解決する理由

PipeWireオブジェクトIDはセッションオブジェクトであるため、IDを45永続的なデバイス識別子として扱うのは不安定です。そのため、スクリプトは代わりに認識可能なノード名の断片を保存し、現在のSinksセクションを解析して、切り替え時にのみ数値IDを抽出します。

現在のデフォルト設定でwpctl inspectを使用する理由

スクリプトは、@DEFAULT_AUDIO_SINK@その名前を要求しますnode.name。これにより、現在選択されているシンクを判断する際に、アスタリスクの視覚的な位置に依存することを回避します。次に、その名前を およびとwpctl status比較します。SINK_ASINK_B

ステップ4:スクリプトを実行可能にしてテストする

ファイルを保存してから、以下を実行してください。

chmod +x ~/.local/bin/toggle-audio-output
~/.local/bin/toggle-audio-output
wpctl status -n

対象のシンクが利用可能な場合、スクリプトは選択した ID を出力します。再度実行すると、設定されている別のシンクが選択されます。または、wpctl status -nを検査して結果を確認してください@DEFAULT_AUDIO_SINK@。

実行可能なオーディオ切り替えスクリプトを実行した後のDebianターミナルで、wpctl statusコマンドを実行すると、Bluetoothシンクがデフォルトの出力として表示されます。
スクリプトの実行後、wpctl status -n意図したシンクがデフォルトになっていることを確認してください。

WirePlumberのドキュメントwpctl set-default IDでは、シンクまたはソースをデフォルトのターゲットとして設定する方法が説明されています。最新のWirePlumberでは、このユーザー選択が記憶され、自動的な優先順位に基づく選択よりも優先される場合があります。後でWirePlumberを自動的なデフォルト選択に戻したい場合は、以下を使用してください。

wpctl clear-default

スクリプトをキーボードショートカットに追加する

端末でのテストが信頼できることを確認したら、/home/YOUR_USER/.local/bin/toggle-audio-outputデスクトップのキーボードショートカットに割り当てます。ショートカットランチャーによってはシェルの省略形が展開されないため、絶対パスを使用してください~。ショートカットのUIはデスクトップ環境によって異なるため、まずは通常のユーザー端末からスクリプトが正しく動作することを確認することが重要です。

ショートカットが実行されてもwpctl接続できないと報告される場合、ランチャーが想定されるユーザーセッション環境を継承していない可能性があります。グラフィカルセッション内のターミナルから同じコマンドを実行して確認し、デスクトップ環境のショートカット実行ルールを確認してください。スクリプトの前に を付けることでこの問題を解決しないでくださいsudo。

よくある故障のトラブルシューティング

「一致するシンクが見つかりませんでした」

ターゲットが切断されているか、ノード名が変更されているか、パターンが細かすぎる可能性があります。wpctl status -n再度実行し、対応する値SINK_AまたはSINK_B値を更新してください。Bluetooth の場合は、スクリプトを実行する前に、ヘッドセットが接続され、オーディオ シンクが公開されていることを確認してください。

スクリプトはデフォルトを切り替えますが、既存の音声は別の場所で再生され続けます。

これは正常な動作です。アップストリームのドキュメントでは、set-default自動接続が必要な新しいストリームのターゲットを選択する際に使用されます。特定のアプリケーションの既存のストリームが古いシンクに残っている場合は、再生を停止して再開するか、アプリケーションを再起動してください。既存のストリームを移行する必要がある場合は、set-defaultそれが保証されていると想定するのではなく、別のルーティングタスクとして処理してください。

間違ったBluetoothデバイスが選択されています

より具体的に記述してくださいSINK_B。 のような一般的なパターンは、bluez_output.一致する Bluetooth シンクが 1 つだけ存在する場合にのみ適しています。複数のワイヤレス出力が同時に接続できる場合は、完全なノード名または一意の中間フラグメントを使用してください。

WirePlumberは実行されていません

チェック:

systemctl --user status wireplumber
journalctl --user -u wireplumber

公式ドキュメントsystemctl --user --now enable wireplumberでは、デーモンがインストールされているものの有効化されていない場合、以下の手順を推奨しています。既に設定済みのDebianデスクトップ環境で、オーディオスタック全体を繰り返し再起動する前に、ユーザーサービスが停止した原因を調査してください。

Debian 12とDebian 13の違いは?

DebianリリースWirePlumberパッケージこのスクリプトの実践的な意味
Debian 12 (Bookworm)標準リポジトリの0.4.13ここに示されている互換性のあるwpctl status -nワークフローを使用してください。inspectset-default
Debian 13 (Trixie)標準リポジトリの0.5.8同じスクリプトは動作します。新しいWirePlumberでは、CLIとJSONベースの設定機能が拡張されています。

WirePlumber 0.5 の設定例を、古い 0.4 のインストール環境にそのままコピーしないでください。WirePlumber 0.5 では設定システムが変更されています。このチュートリアルでは、永続的なポリシーファイルではなくコマンドライン操作を使用することで、バージョン間の境界を回避しています。

簡単な検証チェックリスト

  • systemctl --user status wireplumberセッションマネージャが実行されていることを示します。
  • wpctl status -nシンクの下に、意図された出力の両方を一覧表示します。
  • wpctl inspect @DEFAULT_AUDIO_SINK@有効な現在の再生ノードを返します。
  • この2つのスクリプトパターンは、意図されたシンクを一意に識別します。
  • スクリプトを2回実行すると、2つの出力のうちデフォルトが交互に切り替わります。
  • 既存のアプリケーションが移行されない場合、デフォルト選択とアクティブストリーム移行は別々の動作であることを理解してください。

主要参考文献

コマンドのセマンティクスと現在の WirePlumber の動作については、公式の WirePlumber wpctl マニュアルと公式の WirePlumber 入門ガイドを参照してください。Debian 固有のパッケージとセットアップ情報については、 Debian PipeWire ドキュメント、Debian 12 WirePlumber パッケージページ、およびDebian 13 WirePlumber パッケージページを参照してください。

コメントを残す

Pardus LinuxクライアントをActive Directoryドメインに参加させる方法

Pardus LinuxクライアントをActive Directoryドメインに参加させる方法

Pardus Domain Joinerを使用して、Pardus LinuxをActive Directoryに参加させます。DNSと時刻を確認し、CLIをインストールし、SSSDを使用して参加し、ドメインへのログインアクセスを確認します。

カスタムOS展開のためのPardus Image Creatorの設定方法

カスタムOS展開のためのPardus Image Creatorの設定方法

Pardus Image Writerの機能、インストール方法、検証済みのカスタムISOイメージをUSBメモリに安全に展開する方法について学びましょう。ビルドとテストに関するガイダンスも含まれています。

SLES起動時の「カーネルモジュールのロード開始に失敗しました」エラーを修正する

SLES起動時の「カーネルモジュールのロード開始に失敗しました」エラーを修正する

SLES 上で systemd-modules-load.service の障害が発生した場合、問題のあるモジュールを特定し、ブート構成を修正し、必要な場合にのみ initramfs を再構築することで、障害を診断および修正します。

DebianデスクトップをOSTreeで不変OSに移行する方法

DebianデスクトップをOSTreeで不変OSに移行する方法

1つのパッケージをインストールするだけでDebianをOSTree不変にすることができない理由を学び、その後、安全にOSTreeデスクトップに移行したり、カスタムDebianイメージを計画したりしましょう。

Ubuntu 24.04のWayland環境でタッチパッドジェスチャーが動作しない問題を修正する

Ubuntu 24.04のWayland環境でタッチパッドジェスチャーが動作しない問題を修正する

Ubuntu 24.04 Wayland で、3本指タッチパッドジェスチャーが機能しない問題を修正するには、GNOME の設定、libinput のイベント、アップデート、および拡張機能を確認してください。

DebianでPipeWireオーディオ出力切り替えスクリプトを設定する方法

DebianでPipeWireオーディオ出力切り替えスクリプトを設定する方法

wpctlを使用して、Debian上で信頼性の高いPipeWire出力切り替えスクリプトを作成します。スピーカー、Bluetooth、USB、HDMIなどの出力先を、IDをハードコーディングすることなく切り替えることができます。

HamoniKR OSでCUPSを使用してプリンターを設定する方法

HamoniKR OSでCUPSを使用してプリンターを設定する方法

HamoniKR OS上でCUPSを使用してUSBプリンターとネットワークプリンターを設定します。キューを追加し、ドライバーレスIPPまたはモデルドライバーを選択し、デフォルト設定を行い、テストページを印刷します。

UbuntuでCgroupsを使用してプロセスのCPUとRAMの使用を制限する方法

UbuntuでCgroupsを使用してプロセスのCPUとRAMの使用を制限する方法

Ubuntuでsystemd cgroupsを使用して、コマンドまたはサービスのCPU時間とメモリ使用量を制限します。一時的なスコープ、永続的な制限、および重要なトレードオフを比較してください。

Gooroom OSのUI要素を英語に翻訳する方法

Gooroom OSのUI要素を英語に翻訳する方法

言語サポートが利用可能になったら、Gooroom OSのメニューを英語に切り替えてください。GNOMEの設定手順、Debianのロケールフォールバック、およびトラブルシューティングのチェック手順に従ってください。

Ubuntuでapt-Get Lockがロック/var/lib/dpkg/lock-frontendを取得できない問題を修正

Ubuntuでapt-Get Lockがロック/var/lib/dpkg/lock-frontendを取得できない問題を修正

Ubuntuのapt-get lockエラーを修正する方法を学びましょう。アクティブなパッケージプロセスを確認し、安全に待機し、アップデートが中断された場合にのみdpkgを修復します。