كيفية إعداد برنامج نصي لتبديل مخرجات الصوت في PipeWire على نظام Debian

أسهل طريقة موثوقة لتغيير مخرجات PipeWire من خلال سكربت على نظام Debian هي استخدام wpctlأداة سطر الأوامر WirePlumber: حدد عقدتي الإخراج المطلوبتين، وافحص عقدة الإخراج الافتراضية الحالية، ثم استدعِ wpctl set-default IDالعقدة الأخرى. يُفضّل هذا على تحديد مُعرّف عقدة رقمي ثابت، لأن مُعرّفات كائنات PipeWire قد تتغير عند انقطاع اتصال الأجهزة أو إعادة اتصالها أو إعادة تشغيل الجلسة.

يستخدم هذا الدليل مفتاح تبديل ثنائي الأجهزة - على سبيل المثال، مكبرات صوت الكمبيوتر المحمول وسماعات بلوتوث - ويحرص على أن يكون المنطق متوافقًا مع كلٍ من دبيان 13 (تريكسي) ودبيان 12 (بوكوورم) الحاليين. اعتبارًا من أكتوبر 2026، تُدرج صفحات حزم دبيان برنامج WirePlumber 0.5.8 في دبيان 13 و0.4.13 في دبيان 12. توفر إصدارات WirePlumber الأحدث ميزات إضافية لعرض القوائم، ولكن الإصدارات 0.5.8 wpctl status -nو wpctl inspect0.4.13 wpctl set-defaultهي العامل المشترك المطلوب هنا.

عندما تكون هذه الطريقة مناسبة

استخدم هذه الطريقة عندما يكون برنامج PipeWire يتعامل بالفعل مع صوت سطح المكتب وتريد اختصارًا للوحة المفاتيح، أو مشغلًا، أو اسمًا مستعارًا في سطر الأوامر، أو مفتاحًا سريعًا للتبديل بين مخرجين. وهي مناسبة لمخرج تناظري مدمج بالإضافة إلى محول صوت رقمي تناظري USB، أو شاشة HDMI، أو سماعة بلوتوث، أو أي مخرج آخر يظهر ضمن قسم "المخارجwpctl status " .

ليست هذه الأداة المناسبة لكل مشكلة توجيه. wpctl set-defaultفهي تُغيّر الوجهة الافتراضية المستخدمة للتدفقات التي تتطلب اتصالاً تلقائياً. ولا تضمن أن كل تطبيق قيد التشغيل سينقل تدفقه الحالي فوراً. فبعض التطبيقات تتبع الإعداد الافتراضي الجديد تلقائياً، بينما قد تحتاج تطبيقات أخرى إلى نقل تدفقها بشكل منفصل أو إعادة تشغيل التطبيق.

قبل أن تكتب السيناريو

تأكد من سلامة جلسة PipeWire وWirePlumber على مستوى المستخدم. توصي وثائق WirePlumber الرسمية بفحص البرنامج الخفي باستخدام الأمر المناسب systemctl --user status wireplumber. كما توصي دبيان pipewire-audioبتثبيت الحزمة الشاملة على دبيان 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أسماء العناصر بدلاً من أوصاف سهلة الفهم. ضمن قسم الصوت ← المخارج ، لاحظ أسماء المخرجين اللذين تريد تبديلهما. قد يعرض الجهاز مخرجًا مدمجًا يشبه ، alsa_output.pci-0000_00_1f.3.analog-stereoومخرج بلوتوث يبدأ بـ bluez_output..

يعرض طرفية دبيان الأمر wpctl status -n مع وجود مخرج تناظري مدمج ومخرج بلوتوث مدرجين ضمن مخارج الصوت
عرض طرفي نموذجي لـ wpctl status -n: تحديد أجزاء الأسماء الثابتة ضمن قسم Sinks بدلاً من نسخ المعرفات الرقمية إلى البرنامج النصي.

اختر جزءًا مميزًا بما يكفي ليطابق المخرج المقصود فقط. بالنسبة لبطاقة مدمجة، alsa_output...يُعد اسم العقدة الكامل خيارًا مناسبًا في العادة. أما بالنسبة لجهاز بلوتوث، فإن استخدام bluez_output.جزء أقصر يكون مناسبًا فقط إذا كنت تستخدم عادةً مخرج صوت بلوتوث واحدًا. إذا كنت تقوم بتوصيل عدة مخارج بلوتوث بشكل متكرر، فاستخدم جزءًا أطول خاصًا بالجهاز المقصود.

الخطوة الثانية: التحقق من وجود حوض غسيل باستخدام أداة wpctl inspect

قبل كتابة برنامج التبديل، افحص أحد المعرفات المعروضة بواسطة wpctl status -n:

wpctl inspect 45

استبدل 45المعرّف الحالي على نظامك. ابحث عن خصائص مثل node.nameو media.class. بالنسبة لمخرج التشغيل، media.classيجب أن يُحدد مُخرج الصوت. يُفيد المعرّف الرقمي في الفحص وللأمر الفوري set-default، لكن البرنامج النصي أدناه يُحدد معرّفًا جديدًا في كل مرة يُشغّل فيها.

طرفية دبيان تعرض مخرجات الأمر wpctl inspect مع اسم العقدة (node.name) لمخرج الصوت المدمج وفئة الوسائط (media.class) لمخرج الصوت
يؤكد فحص وحدة الإخراج اسم العقدة التي سيتطابق معها البرنامج النصي ويساعد في تمييز وحدة إخراج التشغيل عن مصدر أو كائن PipeWire غير ذي صلة.

يمكنك أيضًا سؤال WirePlumber عن المصرف الافتراضي الحالي دون معرفة معرّفه الرقمي:

wpctl inspect @DEFAULT_AUDIO_SINK@

تم توثيق المعرف الخاص @DEFAULT_AUDIO_SINK@بواسطة WirePlumber ويتم حله في وقت التشغيل إلى عقدة التشغيل الافتراضية الحالية.

الخطوة 3: إنشاء برنامج نصي للتبديل بين مخرجين

أنشئ مجلدًا تنفيذيًا شخصيًا إذا لزم الأمر، ثم افتح البرنامج النصي:

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"
محرر نانو في طرفية ديبيان يعرض نص باش برمجي يحدد اسميْ مُستقبِلَيْ PipeWire ويغير المُستقبِل الافتراضي باستخدام wpctl
يجب أن يقوم البرنامج النصي للتبديل بمطابقة أسماء الوجهات ديناميكيًا، وتحديد القيمة الافتراضية الحالية، وحل معرف الكائن الحالي للهدف قبل استدعاء wpctl set-default.

لماذا يقوم البرنامج النصي بحل المعرفات في كل مرة؟

تُعدّ معرّفات كائنات PipeWire كائنات جلسة، لذا فإنّ التعامل مع معرّف كهذا 45كمعرّف جهاز دائم أمرٌ غير موثوق. يقوم البرنامج النصي بتخزين أجزاء من اسم العقدة يمكن التعرّف عليها، ويحلّل قسم Sinks الحالي، ويستخرج المعرّف الرقمي فقط عند لحظة التبديل.

لماذا يستخدم wpctl inspect للوضع الافتراضي الحالي

يطلب البرنامج النصي @DEFAULT_AUDIO_SINK@اسم الحوض node.name. هذا يتجنب الاعتماد على الموضع المرئي لعلامة النجمة wpctl statusعند تحديد الحوض المحدد حاليًا. ثم يقارن هذا الاسم مع اسم الحوض SINK_Aالحالي SINK_B.

الخطوة الرابعة: اجعل البرنامج النصي قابلاً للتنفيذ واختبره

احفظ الملف، ثم قم بتشغيله:

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

إذا كان منفذ الإخراج المستهدف متاحًا، فسيطبع البرنامج النصي المعرّف الذي اختاره. أعد تشغيله وسيختار منفذ الإخراج الآخر المُهيأ. تأكد من النتيجة باستخدام wpctl status -nأو بفحص @DEFAULT_AUDIO_SINK@.

طرفية دبيان بعد تشغيل برنامج نصي قابل للتنفيذ لتبديل الصوت، مع عرض حالة wpctl لجهاز Bluetooth كمخرج افتراضي
بعد تشغيل البرنامج النصي، تحقق wpctl status -nللتأكد من أن المصرف المقصود أصبح الآن هو المصرف الافتراضي.

تُشير وثائق WirePlumber wpctl set-default IDإلى إمكانية تعيين وجهة افتراضية (مصدر أو وجهة) كموقع افتراضي. في الإصدارات الحديثة من WirePlumber، يتم حفظ هذا الاختيار من قِبل المستخدم، وقد يُعطي أولوية أعلى من الاختيار التلقائي القائم على الأولوية. إذا كنت ترغب لاحقًا في أن يعود WirePlumber إلى الاختيار التلقائي الافتراضي، فاستخدم ما يلي:

wpctl clear-default

أضف البرنامج النصي إلى اختصار لوحة المفاتيح

بعد التأكد من موثوقية اختبار الطرفية، اربط /home/YOUR_USER/.local/bin/toggle-audio-outputالبرنامج النصي باختصار لوحة مفاتيح على سطح المكتب. استخدم المسار الكامل بدلاً من ~اختصارات لوحة المفاتيح، لأن بعض مشغلات الاختصارات لا تدعم اختصارات سطر الأوامر. تختلف واجهة المستخدم الخاصة بالاختصار باختلاف بيئة سطح المكتب، لذا فإن الاختبار الأهم هو التأكد من عمل البرنامج النصي بشكل صحيح من طرفية مستخدم عادية أولاً.

إذا تم تشغيل اختصار ولكنه wpctlأبلغ عن عدم إمكانية الاتصال، فقد لا يكون المشغل يرث بيئة جلسة المستخدم المتوقعة. تحقق من الأمر نفسه من خلال طرفية داخل الجلسة الرسومية، ثم راجع قواعد تنفيذ الاختصارات في بيئة سطح المكتب. لا تحل هذه المشكلة بإضافة بادئة إلى البرنامج النصي sudo.

استكشاف الأخطاء وإصلاحها في حالات الأعطال الشائعة

"لا يوجد حوض غسيل مطابق متوفر"

ربما يكون الجهاز المستهدف غير متصل، أو تم تغيير اسم عقدته، أو أن نمطك مُحدد للغاية. أعد تشغيل البرنامج wpctl status -nوقم بتحديث القيمة المناسبة SINK_A. SINK_Bبالنسبة لتقنية البلوتوث، تأكد من توصيل سماعة الرأس وأنها تُوفر منفذًا صوتيًا قبل تشغيل البرنامج النصي.

يقوم البرنامج النصي بتغيير الإعداد الافتراضي، لكن الصوت الحالي يستمر في التشغيل في مكان آخر.

قد يكون هذا طبيعيًا. توضح وثائق المصدر set-defaultأن تحديد الوجهة للبث الجديد الذي يتطلب اتصالًا تلقائيًا هو عملية اختيار الوجهة. إذا بقي بث تطبيق معين على الوجهة القديمة، فأوقف التشغيل وأعد تشغيله أو أعد فتح التطبيق. إذا كنت بحاجة تحديدًا إلى نقل البث الحالي، فتعامل مع ذلك كمهمة توجيه منفصلة بدلًا من افتراض أن set-defaultذلك يضمنه.

تم تحديد جهاز بلوتوث خاطئ

حدّد SINK_Bالتفاصيل بدقة أكبر. يُناسب النمط العام bluez_output.فقط وجود جهاز استقبال بلوتوث واحد متوافق. استخدم اسم العقدة الكامل أو جزءًا وسيطًا فريدًا عند إمكانية توصيل عدة مخارج لاسلكية في آنٍ واحد.

برنامج WirePlumber لا يعمل

يفحص:

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

توصي الوثائق الأصلية بذلك systemctl --user --now enable wireplumberعند تثبيت البرنامج الخفي دون تفعيله. على جهاز سطح مكتب Debian مُهيأ مسبقًا، تحقق من سبب توقف خدمة المستخدم قبل إعادة تشغيل حزمة الصوت بالكامل بشكل متكرر.

دبيان 12 مقابل دبيان 13: ما هي التغييرات؟

إصدار دبيانحزمة WirePlumberالآثار العملية لهذا النص
ديبيان 12 (دودة الكتب)0.4.13 في المستودع القياسياستخدم سير العمل المتوافق wpctl status -nوالموضح inspectهنا set-default.
ديبيان 13 (تريكسي)0.5.8 في المستودع القياسييعمل نفس البرنامج النصي؛ كما أن الإصدار الأحدث من WirePlumber يحتوي على واجهة سطر أوامر موسعة وسلوك تكوين قائم على JSON.

لا تقم بنسخ أمثلة تكوين WirePlumber 0.5 بشكل أعمى إلى تثبيت أقدم من الإصدار 0.4. لقد غيّر WirePlumber 0.5 نظام التكوين الخاص به؛ ويتجنب هذا الدليل هذا القيد الإصداري باستخدام عمليات سطر الأوامر بدلاً من ملفات السياسة الدائمة.

قائمة التحقق السريع

  • systemctl --user status wireplumberيُظهر مدير الجلسة قيد التشغيل.
  • wpctl status -nيسرد كلا المخرجين المقصودين تحت قسم "المصارف".
  • wpctl inspect @DEFAULT_AUDIO_SINK@يُعيد عقدة تشغيل حالية صالحة.
  • يحدد نمطا الكتابة بشكل فريد الأحواض المقصودة.
  • يؤدي تشغيل البرنامج النصي مرتين إلى التبديل بين المخرجات الافتراضية.
  • إذا لم يتم نقل تطبيق موجود، فأنت تدرك أن التحديد الافتراضي وترحيل التدفق النشط هما سلوكان منفصلان.

المراجع الأساسية

للاطلاع على دلالات الأوامر وسلوك WirePlumber الحالي، راجع دليل wpctl الرسمي لـ WirePlumber ودليل بدء استخدام WirePlumber الرسمي . وللحصول على معلومات خاصة بحزمة Debian وإعداداتها، استخدم وثائق Debian PipeWire ، وصفحة حزمة WirePlumber الخاصة بـ Debian 12 ، وصفحة حزمة WirePlumber الخاصة بـ Debian 13 .

اترك تعليقاً

حمّل لعبة FlightGear مجاناً: دليل التثبيت الرسمي

حمّل لعبة FlightGear مجاناً: دليل التثبيت الرسمي

حمّل برنامج FlightGear مجاناً من الموقع الرسمي. قارن بين حزم Windows و macOS و Linux، وثبّت ملفات البيانات، وابدأ رحلتك الأولى.

أو كي سامبلر: برنامج مجاني وبسيط لأخذ عينات موسيقية لإيقاعات لوحة المفاتيح

أو كي سامبلر: برنامج مجاني وبسيط لأخذ عينات موسيقية لإيقاعات لوحة المفاتيح

يقوم برنامج OKSampler بربط مقاطع MP3 بمفاتيح لوحة المفاتيح، كما يتيح تكرار الصوت. تعرّف على وظائف هذا البرنامج المجاني القديم، وحدود ميزاته القديمة، وما يجب التحقق منه قبل التنزيل.

تطبيق مهام جوجل لسطح المكتب: كيفية استخدامه على الكمبيوتر

تطبيق مهام جوجل لسطح المكتب: كيفية استخدامه على الكمبيوتر

افتح مهام جوجل في متصفح، وأضف اختصارًا لمتصفح كروم أو قم بتشغيلها على غرار التطبيقات، وقم بإدارة المهام المؤرخة من خلال التقويم وجيميل.

كيفية لعب لعبة Don't Starve Together على نظام لينكس

كيفية لعب لعبة Don't Starve Together على نظام لينكس

قم بتثبيت نسخة لينكس من لعبة Don't Starve Together عبر Steam، وابدأ عالمًا جديدًا، أو انضم إلى أصدقائك باتباع خطوات الإعداد واستكشاف الأخطاء وإصلاحها هذه.

كيفية تشغيل لعبة Squad على نظام Linux باستخدام Steam Proton

كيفية تشغيل لعبة Squad على نظام Linux باستخدام Steam Proton

قم بإعداد Squad على نظام Linux باستخدام Steam Play و Proton، ثم قم بتثبيت اللعبة، واختر أداة التوافق، وقم باستكشاف مشكلات مكافحة الغش وإصلاحها.

كيفية تثبيت نظام لينكس منت ديبيان الإصدار الخامس "إلسي" من خلال USB

كيفية تثبيت نظام لينكس منت ديبيان الإصدار الخامس "إلسي" من خلال USB

قم بتنزيل ملف LMDE 5 ISO المؤرشف والتحقق منه، ثم أنشئ قرص USB قابلًا للإقلاع، واختر إعدادات التثبيت الآمنة. انتهى دعم Elsie؛ راجع إصدار LMDE الحالي.

كيفية إنشاء قرص USB قابل للتشغيل لنظام التشغيل Windows 11 على نظام Linux

كيفية إنشاء قرص USB قابل للتشغيل لنظام التشغيل Windows 11 على نظام Linux

قم بإنشاء قرص USB لتثبيت نظام التشغيل Windows 11 على نظام Linux باستخدام Ventoy: احصل على ملف ISO الرسمي، وقم بتثبيت Ventoy بأمان، وانسخ الصورة، وقم بتشغيل جهاز الكمبيوتر المستهدف.

كيفية تشغيل لعبة It Takes Two على نظام لينكس باستخدام Steam Proton

كيفية تشغيل لعبة It Takes Two على نظام لينكس باستخدام Steam Proton

تعلم كيفية تشغيل لعبة It Takes Two على نظام Linux باستخدام Steam Proton، وتثبيت إصدار Steam، وتمكين التوافق، وإعداد وضع اللعب التعاوني، وحل مشاكل التشغيل.

كيفية تثبيت برنامج Wireshark على أنظمة Linux: أوبونتو، فيدورا، آرتش، وغيرها

كيفية تثبيت برنامج Wireshark على أنظمة Linux: أوبونتو، فيدورا، آرتش، وغيرها

قم بتثبيت Wireshark على Ubuntu أو Debian أو Fedora أو Arch أو openSUSE باستخدام أوامر الحزمة الحالية، ثم قم بتكوين التقاط الحزم المباشر بأمان.

كيفية لعب Slay the Spire على نظام Linux: قم بتثبيته وتشغيله باستخدام Steam

كيفية لعب Slay the Spire على نظام Linux: قم بتثبيته وتشغيله باستخدام Steam

قم بتثبيت Steam على نظام Linux، ثم احصل على نسخة Slay the Spire الأصلية لنظام Linux من مكتبتك، وقم بتشغيلها. يتضمن ذلك خطوات عملية لحل مشاكل بدء التشغيل الشائعة.