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 パッケージページを参照してください。

コメントを残す

失われたパーティションとハードディスクデータを安全に復元する方法

失われたパーティションとハードディスクデータを安全に復元する方法

TestDiskとPhotoRecを使って、失われたパーティションやファイルを復元する方法を学びましょう。ソースドライブを保護し、安全にスキャンを行い、復元したデータを別のディスクに保存します。

LinuxデスクトップでQRコードをスキャンする方法

LinuxデスクトップでQRコードをスキャンする方法

CoBangを使えば、Webカメラまたは画像ファイルでLinux上でQRコードをスキャンできます。インストールオプション、セットアップ手順、Flatpakカメラへのアクセスに関する修正方法については、こちらをご覧ください。

Cameractrlsを使ってLinuxでウェブカメラの設定を変更する方法

Cameractrlsを使ってLinuxでウェブカメラの設定を変更する方法

Cameractrlsを使用してLinux上でウェブカメラの設定を変更しましょう。露出、色、フリッカー低減などのサポートされているコントロールを調整し、互換性のあるビデオモードを確認できます。

LinuxにPhpStormをインストールする方法:ツールボックス、Tar.gz、Snap、およびAUR

LinuxにPhpStormをインストールする方法:ツールボックス、Tar.gz、Snap、およびAUR

LinuxにPhpStormをインストールするには、JetBrains Toolboxを使用するか、スタンドアロンのtar.gzアーカイブを使用するか、SnapおよびArch AURオプションを選択してください。Javaは既にバンドルされています。

LinuxにCisco Packet Tracerをインストールする方法

LinuxにCisco Packet Tracerをインストールする方法

Cisco Packet Tracer 9.0.1 を Ubuntu 64 ビット版にダウンロードし、APT を使用して DEB パッケージをインストールし、ターミナルでライセンスに同意してサインインすると、ラボを開始できます。

LinuxでCD-ROMをISOイメージとしてバックアップする方法

LinuxでCD-ROMをISOイメージとしてバックアップする方法

Linux上でGNOME Disksまたはddコマンドを使用してCD-ROM ISOイメージを作成します。光学ドライブを識別し、コピーを監視し、イメージを検証し、破損したディスクやオーディオディスクに別のツールが必要な場合を把握できます。

XFCE 4でデュアルパネルを設定する方法

XFCE 4でデュアルパネルを設定する方法

各ディスプレイごとに個別のXFCE 4パネルを作成し、2番目のパネルを右側の出力に割り当て、位置とサイズを調整し、必要なランチャーとステータス項目を追加します。

LinuxでGIMPを使って画像を切り抜く方法

LinuxでGIMPを使って画像を切り抜く方法

LinuxでGIMPを使って写真の背景を削除する方法:被写体をトレースし、選択した背景を削除し、透明度を保持して、再利用可能なPNG形式でエクスポートします。

FlightGearを無料でダウンロード:公式インストールガイド

FlightGearを無料でダウンロード:公式インストールガイド

FlightGearは公式サイトから無料でダウンロードできます。Windows、macOS、Linuxの各パッケージを比較し、データファイルをインストールして、最初のフライトを開始しましょう。

OKSampler:キーボードビートのための無料かつシンプルな音楽サンプラー

OKSampler:キーボードビートのための無料かつシンプルな音楽サンプラー

OKSamplerはMP3クリップをキーボードのキーにマッピングし、音声をループ再生できます。この旧型フリーウェアの機能、旧機能が失われた箇所、ダウンロード前に確認すべき点について解説します。