pipewire-jack.conf(5) File Formats Manual pipewire-jack.conf(5)

pipewire-jack.conf - فایل پیکربندی کلاینت‌های JACK در PipeWire

فایل پیکربندی کلاینت JACK در PipeWire.

$XDG_CONFIG_HOME/pipewire/jack.conf

/etc/pipewire/jack.conf

/usr/share/pipewire/jack.conf

/usr/share/pipewire/jack.conf.d/

/etc/pipewire/jack.conf.d/

$XDG_CONFIG_HOME/pipewire/jack.conf.d/

پیکربندی برای کلاینت‌های PipeWire JACK.

قالب فایل پیکربندی و منطق جستجو و اولویت‌بندی فایل‌ها همانند pipewire.conf(5) است.

فایل‌های پیکربندی افزونه‌ای (Drop-in) به صورت jack.conf.d/*.conf می‌توانند استفاده شوند و استفاده از آن‌ها توصیه می‌شود. به pipewire.conf(5) مراجعه کنید.

jack.properties

پیکربندی کلاینت JACK.

jack.rules

قوانین تطبیق (match rules) کلاینت JACK.

علاوه بر این، بخش‌های پیکربندی زمینه (context) PipeWire نیز ممکن است مشخص شوند، به pipewire.conf(5) مراجعه کنید.

فایل پیکربندی می‌تواند شامل یک بخش اختصاصی برای JACK به نام jack.properties باشد، مانند نمونه زیر:

# ~/.config/pipewire/jack.conf.d/custom.conf
jack.properties = {
    #rt.prio             = 88
    #node.latency        = 1024/48000
    #node.lock-quantum   = true
    #node.force-quantum  = 0
    #jack.show-monitor   = true
    #jack.merge-monitor  = true
    #jack.show-midi      = true
    #jack.short-name     = false
    #jack.filter-name    = false
    #jack.filter-char    = " "
    #
    # allow:           Don't restrict self connect requests
    # fail-external:   Fail self connect requests to external ports only
    # ignore-external: Ignore self connect requests to external ports only
    # fail-all:        Fail all self connect requests
    # ignore-all:      Ignore all self connect requests
    #jack.self-connect-mode  = allow
    #jack.locked-process     = true
    #jack.default-as-system  = false
    #jack.fix-midi-events    = true
    #jack.global-buffer-size = false
    #jack.passive-links      = false
    #jack.max-client-ports   = 768
    #jack.fill-aliases       = false
    #jack.writable-input     = false
    #jack.flag-midi2         = false
}

برای توضیحات درباره ویژگی‌های عمومی گره، بخش stream.properties در pipewire-client.conf(5) را ببینید.

همچنین امکان اعمال تنظیمات به ازای هر کلاینت وجود دارد؛ بخش «قوانین تطبیق» را در زیر ببینید.

rt.prio

برای محدود کردن اولویت زمان‌واقعی (realtime priority) که کلاینت‌های jack می‌توانند به دست آورند.

node.latency

برای اجبار اندازه بافر کمینه مشخص برای برنامه‌های کاربردی JACK، به این صورت پیکربندی کنید:
node.latency = 1024/48000

این پیکربندی اندازه بافر را روی ۱۰۲۴ نمونه در نرخ نمونه‌برداری ۴۸ کیلوهرتز (48KHz) تنظیم می‌کند. اگر گراف صوتی با نرخ نمونه‌برداری دیگری در حال اجرا باشد، اندازه بافر متناسب با آن تنظیم خواهد شد.

node.lock-quantum

برای اطمینان از اینکه هیچ کوانتوم خودکاری در حین اجرای برنامه‌های JACK تغییر نکند، پیکربندی کنید:
node.lock-quantum = true

در این صورت کوانتوم تنها از طریق متادیتا یا زمانی که برنامه‌ای با node.force-quantum آغاز به کار کند قابل تغییر خواهد بود. برنامه‌های JACK همچنین قادر خواهند بود با استفاده از jack_set_buffersize() مقدار کوانتوم را بازنویسی کنند.

node.force-quantum

برای تحمیل کوانتوم روی مقداری مشخص و جلوگیری از تغییرات آن:
node.force-quantum = 1024

در این صورت کوانتوم تنها از طریق متادیتا یا زمانی که یک برنامه با node.force-quantum آغاز شود تغییر می‌کند (یا برنامه‌های JACK که از jack_set_buffersize() برای بازنویسی کوانتوم استفاده می‌کنند).

jack.show-monitor

نمایش کلاینت مانیتور و درگاه‌های (پورت‌های) آن.

jack.merge-monitor

درگاه‌های ضبط (capture) و درگاه‌های مانیتور را روی یک کلاینت دستگاه JACK مشترک در معرض دید قرار می‌دهد. این همان شیوه‌ای است که JACK درگاه‌های مانیتور را به کلاینت‌ها نمایش می‌دهد. با این حال، حالت پیش‌فرض ادغام نکردن آن‌هاست، زیرا معمولاً منجر به رابط‌های کاربری کاربرپسندتری می‌شود. یک کلاینت اضافه با پسوند Monitor ایجاد می‌شود که شامل درگاه‌های مانیتور است.

برای مثال، این بخشی از خروجی jack_lsp با تنظیم پیش‌فرض (jack.merge-monitor = false) است:

مقایسه کنید:

jack.merge-monitor = true:
  Built-in Audio Analog Stereo:playback_FL
  Built-in Audio Analog Stereo:monitor_FL
  Built-in Audio Analog Stereo:playback_FR
  Built-in Audio Analog Stereo:monitor_FR
jack.merge-monitor = false:
  Built-in Audio Analog Stereo:playback_FL
  Built-in Audio Analog Stereo Monitor:monitor_FL
  Built-in Audio Analog Stereo:playback_FR
  Built-in Audio Analog Stereo Monitor:monitor_FR

jack.show-midi

نمایش کلاینت‌های MIDI و درگاه‌های آن‌ها.

jack.short-name

برای استفاده از نام‌های کوتاه‌تر به جای نام‌های کامل کلاینت‌های دستگاه، از jack.short-name = true استفاده کنید. مقایسه کنید:
jack.short-name = true:
  HDA Intel PCH:playback_FL
  HDA Intel PCH Monitor:monitor_FL
  HDA Intel PCH:playback_FR
  HDA Intel PCH Monitor:monitor_FR
jack.short-name = false:
  Built-in Audio Analog Stereo:playback_FL
  Built-in Audio Analog Stereo Monitor:monitor_FL
  Built-in Audio Analog Stereo:playback_FR
  Built-in Audio Analog Stereo Monitor:monitor_FR

jack.filter-name

jack.filter-char

تمام کاراکترهای خاص را با jack.filter-char جایگزین می‌کند. برای کلاینت‌ها کاراکترهای خاص شامل ()[].:*$ و برای درگاه‌ها شامل ()[].*$ هستند. زمانی از این گزینه استفاده کنید که کلاینت قادر به مدیریت کاراکترهای خاص نباشد (نسخه‌های قدیمی‌تر PortAudio نام کلاینت و پورت را به عنوان عبارت منظم / regex در نظر می‌گرفتند و در نتیجه در صورت وجود نویسه‌های خاص رجکس در نام، با شکست مواجه می‌شدند).

jack.self-connect-mode

محدود کردن کلاینت از ایجاد اتصال به خودش یا از خودش. مقادیر مجاز و مفهوم آن‌ها به شرح زیر خلاصه می‌شود:
allow           درخواست‌های اتصال به خود محدود نمی‌شوند.
fail-external   رد درخواست‌های اتصال به خود تنها برای درگاه‌های خارجی.
ignore-external نادیده گرفتن درخواست‌های اتصال به خود تنها برای درگاه‌های خارجی.
fail-all        رد تمامی درخواست‌های اتصال به خود.
ignore-all      نادیده گرفتن تمامی درخواست‌های اتصال به خود.

jack.locked-process

اطمینان حاصل می‌کند که فرآیند و فراخوان‌های بازگشتی (callbacks) نمی‌توانند هم‌زمان فراخوانی شوند. این رفتار عادی است، اما در صورتی که یک کلاینت خاص توانایی مدیریت این وضعیت را داشته باشد، می‌توان آن را غیرفعال کرد.

jack.default-as-system

نام‌گذاری مبدا و مقصد پیش‌فرض به عنوان system و شماره‌گذاری درگاه‌ها برای حداکثر کردن سازگاری با برنامه‌های JACK.
jack.default-as-system = false:
  HDA Intel PCH:playback_FL
  HDA Intel PCH Monitor:monitor_FL
  HDA Intel PCH:playback_FR
  HDA Intel PCH Monitor:monitor_FR
jack.default-as-system = true:
  system:playback_1
  system:monitor_1
  system:playback_2
  system:monitor_2

jack.fix-midi-events

تصحیح رویدادهای NoteOn با شدت صدای ۰ (velocity 0) به رویداد NoteOff. این رفتار استاندارد در JACK است و بنابراین برای بیشینه‌سازی سازگاری به‌طور پیش‌فرض فعال است. به‌ویژه افزونه‌های LV2 رویداد NoteOn با شدت ۰ را مجاز نمی‌دانند.

jack.global-buffer-size

هنگامی که یک کلاینت این گزینه را داشته باشد، تغییرات اندازه بافر با استفاده از متادیتا به‌صورت سراسری و دائمی برای تمام کلاینت‌های PipeWire اعمال خواهد شد.

jack.passive-links

باعث می‌شود کلاینت‌های JACK پیوندهای غیرفعال (passive links) ایجاد کنند. این گزینه تنها زمانی کار می‌کند که سازنده پیوند سرور با گزینه allow.link.passive پیکربندی شده باشد.

jack.max-client-ports

محدود کردن تعداد درگاه‌های مجاز به ازای هر کلاینت به این مقدار.

jack.fill-aliases

تنظیم خودکار alias1 و alias2 روی درگاه‌ها.

jack.writable-input

بافرهای ورودی را قابل نوشتن می‌کند. این حالت پیش‌فرض است زیرا برخی از کلاینت‌های JACK در بافر ورودی می‌نویسند. با این حال، این عمل می‌تواند باعث خرابی داده‌ها در کلاینت‌های دیگر در هنگام خواندن از بافر شود.

اگر تنها با کلاینت‌های بدون نقص و استاندارد کار می‌کنید، این مقدار را برای جلوگیری از تخریب بافر برابر با true قرار دهید.

jack.flag-midi2

استفاده از فلگ جدید درگاه MIDI2 در JACK روی درگاه‌های (UMP) MIDI2. این گزینه به‌طور پیش‌فرض غیرفعال است زیرا بیشتر برنامه‌های JACK هنوز از این پرچم مطلع نیستند و از نمایش پورت خودداری می‌کنند.

برای برنامه‌هایی که نحوه کار با درگاه‌های MIDI2 را می‌دانند، این مقدار را true قرار دهید.

بخش jack.rules یک عملیات update-props ارائه می‌دهد که شیئی از ویژگی‌ها را می‌پذیرد که روی شیء کلاینت و گره کلاینت jack به‌روزرسانی می‌شوند.

یک بخش jack.rules به صورت زیر در فایل پیکربندی اضافه کنید:

# ~/.config/pipewire/jack.conf.d/custom.conf
jack.rules = [
    {
        matches = [
            {
                # all keys must match the value. ! negates. ~ starts regex.
                application.process.binary = "jack_simple_client"
            }
        ]
        actions = {
            update-props = {
                node.latency = 512/48000
            }
        }
    }
    {
        matches = [
            {
                client.name = "catia"
            }
        ]
        actions = {
            update-props = {
                jack.merge-monitor = true
            }
        }
    }
]

این پیکربندی تأخیر jack_simple_client را روی ۵۱۲/۴۸۰۰۰ تنظیم می‌کند و باعث می‌شود Catia کلاینت مانیتور را ادغام‌شده با کلاینت بازپخش مشاهده کند.

برای متغیرهای محیطی عمومی به pipewire(1) مراجعه کنید. بسیاری از آن‌ها برای برنامه‌های کلاینت JACK نیز اعمال می‌شوند.

متغیرهای محیطی می‌توانند برای کنترل رفتار کتابخانه کلاینت PipeWire JACK استفاده شوند.

PIPEWIRE_NOJACK

PIPEWIRE_INTERNAL

هنگامی که هر یک از این متغیرها تنظیم شده باشند، کتابخانه کلاینت JACK از باز کردن کلاینت خودداری خواهد کرد. متغیر PIPEWIRE_INTERNAL توسط دیمون اصلی PipeWire برای جلوگیری از اتصال به خود تنظیم می‌شود.

PIPEWIRE_PROPS

ویژگی‌های مشخص‌شده در فایل jack.conf را اضافه یا بازنویسی می‌کند. خروجی این نمونه را بررسی کنید:
> PIPEWIRE_PROPS='{ jack.short-name=true jack.merge-monitor=true }' jack_lsp
...
HDA Intel PCH:playback_FL
HDA Intel PCH:monitor_FL
HDA Intel PCH:playback_FR
HDA Intel PCH:monitor_FR
...

PIPEWIRE_LATENCY

PIPEWIRE_LATENCY=<samples>/<rate> <application>

روشی سریع برای پیکربندی حداکثر اندازه بافر برای یک کلاینت. این کلاینت را با اندازه بافر مشخص‌شده (یا کوچک‌تر) اجرا می‌کند.

دستور PIPEWIRE_LATENCY=256/48000 jack_lsp معادل است با: PIPEWIRE_PROPS='{ node.latency=256/48000 }' jack_lsp

روشی بهتر برای شروع نشست jack با اندازه بافر مشخص، تحمیل آن با دستور زیر است:

pw-metadata -n settings 0 clock.force-quantum <quantum>

این دستور همیشه فوراً عمل می‌کند و اندازه بافر تغییر نخواهد کرد مگر اینکه quantum دوباره به 0 بازگردانده شود.

PIPEWIRE_RATE

PIPEWIRE_RATE=1/<rate> <application>

روشی سریع برای پیکربندی نرخ گراف صوتی. این دستور تلاش می‌کند نرخ نمونه‌برداری گراف را تغییر دهد. این کار معمولاً تنها زمانی ممکن است که گراف بیکار باشد و نرخ مشخص‌شده جزو نرخ‌های نمونه‌برداری مجاز باشد.

دستور PIPEWIRE_RATE=1/48000 jack_lsp معادل است با: PIPEWIRE_PROPS='{ node.rate=1/48000 }' jack_lsp

روشی بهتر برای شروع نشست jack در یک نرخ مشخص، اجبار نرخ با دستور زیر است:

pw-metadata -n settings 0 clock.force-rate <rate>

این دستور همیشه کار می‌کند و نیازی نیست که نرخ نمونه‌برداری حتماً جزو نرخ‌های مجاز پیش‌فرض باشد. نرخ همچنین تغییر نخواهد کرد تا زمانی که مجدداً به 0 بازگردانده شود.

PIPEWIRE_QUANTUM

PIPEWIRE_QUANTUM=<buffersize>/<rate> <application>

مشابه استفاده از PIPEWIRE_LATENCY=<buffersize>/<rate> و PIPEWIRE_RATE=1/<rate> است (به موارد فوق مراجعه کنید)، با این تفاوت که صرفاً یک پیشنهاد نیست بلکه گراف را فعالانه مجبور به تغییر نرخ و کوانتوم می‌کند. می‌تواند برای تنظیم همزمان اندازه بافر و نرخ نمونه‌برداری استفاده شود.

هنگامی که ۲ برنامه کوانتوم را تحمیل کنند، آخرین برنامه اولویت خواهد داشت. با متوقف شدن برنامه پیروز، کوانتوم برنامه پیشین بازیابی می‌شود.

PIPEWIRE_LINK_PASSIVE

PIPEWIRE_LINK_PASSIVE=true qjackctl

باعث می‌شود این کلاینت فقط پیوندهای غیرفعال (passive links) ایجاد کند. تمام پیوندهای ایجادشده توسط کلاینت به عنوان غیرفعال علامت‌گذاری می‌شوند و سینک/سورس را مشغول نگه نخواهند داشت.

می‌توانید از این برای پیوند دادن فیلترها به دستگاه‌ها استفاده کنید. هنگامی که هیچ کلاینتی به فیلتر متصل نیست، تنها پیوندهای غیرفعال بین فیلتر و دستگاه باقی می‌مانند و دستگاه به حالت بیکار و معلق (suspended) درمی‌آید.

PIPEWIRE_NODE

PIPEWIRE_NODE=<id> <application>

درگاه‌ها را به گونه‌ای مرتب می‌کند که تنها درگاه‌های گره با شناسه <id> فهرست شوند. می‌توانید از این ویژگی استفاده کنید تا برنامه‌ای را مجبور کنید تنها با درگاه‌های یک گره خاص تعامل داشته باشد، برای مثال هنگام اتصال خودکار (auto connecting).

توسعه‌دهندگان پایپ‌وایر https://gitlab.freedesktop.org/pipewire/pipewire/issues؛ پایپ‌وایر از نشانی https://pipewire.org در دسترس است.

pw-jack(1), pipewire.conf(5)

1.6.8 PipeWire