建立一個 PipeWire 輸出切換腳本,用於行動活動音訊

對於 Debian 系統,可以pactl使用 PipeWire 的 PulseAudio 相容伺服器來實現簡單的音訊切換。以下腳本會在兩個已命名的輸出之間切換,設定新的預設輸出,並切換已開啟的播放串流。請將範例輸出名稱替換為您機器上顯示的實際名稱。

1. 確認 PipeWire Pulse 伺服器並找到您的輸出

PipeWire 的pipewire-pulse元件提供了一個與 PulseAudio 相容的伺服器,因此pactl可以使用諸如 PulseAudio 之類的標準工具來控制其音訊輸出(sink)。檢查您的客戶端連接到哪個伺服器,並列出可用的音訊輸出:

pactl info | grep -E 'Server Name|Server Version'
pactl list short sinks

在此過程中,伺服器名稱應包含 PipeWire。輸出清單包含符號名稱,例如 `<output> alsa_output.pci-0000_00_1f.3.analog-stereo`。請準確複製兩個名稱:每個輸出對應一個名稱,以便進行切換。這些名稱特定於連接的硬體和音訊設定檔;請勿從範例複製名稱,也不要使用數位輸出索引,因為該索引在會話期間可能會變更。

如果pactl缺少該pulseaudio-utils客戶端,Debian 會在 中提供。僅在需要時安裝該客戶端軟體包。如果pactl info無法連線或報告了不同的音訊伺服器,請先確認 PipeWire 的 PulseAudio 替代方案是否在您的使用者工作階段中運作;切勿盲目安裝或切換音訊伺服器。

Debian 終端機顯示 pactl info 指令,辨識出 PipeWire,並顯示 pactl list short sinks 指令,其中包含揚聲器和耳機名稱。
在填寫切換腳本之前,請從即時輸出清單複製確切的符號接收器名稱。

2. 建立切換腳本

建立一個使用者專屬的腳本目錄,並開啟一個新檔案:

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

貼上此腳本,並將 `and` 中的值替換SINK_A為SINK_B您複製的名稱:

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

SINK_A='alsa_output.pci-0000_00_1f.3.analog-stereo'
SINK_B='alsa_output.usb-Generic_Headset-00.analog-stereo'

command -v pactl >/dev/null || { echo "pactl is missing" >&2; exit 1; }
server_name=$(pactl info | sed -n 's/^Server Name: //p')
case "$server_name" in
  *PipeWire*) ;;
  *) echo "pactl is not connected to PipeWire's Pulse server" >&2; exit 1 ;;
esac

sinks=$(pactl list short sinks | awk '{print $2}')
for sink in "$SINK_A" "$SINK_B"; do
  if ! grep -Fqx -- "$sink" <<< "$sinks"; then
    printf 'Sink not found: %s\n' "$sink" >&2
    exit 1
  fi
done

current=$(pactl get-default-sink)
if [[ "$current" == "$SINK_A" ]]; then
  target=$SINK_B
else
  target=$SINK_A
fi

pactl set-default-sink "$target"
while IFS= read -r input_id; do
  [[ -n "$input_id" ]] || continue
  pactl move-sink-input "$input_id" "$target"
done < <(pactl list short sink-inputs | awk '{print $1}')
printf 'Default output: %s\n' "$target"

該腳本在進行任何更改之前,會檢查兩個輸出是否都存在。如果目前預設輸出是 `<output>`,則會選擇另一個已配置的輸出SINK_A;如果目前預設輸出是另一個接收器,則會從 `<output>` 開始SINK_A。此set-default-sink指令會影響新建立的音訊串流,而循環move-sink-input則用於路由現有的播放音訊串流。如果您只想讓未來的應用程式使用新的預設輸出,請移除循環while;已在播放的音訊串流將保持在原位。請以擁有 PipeWire 會話的相同已登入桌面使用者身分執行此腳本。請勿使用 `<output>` sudo,因為它可能透過不同的使用者執行時間連接,從而無法控制您的桌面音訊。這些操作在 Debian 的pactl 手冊中有詳細說明。

Nano 編輯器顯示了切換音訊輸出腳本中的兩個接收器變數。
將每個變數設為 pactl 在此 Debian 會話中報告的接收器名稱之一。

3. 儲存、運作並驗證切換

使用 `nano` 儲存Ctrl+O,按 `Ctrl+C` Enter,然後按 `Ctrl+D` 退出Ctrl+X。將腳本標記為可執行檔並運行它:

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

它應該會列印出新的預設輸出裝置。檢查伺服器目前的預設輸出裝置和任何正在播放的串流:

pactl get-default-sink
pactl list short sink-inputs

再次運行腳本即可切換回原來的裝置。為了進行實際的聽力測試,請在切換的同時播放一段簡短的音訊樣本,並確認音訊來自所選設備。特定的裝置名稱和顯示行為會因硬體、藍牙連線狀態和目前音訊設定檔而異。

Debian 終端機顯示切換腳本,選擇 USB 耳機作為預設輸出設備
腳本會報告哪個命名的輸出成為了新的預設值。
終端驗證顯示,pactl get-default-sink 指令傳回了耳機名稱和一個列出的播放串流。
確認預設接收器,並檢查活動流是否已路由到所選輸出。

當腳本沒有切換音訊時

  • “未找到接收器”:請重新運作pactl list short sinks。耳機斷開連接或設定檔變更可能導致接收器名稱變更;請更新符合的變數。
  • 無法連線:請檢查 PipeWire 使用者服務是否正在執行,並pactl info確認 PipeWire Pulse 伺服器。 Debian 的pipewire-pulse 軟體包提供了該替代伺服器,而pulseaudio-utils 軟體包則包含pactl客戶端。
  • 新的音訊串流已傳輸,但目前應用程式未傳輸:請在音訊串流可見的情況下重新執行腳本pactl list short sink-inputs。某些應用程式會重新開啟音訊串流或保留其自身的裝置選擇,因此如果應用程式仍鎖定在某個輸出裝置上,請在該應用程式中選擇「預設」。

PipeWire 的Protocol Pulse 文件解釋了為什麼當 PipeWire 是活動伺服器時,PulseAudio 命令列用戶端可以控制 PipeWire pipewire-pulse。此腳本利用了該相容層;它不會配置硬體配置文件,也不會保證斷開連接的設備可用。

留下評論

建立一個 PipeWire 輸出切換腳本,用於行動活動音訊

建立一個 PipeWire 輸出切換腳本,用於行動活動音訊

使用 pactl 腳本在指定的 PipeWire 輸出之間切換 Debian 音頻,腳本會更新預設接收器並重新路由正在播放的串流。

恢復 Ubuntu 24.04 上的藍牙耳機麥克風輸入

恢復 Ubuntu 24.04 上的藍牙耳機麥克風輸入

選擇正確的輸入來源,使用免持音訊設定文件,並檢查 Ubuntu 的 PipeWire 路由,即可使您的藍牙耳機麥克風正常運作。

修復 Ubuntu 24.04 中 Flatpak 應用不遵循 GTK 主題的問題

修復 Ubuntu 24.04 中 Flatpak 應用不遵循 GTK 主題的問題

了解為什麼 Flatpak 應用可能會忽略 Ubuntu 24.04 GTK 主題,並按照安全步驟檢查主題擴充、刷新 Flatpak 應用程式以及診斷入口網站問題。

How to Dual-Boot Ubuntu 24.04 and Windows 11 With BitLocker Enabled

How to Dual-Boot Ubuntu 24.04 and Windows 11 With BitLocker Enabled

Install Ubuntu 24.04 alongside Windows 11 with BitLocker safely. Compare separate-drive and shared-drive paths, recovery keys, partitioning, and boot checks.

如何解決 Ubuntu 核心更新後 Nvidia 驅動程式無法載入的問題

如何解決 Ubuntu 核心更新後 Nvidia 驅動程式無法載入的問題

診斷 Ubuntu 核心更新後 NVIDIA 驅動程式故障。檢查 DKMS 和安全啟動,重建匹配的模組,註冊 MOK,並驗證修復效果。

如何修復 Ubuntu 24.04 系統睡眠後 Wi-Fi 斷開連線的問題

如何修復 Ubuntu 24.04 系統睡眠後 Wi-Fi 斷開連線的問題

修復 Ubuntu 24.04 系統掛起後 Wi-Fi 斷開的問題,檢查 NetworkManager、無線電模組、更新、省電模式和驅動程序,然後驗證每次恢復操作。

修復 Ubuntu GNOME 中 Tracker-Miner-3 導致的 CPU 使用率過高問題

修復 Ubuntu GNOME 中 Tracker-Miner-3 導致的 CPU 使用率過高問題

了解為什麼 tracker-miner-fs-3 在 Ubuntu GNOME 中佔用大量 CPU,以及如何檢查索引、排除資料夾、更新 Ubuntu 或安全地重建搜尋索引。

修正在 UEFI 上安裝 Debian 後出現的「找不到可啟動裝置」錯誤

修正在 UEFI 上安裝 Debian 後出現的「找不到可啟動裝置」錯誤

透過檢查啟動模式、EFI 系統分割區、GRUB 檔案和韌體啟動順序來修復 Debian 的 UEFI 啟動錯誤,而無需先重新安裝 Debian。

解決 Windows 11 更新錯誤 0x800f0922

解決 Windows 11 更新錯誤 0x800f0922

遇到 Windows 11 更新錯誤 0x800f0922?了解已驗證的有效解決方法,快速解決此常見問題。逐步指南,幫助您輕鬆完成更新,告別煩惱。

如何修復 Windows 11 系統還原錯誤 0x80070005

如何修復 Windows 11 系統還原錯誤 0x80070005

遇到 Windows 11 系統還原錯誤 0x80070005 ?我們提供經過驗證的分步解決方案,幫助您輕鬆修復訪問被拒絕問題,並順利恢復系統。無需任何技術知識!