.TH "pipewire.conf" 5 "1.6.8" "PipeWire" \" -*- nroff -*- .ad l .nh .SH "نام (NAME)" pipewire.conf \- فایل پیکربندی سرور PipeWire .SH "توضیحات (DESCRIPTION)" .PP فایل پیکربندی سرور PipeWire .PP .SH "خلاصه دستور (SYNOPSIS)" .PP .PP \fI$XDG_CONFIG_HOME/pipewire/pipewire\&.conf\fP .PP \fI/etc/pipewire/pipewire\&.conf\fP .PP \fI/usr/share/pipewire/pipewire\&.conf\fP .PP \fI/usr/share/pipewire/pipewire\&.conf\&.d/\fP .PP \fI/etc/pipewire/pipewire\&.conf\&.d/\fP .PP \fI$XDG_CONFIG_HOME/pipewire/pipewire\&.conf\&.d/\fP .PP .SH "توضیحات (DESCRIPTION)" .PP .PP پایپ‌ویر (PipeWire) سرویسی است که اشتراک‌گذاری محتوای چندرسانه‌ای را بین دستگاه‌ها و برنامه‌ها تسهیل می‌کند\&. .PP دیمن در هنگام راه‌اندازی، یک فایل پیکربندی اصلی را برای پیکربندی خود می‌خواند\&. این دیمن مجموعه‌ای از دستورات فهرست‌شده در فایل پیکربندی را اجرا می‌کند\&. .PP فایل پیکربندی به ترتیبی که در بخش \fBخلاصه دستور (SYNOPSIS)\fP آمده است، جستجو می‌شود\&. از متغیرهای محیطی \fRPIPEWIRE_CONFIG_DIR\fP، \fRPIPEWIRE_CONFIG_PREFIX\fP و \fRPIPEWIRE_CONFIG_NAME\fP می‌توان به ترتیب برای تعیین شاخه، زیرشاخه و فایل پیکربندی جایگزین استفاده کرد\&. .PP سایر فایل‌های پیکربندی PipeWire عموماً از همین منطق جستجو پیروی می‌کنند و نام فایل پیکربندی مربوطه جایگزین \fRpipewire\&.conf\fP می‌شود\&. .SH "فایل‌های پیکربندی الحاقی (DROP-IN CONFIGURATION FILES)" .PP تمام فایل‌های \fR*\&.conf\fP در شاخه‌های \fRpipewire\&.conf\&.d/\fP بارگذاری و در پیکربندی ادغام می‌شوند\&. بخش‌های واژه‌نامه‌ای (Dictionary) ادغام شده و ویژگی‌ها را در صورت وجود بازنویسی می‌کنند، و به بخش‌های آرایه‌ای (Array) افزوده می‌شود\&. فایل‌های الحاقی (Drop-in) همان قالب فایل پیکربندی اصلی را دارند، اما فقط شامل تنظیماتی هستند که باید تغییر داده شوند\&. .PP از آنجا که فایل پیکربندی \fRpipewire\&.conf\fP شامل بخش‌های گوناگونی است که باید برای عملکرد صحیح وجود داشته باشند، استفاده از فایل‌های الحاقی برای پیکربندی توصیه می‌شود\&. .PP .SS "مثال (Example)" .PP یک فایل پیکربندی \fR~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf\fP برای تغییر مقدار تنظیم \fRdefault\&.clock\&.min-quantum\fP در \fRpipewire\&.conf\fP: .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.properties = { default\&.clock\&.min\-quantum = 128 } .fi .PP .SH "قالب فایل پیکربندی (CONFIGURATION FILE FORMAT)" .PP فایل پیکربندی در قالب JSON نوع "SPA" است\&. .PP فایل پیکربندی شامل کلیدهای سطح بالا (Top-level) است که همان بخش‌ها هستند\&. مقدار هر بخش یا یک واژه‌نامه (Dictionary)، \fR{ }\fP، یا یک آرایه (Array)، \fR[ ]\fP است\&. اعلان بخش‌ها و آیتم‌های واژه‌نامه به صورت \fRKEY = VALUE\fP بوده و با فاصله از یکدیگر جدا می‌شوند\&. برای مثال: .PP .PP .nf context\&.properties = { # top\-level dictionary section key1 = value # a simple value key2 = { key1 = value1 key2 = value2 } # a dictionary with two entries key3 = [ value1 value2 ] # an array with two entries key4 = [ { k = v1 } { k = v2 } ] # an array of dictionaries } context\&.modules = [ # top\-level array section value1 value2 ] .fi .PP .PP فایل‌های پیکربندی را می‌توان با نحو استاندارد JSON نیز نوشت، اما برای ویرایش دستی آسان‌تر، نگارش آسان‌گیر "SPA" مجاز است\&. در JSON نوع "SPA": .PP .IP "\(bu" 2 کاراکتر \fR:\fP برای جداسازی کلیدها و مقادیر می‌تواند با \fR=\fP یا یک فاصله جایگزین شود\&. .IP "\(bu" 2 علامت \fR"\fP در اطراف کلیدها و رشته‌ها تا زمانی که از نویسه‌های خاص در رشته‌ها استفاده نشده باشد، می‌تواند حذف شود\&. .IP "\(bu" 2 کاراکتر \fR,\fP برای جداسازی اشیاء می‌تواند با یک نویسه فاصله (whitespace) جایگزین شود\&. .IP "\(bu" 2 از \fR#\fP می‌توان برای شروع یک یادداشت (کامنت) تا انتهای خط استفاده کرد\&. .PP .SH "بخش‌های فایل پیکربندی (CONFIGURATION FILE SECTIONS)" .PP \fBcontext\&.properties\fP .RS 4 واژه‌نامه (Dictionary)\&. این ویژگی‌ها نمونه‌ی PipeWire را پیکربندی می‌کنند\&. .RE .PP \fBcontext\&.spa-libs\fP .RS 4 واژه‌نامه (Dictionary)\&. ویژگی‌های افزونه را با الگوهای عمومی (globs) به یک کتابخانه spa نگاشت می‌کند\&. .RE .PP \fBcontext\&.modules\fP .RS 4 آرایه‌ای از واژه‌نامه‌ها\&. هر مدخل در این آرایه یک واژه‌نامه با \fIname\fP ماژول مورد نظر برای بارگذاری است که شامل اختیاری \fIargs\fP و \fIflags\fP نیز می‌شود\&. بیشتر ماژول‌ها از بارگذاری چندباره پشتیبانی می‌کنند\&. .RE .PP \fBcontext\&.objects\fP .RS 4 آرایه‌ای از واژه‌نامه‌ها\&. هر مدخل در این آرایه یک واژه‌نامه شامل \fIfactory\fP برای ایجاد یک شیء و آرگومان‌های اختیاری اضافی مخصوص آن کارخانه است\&. .RE .PP \fBcontext\&.exec\fP .RS 4 آرایه‌ای از واژه‌نامه‌ها\&. هر مدخل در این آرایه یک واژه‌نامه شامل \fIpath\fP برنامه‌ای برای اجرا در هنگام راه‌اندازی و اختیاری \fIargs\fP است\&. .PP این آرایه پیش‌تر شامل مدخلی برای راه‌اندازی مدیر نشست (Session Manager) بود، اما این شیوه اجرا از آن زمان به یک ابزار کمکی برای توسعه تقلیل یافته است\&. از راه‌اندازی مدیر نشست به این شیوه در محیط‌های عملیاتی خودداری کنید\&. .RE .PP .PP \fBnode\&.rules\fP .RS 4 آرایه‌ای از واژه‌نامه‌ها\&. قواعد تطبیق برای تغییر ویژگی‌های گره (Node) در سرور\&. .RE .PP \fBdevice\&.rules\fP .RS 4 آرایه‌ای از واژه‌نامه‌ها\&. قواعد تطبیق برای تغییر ویژگی‌های دستگاه (Device) در سرور\&. .RE .PP .SH "ویژگی‌های زمینه (CONTEXT PROPERTIES)" .PP ویژگی‌های موجود PipeWire در \fRcontext\&.properties\fP و مقادیر پیش‌فرض احتمالی آن‌ها\&. .PP \fBclock\&.power-of-two-quantum = true\fP .RS 4 درخواست‌های کوانتوم از سوی کلاینت‌ها و کوانتوم نهایی گراف به توان‌های عدد دو به پایین گرد می‌شوند\&. کوانتومی که توانی از دو باشد، می‌تواند برای بسیاری از پردازش‌ها کارآمدتر باشد\&. .RE .PP \fBcontext\&.data-loop\&.library\&.name\&.system \fP .RS 4 نام کتابخانه اشتراکی مورد استفاده برای توابع سیستمی در ریسه پردازش داده (Data processing thread)\&. این گزینه معمولاً زمانی تغییر می‌کند که ریسه داده بر روی یک هسته بی‌درنگ (Realtime) مانند EVL اجرا شود\&. .RE .PP \fBloop\&.rt-prio = -1\fP .RS 4 اولویت حلقه‌های داده\&. از حلقه‌های داده برای زمان‌بندی گره‌ها در گراف استفاده می‌شود\&. مقدار -1 از اولویت بی‌درنگ پیش‌فرض module-rt استفاده می‌کند\&. مقدار 0 زمان‌بندی بی‌درنگ را برای حلقه‌های داده غیرفعال می‌کند\&. .RE .PP \fBloop\&.class = [ data\&.rt \&.\&. ]\fP .RS 4 آرایه‌ای از کلاس‌های حلقه‌های داده\&. گره‌ها معمولاً بر اساس نام یا کلاس به یک حلقه اختصاص می‌یابند\&. گره‌ها به طور پیش‌فرض به کلاس data\&.rt اختصاص داده می‌شوند، بنابراین بهتر است یک حلقه داده از این کلاس نیز وجود داشته باشد\&. .RE .PP \fBcontext\&.num-data-loops = 1\fP .RS 4 تعداد حلقه‌های داده برای ایجاد\&. به طور پیش‌فرض ۱ حلقه داده ایجاد شده و تمام گره‌ها در این ریسه زمان‌بندی می‌شوند\&. مقدار 0 حلقه‌های داده بی‌درنگ را غیرفعال کرده و تمام گره‌ها را در ریسه اصلی زمان‌بندی می‌کند\&. مقدار -1 به تعداد هسته‌های CPU ریسه‌های داده ایجاد می‌کند\&. .RE .PP \fBcontext\&.data-loops = [ \&.\&.\&. ]\fP .RS 4 این گزینه حلقه‌های داده‌ای را که برای این زمینه ایجاد می‌شوند کنترل می‌کند\&. این یک آرایه از مشخصات حلقه داده است، یک مدخل برای هر حلقه داده که باید راه‌اندازی شود: .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.data\-loops = [ { #library\&.name\&.system = support/libspa\-support loop\&.rt\-prio = \-1 loop\&.class = [ data\&.rt \&.\&. ] thread\&.name = data\-loop\&.0 thread\&.affinity = [ 0 1 ] } \&.\&.\&. ] .fi .PP یک اولویت مشخص، کلاس‌ها و نام می‌توانند به ترتیب با loop\&.rt-prio، loop\&.class و thread\&.name تعیین شوند\&. همچنین می‌توان حلقه داده را با ویژگی thread\&.affinity به هسته‌های خاصی از CPU متصل (Pin) کرد\&. .RE .PP \fBcore\&.daemon = false\fP .RS 4 فرایند PipeWire که با این پیکربندی آغاز شده است را به یک فرایند دیمن تبدیل می‌کند\&. این بدان معناست که یک گراف را برای کلاینت‌ها مدیریت و زمان‌بندی خواهد کرد\&. همچنین ممکن است بخواهید core\&.name را برای دادن یک نام شناخته‌شده به آن پیکربندی کنید\&. .RE .PP \fBcore\&.name = pipewire-0\fP .RS 4 نام زمینه PipeWire\&. این همچنین نام سوکت PipeWire خواهد بود که کلاینت‌ها می‌توانند به آن متصل شوند\&. .RE .PP \fBcpu\&.zero\&.denormals = false\fP .RS 4 پردازنده (CPU) را پیکربندی می‌کند تا اعداد غیرعادی (denormals) را به طور خودکار صفر کند\&. در صورت فعال بودن، این ویژگی فقط برای ریسه پردازش داده فعال خواهد شد\&. .RE .PP \fBcpu\&.vm\&.name = null\fP .RS 4 این گزینه هنگام ایجاد زمینه به طور خودکار تنظیم می‌شود و حاوی نام ماشین مجازی خواهد بود\&. معمولاً برای نوشتن قواعد تطبیق به منظور تنظیم ویژگی‌های اضافی استفاده می‌شود\&. .RE .PP \fBdefault\&.clock\&.rate = 48000\fP .RS 4 نرخ ساعت پیش‌فرض، مدت زمان بلادرنگ کوانتوم‌های min/max/default را تعیین می‌کند\&. هنگامی که نرخ ساعت پیش‌فرض را تغییر می‌دهید، ممکن است بخواهید کوانتوم‌ها را نیز تغییر دهید تا مدت زمان یکسانی برای کوانتوم‌ها حفظ شود\&. .RE .PP \fBdefault\&.clock\&.allowed-rates = [ ]\fP .RS 4 امکان تعیین حداکثر ۳۲ نرخ نمونه‌برداری جایگزین وجود دارد\&. هنگامی که دستگاه‌ها در حالت آماده‌به‌کار (Idle) باشند، نرخ نمونه‌برداری گراف تغییر داده خواهد شد\&. توجه داشته باشید که در حال حاضر به دلیل مشکلات مختلف در هسته و بلوتوث، این گزینه به طور پیش‌فرض فعال نیست\&. همچنین توجه داشته باشید که مقادیر min/max/default کوانتوم با تغییر نرخ نمونه‌برداری مقیاس‌بندی می‌شوند\&. .RE .PP \fBdefault\&.clock\&.min-quantum = 32\fP .RS 4 حداقل کوانتوم پیش‌فرض\&. .RE .PP \fBdefault\&.clock\&.max-quantum = 8192\fP .RS 4 حداکثر کوانتوم پیش‌فرض\&. .RE .PP \fBdefault\&.clock\&.quantum = 1024\fP .RS 4 کوانتوم پیش‌فرضی که در صورت مشخص نشدن توسط کلاینت استفاده می‌شود\&. .RE .PP \fBdefault\&.clock\&.quantum-limit = 8192\fP .RS 4 حداکثر کوانتومی که باید برای آن فضا رزرو شود\&. این حداکثر اندازه بافر استفاده‌شده در گراف بدون در نظر گرفتن نرخ نمونه‌برداری است\&. .RE .PP \fBdefault\&.clock\&.quantum-floor = 4\fP .RS 4 حداقل کوانتومی که باید برای آن فضا رزرو شود\&. این حداقل اندازه بافر استفاده‌شده در گراف بدون در نظر گرفتن نرخ نمونه‌برداری است\&. .RE .PP \fBdefault\&.video\&.width \fP .RS 4 عرض تصویر پیش‌فرض\&. .RE .PP \fBdefault\&.video\&.height \fP .RS 4 ارتفاع تصویر پیش‌فرض\&. .RE .PP \fBdefault\&.video\&.rate\&.num \fP .RS 4 صورت نرخ فریم تصویر پیش‌فرض\&. .RE .PP \fBdefault\&.video\&.rate\&.denom \fP .RS 4 مخرج نرخ فریم تصویر پیش‌فرض\&. .RE .PP \fBlibrary\&.name\&.system = support/libspa-support\fP .RS 4 نام کتابخانه اشتراکی برای استفاده در توابع سیستمی برای ریسه اصلی\&. .RE .PP \fBlink\&.max-buffers = 64\fP .RS 4 حداکثر تعداد بافرهایی که باید بین گره‌ها مذاکره شود\&. توجه داشته باشید که کلاینت‌های نگارش کمتر از ۳ تنها از ۱۶ بافر پشتیبانی می‌کنند\&. بافرهای بیشتر از نظر تأخیر و حافظه تقریباً همیشه نامطلوب‌تر از بافرهای کمتر است\&. .RE .PP \fBlog\&.level = 2\fP .RS 4 سطح لاگ پیش‌فرض مورد استفاده توسط فرایند\&. .RE .PP \fBmem\&.allow-mlock = true\fP .RS 4 تلاش برای قفل کردن حافظه (mlock) برای فرایندهای بی‌درنگ\&. حافظه قفل‌شده توسط هسته به swap منتقل نمی‌شود و از وقفه در ریسه‌های پردازشی جلوگیری می‌کند\&. .RE .PP \fBmem\&.warn-mlock = false\fP .RS 4 هشدار در صورت عدم موفقیت در قفل کردن حافظه\&. .RE .PP \fBmem\&.mlock-all = false\fP .RS 4 تلاش برای قفل کردن تمام حافظه فعلی و آینده توسط فرایند\&. .RE .PP \fBrlimit\&.nofile = 4096\fP .RS 4 تلاش برای تنظیم محدودیت منابع حداکثر تعداد توصیف‌کننده فایل (File descriptor) برای فرایند\&. مقدار -1 محدودیت را به مقدار بیشینه سخت‌افزاری/سیستمی افزایش می‌دهد\&. محدودیت منابع فایل معمولاً 1024 است و تنها در صورتی باید افزایش یابد که برنامه از فراخوان سیستمی select() استفاده نکند\&. پایپ‌ویر معمولاً از select() استفاده نمی‌کند\&. .RE .PP \fBrlimit\&.*resource* = \fIvalue\fP\fP .RS 4 تنظیم محدودیت‌های منابع\&. \fIresource\fP می‌تواند یکی از موارد زیر باشد: as، core، cpu، data، fsize، locks، memlock، msgqueue، nice، nofile، nproc، rss، rtprio، rttime، sigpending یا stack\&. برای درک مفهوم این منابع، مستندات setrlimit را ببینید\&. مقدار -1 حداکثر محدودیت مجاز را تنظیم می‌کند\&. .RE .PP \fBsettings\&.check-quantum = false\fP .RS 4 بررسی اینکه آیا کوانتوم در به‌روزرسانی فراداده تنظیمات با محدودیت‌های پیکربندی‌شده سازگار است یا خیر\&. .RE .PP \fBsettings\&.check-rate = false\fP .RS 4 بررسی اینکه آیا نرخ در به‌روزرسانی فراداده تنظیمات با محدودیت‌های پیکربندی‌شده سازگار است یا خیر\&. .RE .PP \fBsupport\&.dbus = true\fP .RS 4 فعال‌سازی پشتیبانی از DBus\&. این ویژگی پشتیبانی از DBus را در ماژول‌های مختلف که به آن نیاز دارند فعال می‌کند\&. اگر می‌خواهید پشتیبانی از DBus را به طور سراسری در فرایند غیرفعال کنید، این گزینه را غیرفعال نمایید\&. .RE .PP \fBvm\&.overrides = { default\&.clock\&.min-quantum = 1024 }\fP .RS 4 هر ویژگی در شیء ویژگی vm\&.overrides هنگامی که PipeWire تشخیص دهد در یک ماشین مجازی اجرا می‌شود، ویژگی موجود در context\&.properties را بازنویسی می‌کند\&. این قابلیت منسوخ شده است، به جای آن از context\&.properties\&.rules استفاده کنید\&. .RE .PP \fBcontext\&.modules\&.allow-empty = false\fP .RS 4 به طور پیش‌فرض، هنگامی که هیچ context\&.modules بارگذاری نشده باشد، یک هشدار ثبت می‌شود زیرا این موضوع احتمالاً نشان‌دهنده یک مشکل است\&. برخی از برنامه‌ها ممکن است خودشان ماژول‌ها را بارگذاری کنند و وقتی این ویژگی را true تنظیم کنند، هیچ هشداری ثبت نخواهد شد\&. .RE .PP ویژگی‌های زمینه ممکن است شامل مقادیر سفارشی نیز باشند\&. برای مثال، بخش‌های \fRcontext\&.modules\fP و \fRcontext\&.objects\fP می‌توانند شرایط اضافی را تعریف کنند که کنترل می‌کند آیا یک ماژول یا شیء بسته به ویژگی‌های موجود بارگذاری شود یا خیر\&. .SH "کتابخانه‌های SPA (SPA LIBRARIES)" .PP افزونه‌های SPA بر اساس نام کارخانه (factory-name) بارگذاری می‌شوند\&. این یک نام شناخته‌شده است که ویژگی‌هایی را که افزونه باید داشته باشد به طور منحصربه‌فرد توصیف می‌کند\&. بخش \fRcontext\&.spa-libs\fP نگاشتی بین factory-name و افزونه‌ای که کارخانه در آن یافت می‌شود فراهم می‌کند\&. .PP نام‌های کارخانه می‌توانند شامل نویسه عام (Wildcard) باشند تا چندین کارخانه مرتبط را در یک افزونه گروه‌بندی کنند\&. افزونه از اولین factory-name تطبیق‌یافته بارگذاری می‌شود\&. .PP .SS "مثال (Example)" .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.spa\-libs = { audio\&.convert\&.* = audioconvert/libspa\-audioconvert avb\&.* = avb/libspa\-avb api\&.alsa\&.* = alsa/libspa\-alsa api\&.v4l2\&.* = v4l2/libspa\-v4l2 api\&.libcamera\&.* = libcamera/libspa\-libcamera api\&.bluez5\&.* = bluez5/libspa\-bluez5 api\&.vulkan\&.* = vulkan/libspa\-vulkan api\&.jack\&.* = jack/libspa\-jack support\&.* = support/libspa\-support video\&.convert\&.* = videoconvert/libspa\-videoconvert } .fi .PP .SH "ماژول‌ها (MODULES)" .PP ماژول‌های PipeWire برای بارگذاری\&. \fBlibpipewire-modules(7)\fP را ببینید\&. .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.modules = [ #{ name = MODULENAME # ( args = { KEY = VALUE \&.\&.\&. } ) # ( flags = [ ( ifexists ) ( nofail ) ] ) # ( condition = [ { KEY = VALUE \&.\&.\&. } \&.\&.\&. ] ) #} # ] .fi .PP .PP \fBname\fP .RS 4 نام ماژول برای بارگذاری\&. .RE .PP \fBargs = { }\fP .RS 4 آرگومان‌های ارسال‌شده به ماژول\&. .RE .PP \fBflags = [ ]\fP .RS 4 پرچم‌های بارگذاری\&. \fRifexists\fP برای بارگذاری ماژول تنها در صورت وجود، و \fRnofail\fP برای عدم توقف راه‌اندازی PipeWire در صورت ناموفق بودن بارگذاری ماژول\&. .RE .PP \fBcondition = [ ]\fP .RS 4 یک شرط \fRmatches\fP در \fBقاعده تطبیق (Match rule)\fP\&. ماژول تنها در صورتی بارگذاری می‌شود که یکی از عبارت‌های موجود در آرایه با یک ویژگی زمینه مطابقت داشته باشد\&. .RE .PP .SH "اشیاء زمینه (CONTEXT OBJECTS)" .PP بخش \fRcontext\&.objects\fP به شما امکان می‌دهد اشیائی را از کارخانه‌ها بسازید (که معمولاً با بارگذاری ماژول‌ها در \fRcontext\&.modules\fP ایجاد می‌شوند)\&. .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.objects = [ #{ factory = # ( args = { = \&.\&.\&. } ) # ( flags = [ ( nofail ) ] ) # ( condition = [ { = \&.\&.\&. } \&.\&.\&. ] ) #} ] .fi .PP این بخش می‌تواند برای ساخت گره‌ها یا پیوندها میان گره‌ها استفاده شود\&. .PP \fBfactory\fP .RS 4 نام کارخانه برای ایجاد شیء\&. .RE .PP \fBargs = { }\fP .RS 4 آرگومان‌های ارسال‌شده به کارخانه\&. .RE .PP \fBflags = [ ]\fP .RS 4 پرچم \fRnofail\fP برای عدم توقف راه‌اندازی PipeWire در صورت ناموفق بودن بارگذاری شیء\&. .RE .PP \fBcondition = [ ]\fP .RS 4 یک شرط \fRmatches\fP در \fBقاعده تطبیق (Match rule)\fP\&. شیء تنها در صورتی ایجاد می‌شود که یکی از عبارت‌های موجود در آرایه با یک ویژگی زمینه مطابقت داشته باشد\&. .RE .PP .SS "مثال (Example)" .PP این قطعه کد یک گره گرداننده ساختگی (Dummy driver node) جدید ایجاد می‌کند، اما فقط در صورتی که ویژگی \fRcore\&.daemon\fP مقدار true داشته باشد: .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.objects = [ { factory = spa\-node\-factory args = { factory\&.name = support\&.node\&.driver node\&.name = Dummy\-Driver node\&.group = pipewire\&.dummy priority\&.driver = 20000 }, condition = [ { core\&.daemon = true } ] } ] .fi .PP .SH "اجرای دستور (COMMAND EXECUTION)" .PP از بخش \fRcontext\&.exec\fP می‌توان برای اجرای دستورات دلخواه به عنوان بخشی از مقداردهی اولیه برنامه PipeWire استفاده کرد\&. .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.exec = [ #{ path = # ( args = "" | [ \&.\&.\&. ] ) # ( condition = [ { = \&.\&.\&. } \&.\&.\&. ] ) #} ] .fi .PP .PP \fBpath\fP .RS 4 برنامه برای اجرا\&. .RE .PP \fBargs\fP .RS 4 آرگومان‌های ارسال‌شده به برنامه\&. .RE .PP \fBcondition\fP .RS 4 یک شرط \fRmatches\fP در \fBقاعده تطبیق (Match rule)\fP\&. شیء تنها در صورتی ایجاد می‌شود که یکی از عبارت‌های موجود در آرایه با یک ویژگی زمینه مطابقت داشته باشد\&. .RE .PP .SS "مثال (Example)" .PP قطعه کد زیر یک دستور pactl را با آرگومان‌های داده‌شده اجرا می‌کند: .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.exec = [ { path = "pactl" args = "load\-module module\-always\-sink" } ] .fi .PP .SH "قواعد تطبیق (MATCH RULES)" .PP برخی از بخش‌های فایل پیکربندی شامل قواعد تطبیق هستند\&. این امکان را فراهم می‌کند که هنگام ایجاد یا به‌روزرسانی شیئی (معمولاً یک گره یا جریان) که با ویژگی‌های خاصی مطابقت دارد، عملیاتی انجام شود\&. .PP شیء کلی قواعد از الگوی زیر پیروی می‌کند: .PP .nf = [ { matches = [ # هر یک از مجموعه‌های ویژگی زیر مطابقت داده می‌شوند، # اگر هر کدام تطبیق پیدا کند، عملیات‌ها اجرا می‌شوند { # = # تمام کلیدها باید با مقدار تطبیق داشته باشند. ! نفی می‌کند. ~ آغاز عبارت منظم است. #application\&.process\&.binary = "teams" #application\&.name = "~speech\-dispatcher\&.*" # نبود ویژگی می‌تواند با مقایسه با null آزمایش شود #pipewire\&.sec\&.flatpak = null } { # تطبیق‌های بیشتر در اینجا... } \&.\&.\&. ] actions = { = \&.\&.\&. } } ] .fi .PP قواعد تطبیق یک آرایه از قواعد هستند\&. .PP یک قاعده همواره یک شیء JSON با دو کلید است: matches و actions\&. کلید matches برای تعریف شرایطی که باید برقرار شوند تا قاعده true ارزیابی شود به کار می‌رود، و کلید actions برای تعریف عملیاتی که در صورت ارزیابی قاعده به true انجام می‌شوند استفاده می‌گردد\&. .PP کلید matches همواره یک آرایه JSON از اشیاء است که در آن هر شیء شرطی را تعریف می‌کند که باید برقرار شود\&. هر شرط فهرستی از جفت‌های کلید-مقدار است که در آن کلید، نام ویژگی مورد تطبیق است و مقدار، مقداری است که ویژگی باید داشته باشد\&. در داخل یک شرط، تمام جفت‌های کلید-مقدار با AND منطقی با یکدیگر ترکیب می‌شوند، و تمام شرایط در آرایه matches با OR منطقی ترکیب می‌گردند\&. .PP کلید actions همواره یک شیء JSON است که در آن هر جفت کلید-مقدار، عملیاتی را تعریف می‌کند که هنگام ارزیابی قاعده به true انجام می‌شود\&. نام عملیات مخصوص آن قاعده است و توسط مستندات قاعده تعریف می‌شود، اما در بیشتر موارد عملیات update-props را مشاهده خواهید کرد که برای به‌روزرسانی ویژگی‌های شیء تطبیق‌یافته استفاده می‌شود\&. .PP در آرایه matches، استفاده از عبارات منظم (Regular expressions) برای تطبیق مقادیر ویژگی‌ها نیز امکان‌پذیر است\&. برای مثال، برای تطبیق تمام گره‌هایی که نام آن‌ها با my_ شروع می‌شود، می‌توانید از شرط زیر استفاده کنید: .PP .PP .nf matches = [ { node\&.name = "~my_\&.*" } ] .fi .PP .PP نویسه ~ نشان می‌دهد که مقدار یک عبارت منظم است\&. نحو دقیق عبارات منظم، نحو عبارات منظم توسعه‌یافته POSIX است، همان‌طور که در صفحه راهنمای regex (7) شرح داده شده است\&. .PP علاوه بر عبارات منظم، می‌توانید از نویسه ! برای نفی یک شرط نیز استفاده کنید\&. برای مثال، برای تطبیق تمام گره‌هایی که نام آن‌ها با my_ شروع نمی‌شود، می‌توانید از شرط زیر استفاده کنید: .PP .PP .nf matches = [ { node\&.name = "!~my_\&.*" } ] .fi .PP .PP نویسه ! را می‌توان با یا بدون عبارت منظم استفاده کرد\&. برای مثال، برای تطبیق تمام گره‌هایی که نام آن‌ها برابر با my_node نیست، می‌توانید از شرط زیر استفاده کنید: .PP .PP .nf matches = [ { node\&.name = "!my_node" } ] .fi .PP .PP مقدار null معنای خاصی دارد؛ این مقدار بررسی می‌کند که آیا ویژگی در دسترس نیست (یا تنظیم نشده است)\&. برای بررسی اینکه آیا یک ویژگی تنظیم نشده است: .PP .PP .nf matches = [ { node\&.name = null } ] .fi .PP .PP برای بررسی وجود یک ویژگی، می‌توان از شرط !null استفاده کرد، برای مثال: .PP .PP .nf matches = [ { node\&.name = "!null" } { node\&.name = !null # نحو ساده‌شده } ] .fi .PP برای کار با رشته "null"، باید رشته را گریزدهی (Escape) کرد\&. برای مثال، برای بررسی اینکه آیا یک ویژگی مقدار رشته‌ای "null" دارد، از عبارت زیر استفاده کنید: .PP .PP .nf matches = [ { node\&.name = "null" } ] .fi .PP برای کار با هر مقداری به جز رشته "null"، از عبارت زیر استفاده کنید: .PP .PP .nf matches = [ { node\&.name = "!\\"null\\"" } { node\&.name = !"null" # نحو ساده‌شده } ] .fi .PP .SH "قواعد ویژگی‌های زمینه (CONTEXT PROPERTIES RULES)" .PP از \fRcontext\&.properties\&.rules\fP می‌توان برای به‌روزرسانی پویای ویژگی‌ها بر اساس سایر ویژگی‌ها استفاده کرد\&. .PP یک حالت متداول، به‌روزرسانی تنظیمات سفارشی در هنگام اجرا درون یک ماشین مجازی (VM) است\&. مقدار \fRcpu\&.vm\&.name\fP هنگام اجرا در یک ماشین مجازی به طور خودکار با نام VM تنظیم می‌شود\&. می‌توان یک قاعده تطبیق برای تنظیم ویژگی‌های سفارشی به این صورت نوشت: .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf context\&.properties\&.rules = [ { matches = [ { cpu\&.vm\&.name = !null } ] actions = { update\-props = { # این بازنویسی‌ها فقط هنگام اجرا در یک ماشین مجازی اعمال می‌شوند. default\&.clock\&.min\-quantum = 1024 } } } } .fi .PP .SH "قواعد گره (NODE RULES)" .PP گزینه node\&.rules هر بار که ویژگی‌های یک گره تنظیم یا به‌روزرسانی می‌شوند ارزیابی می‌گردد\&. این ویژگی را می‌توان در سمت سرور برای بازنویسی ویژگی‌های تنظیم‌شده توسط کلاینت روی گره‌های دلخواه استفاده کرد\&. .PP بخش \fRnode\&.rules\fP یک عملیات \fRupdate-props\fP فراهم می‌کند که شیئی شامل ویژگی‌هایی که باید روی شیء گره به‌روزرسانی شوند را دریافت می‌کند\&. .PP یک بخش \fRnode\&.rules\fP را مانند زیر به فایل پیکربندی اضافه کنید: .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf node\&.rules = [ { matches = [ { # تمام کلیدها باید با مقدار تطبیق داشته باشند. ! نفی می‌کند. ~ آغاز عبارت منظم است. client\&.name = "jack_simple_client" } ] actions = { update\-props = { node\&.force\-quantum = 512 } } } ] .fi .PP .PP این کار ویژگی \fRnode\&.force-quantum\fP مربوط به \fRjack_simple_client\fP را به 512 تنظیم می‌کند\&. .SH "قواعد دستگاه (DEVICE RULES)" .PP گزینه device\&.rules هر بار که ویژگی‌های یک دستگاه تنظیم یا به‌روزرسانی می‌شوند ارزیابی می‌گردد\&. این ویژگی را می‌توان در سمت سرور برای بازنویسی ویژگی‌های تنظیم‌شده توسط کلاینت روی دستگاه‌های دلخواه استفاده کرد\&. .PP بخش \fRdevice\&.rules\fP یک عملیات \fRupdate-props\fP فراهم می‌کند که شیئی شامل ویژگی‌هایی که باید روی شیء دستگاه به‌روزرسانی شوند را دریافت می‌کند\&. .PP یک بخش \fRdevice\&.rules\fP را مانند زیر به فایل پیکربندی اضافه کنید: .PP .PP .nf # ~/\&.config/pipewire/pipewire\&.conf\&.d/custom\&.conf device\&.rules = [ { matches = [ { # تمام کلیدها باید با مقدار تطبیق داشته باشند. ! نفی می‌کند. ~ آغاز عبارت منظم است. device\&.name = ""v4l2_device\&.pci\-0000_00_14\&.0\-usb\-0_1\&.2_1\&.0 } ] actions = { update\-props = { device\&.description = "My Webcam" } } } ] .fi .PP .PP این کار ویژگی \fRdevice\&.description\fP دستگاه با \fRdevice\&.name\fP داده‌شده را به "My Webcam" تنظیم می‌کند\&. .PP .SH "نویسندگان (AUTHORS)" .PP .PP توسعه‌دهندگان پایپ‌ویر (The PipeWire Developers) ؛ پایپ‌ویر در در دسترس است\&. .PP .SH "همچنین ببینید (SEE ALSO)" .PP .PP \fBpipewire(1)\fP, \fBpw-mon(1)\fP, \fBlibpipewire-modules(7)\fP \fBpipewire-pulse\&.conf(5)\fP \fBpipewire-client\&.conf(5)\fP