PICOM(1) User Commands PICOM(1)

picom - یک کامپوزیتور برای X11

picom [OPTIONS]

نرم‌افزار picom یک کامپوزیتور (ترکیب‌گر پنجره) مبتنی بر نسخهٔ Dana Jansens از xcompmgr است (که خود توسط Keith Packard نوشته شده بود). این برنامه شامل بهبودهایی نسبت به نسخهٔ اصلی xcompmgr است، مانند تنظیم میزان کدر بودن چارچوب پنجره و شفافیت پنجره‌های غیرفعال.

-h, --help

دریافت متن راهنمای استفادهٔ تعبیه‌شده در کد برنامه، که ممکن است نسبت به این صفحهٔ راهنما به‌روزتر باشد.

-r, --shadow-radius=RADIUS

شعاع محوکردن (تاری) سایه‌ها، به پیکسل. (پیش‌فرض: 12)

-o, --shadow-opacity=OPACITY

میزان کدر بودن سایه‌ها. (0.0 - 1.0، پیش‌فرض: 0.75)

-l, --shadow-offset-x=OFFSET

آفست سمت چپ سایه‌ها، به پیکسل. (پیش‌فرض: -15)

-t, --shadow-offset-y=OFFSET

آفست بالای سایه‌ها، به پیکسل. (پیش‌فرض: -15)

-I, --fade-in-step=OPACITY_STEP

میزان تغییر کدر بودن میان هر گام هنگام محو شدن تدریجی رو به ظهور (fade-in). (0.01 - 1.0، پیش‌فرض: 0.028)

-O, --fade-out-step=OPACITY_STEP

میزان تغییر کدر بودن میان هر گام هنگام محو شدن تدریجی رو به ناپدید شدن (fade-out). (0.01 - 1.0، پیش‌فرض: 0.03)

-D, --fade-delta=MILLISECONDS

مدت زمان میان هر گام در پویانمایی محو شدن، به میلی‌ثانیه. (> 0، پیش‌فرض: 10)

-c, --shadow

فعال‌سازی سایه‌های سمت کلاینت روی پنجره‌ها. توجه داشته باشید که پنجره‌های میزکار (پنجره‌های دارای _NET_WM_WINDOW_TYPE_DESKTOP) هرگز سایه دریافت نمی‌کنند، مگر اینکه صراحتاً با استفاده از گزینهٔ wintypes درخواست شده باشد.

-f, --fading

محو شدن تدریجی پنجره‌ها به هنگام باز/بسته شدن و هنگام تغییر کدر بودن، مگر اینکه از گزینهٔ --no-fading-openclose استفاده شده باشد.

-i, --inactive-opacity=OPACITY

میزان کدر بودن پنجره‌های غیرفعال. (0.1 - 1.0، پیش‌فرض: 1.0). استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم کدر بودن مختص هر پنجره، بخش WINDOW RULES را ببینید.

-e, --frame-opacity=OPACITY

میزان کدر بودن نوار عنوان و حاشیه‌های پنجره. (0.1 - 1.0، به‌طور پیش‌فرض غیرفعال است)

-b, --daemon

تبدیل فرایند به دیمون (daemon). انشعاب (fork) به پس‌زمینه پس از مقداردهی اولیه. این گزینه فقط از خط فرمان قابل تنظیم است و تنظیم آن در فایل پیکربندی اثری نخواهد داشت.

--log-level

تنظیم سطح ثبت وقایع (log level). مقادیر ممکن به ترتیب افزایش اهمیت عبارتند از: "TRACE" ،"VERBOSE" ،"DEBUG" ،"INFO" ،"WARN" و "ERROR". حروف کوچک و بزرگ تفاوتی ندارند. اگر از سطح "TRACE" استفاده می‌کنید، بهتر است با استفاده از --log-file لاگ‌ها را در یک فایل ذخیره کنید، زیرا حجم بسیار زیادی از لاگ‌ها تولید خواهد شد.

--log-file

تعیین فایل گزارش وقایع (log). اگر --log-file مشخص نشود، وقایع در stderr نوشته خواهند شد. در غیر این صورت، لاگ‌ها در فایل مشخص‌شده ذخیره می‌شوند، هرچند ممکن است برخی از لاگ‌های اولیه همچنان در stderr نوشته شوند. هنگام تنظیم این گزینه در فایل پیکربندی، توصیه می‌شود از یک مسیر مطلق استفاده کنید.

--show-all-xerrors

نمایش تمامی خطاهای سرور X (برای اشکال‌زدایی).

--config PATH

جستجوی فایل پیکربندی در مسیر مشخص‌شده. برای اطلاع از اینکه picom به‌طور پیش‌فرض کجا به دنبال فایل پیکربندی می‌گردد، بخش CONFIGURATION FILES را در ادامه ببینید. برای جلوگیری از بارگذاری هرگونه فایل پیکربندی، از /dev/null استفاده کنید.

--write-pid-path PATH

نوشتن شناسهٔ فرایند (PID) در یک فایل. توصیه می‌شود از یک مسیر مطلق استفاده کنید.

--plugins PATH

مشخص کردن افزونه‌ها (plugins) جهت بارگذاری. افزونه‌ها ابتدا در دایرکتوری کاری فعلی جستجو می‌شوند (مگر اینکه در فایل پیکربندی تعیین شده باشد، که در این صورت از این مرحله صرف‌نظر می‌شود)، سپس در $XDG_CONFIG_HOME/picom/plugins و پس از آن در $XDG_CONFIG_DIRS/picom/plugins. اگر همهٔ موارد فوق ناموفق باشند، نام افزونه مستقیماً به بارگذار پویا (dynamic loader) ارسال می‌شود. برای بارگذاری بیش از یک افزونه می‌توان این گزینه را چندین بار مشخص کرد.

--shadow-color STRING

رنگ سایه، به صورت یک رشتهٔ هگزادسیمال (مانند #000000).

--shadow-red VALUE

مقدار کانال رنگ قرمز سایه (0.0 - 1.0، پیش‌فرض: 0).

--shadow-green VALUE

مقدار کانال رنگ سبز سایه (0.0 - 1.0، پیش‌فرض: 0).

--shadow-blue VALUE

مقدار کانال رنگ آبی سایه (0.0 - 1.0، پیش‌فرض: 0).

--inactive-opacity-override

اجازه می‌دهد مقدار کدر بودن پنجرهٔ غیرفعال تنظیم‌شده توسط -i، مقادیر _NET_WM_WINDOW_OPACITY پنجره‌ها را بازنویسی کند (لغو کند). استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم کدر بودن مختص هر پنجره، بخش WINDOW RULES را ببینید.

--active-opacity OPACITY

میزان کدر بودن پیش‌فرض برای پنجره‌های فعال. (0.0 - 1.0، پیش‌فرض: 1.0). استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم کدر بودن مختص هر پنجره، بخش WINDOW RULES را ببینید.

--inactive-dim VALUE

تاریک و کم‌نور کردن پنجره‌های غیرفعال. (0.0 - 1.0، پیش‌فرض: 0.0). استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم سطوح تیرگی مختص هر پنجره، بخش WINDOW RULES را ببینید.

--corner-radius VALUE

تنظیم شعاع گوشه‌های گرد پنجره. اگر بزرگتر از 0 باشد، کامپوزیتور گوشه‌های پنجره‌ها را گرد می‌کند. با گزینهٔ --transparent-clipping سازگاری خوبی ندارد. (پیش‌فرض: 0).

--corner-radius-rules RADIUS:CONDITION

مشخص کردن فهرستی از قواعد شعاع گوشه. شعاع گوشهٔ پنجره‌های منطبق را لغو و بازنویسی می‌کند. این گزینه بر گزینهٔ --rounded-corners-exclude اولویت دارد و همچنین استثنا شدن پیش‌فرض پنجره‌های تمام‌صفحه را بازنویسی می‌کند. ساختار شرط مشابه --opacity-rule است. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم شعاع گوشه مختص هر پنجره، بخش WINDOW RULES را ببینید.

--rounded-corners-exclude CONDITION

شرایط استثنا برای گوشه‌های گرد. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم شعاع گوشه مختص هر پنجره، بخش WINDOW RULES را ببینید.

--no-frame-pacing

غیرفعال‌سازی زمان‌بندی فریم آگاه از vsync (frame pacing). به‌طور پیش‌فرض، کامپوزیتور تلاش می‌کند تا فقط یک بار در هر بازهٔ vblank رندر را انجام دهد، و همچنین رندر تا جای ممکن در آخرین لحظه انجام شود تا تأخیر (latency) میان به‌روزرسانی‌ها تا نمایش روی صفحه به حداقل برسد. با این حال این مسئله گاهی می‌تواند موجب پرش تصویر (stuttering) یا حتی کاهش نرخ فریم شود. از این گزینه می‌توان برای غیرفعال کردن زمان‌بندی فریم استفاده کرد.

--mark-wmwin-focused

تلاش برای تشخیص پنجره‌های مدیر پنجره (یک پنجرهٔ غیر override-redirect بدون پنجرهٔ فرزندی که دارای WM_STATE باشد) و علامت‌گذاری آن‌ها به عنوان فعال. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم قواعد مختص هر پنجره، بخش WINDOW RULES را ببینید.

--mark-ovredir-focused

علامت‌گذاری پنجره‌های override-redirect که پنجرهٔ فرزندی با مشخصهٔ WM_STATE ندارند به عنوان فوکوس‌شده. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم قواعد مختص هر پنجره، بخش WINDOW RULES را ببینید.

--no-fading-openclose

محو نشدن پنجره‌ها هنگام باز شدن یا بسته شدن.

--no-fading-destroyed-argb

محو نشدن تدریجی پنجره‌های بسته‌شدهٔ ARGB دارای چارچوب WM. راهکاری موقت برای دور زدن اشکالات موجود در Openbox ،Fluxbox و غیره.

--shadow-ignore-shaped

رسم نکردن سایه روی پنجره‌های فرم‌دار (shaped). توجه داشته باشید پنجره‌های فرم‌دار در اینجا یعنی پنجره‌هایی که شکل خود را از طریق افزونهٔ X Shape تعیین می‌کنند. مواردی که از پس‌زمینهٔ ARGB استفاده می‌کنند خارج از کنترل برنامه است. این گزینه منسوخ شده است؛ برای روش پیشنهادی جهت تنظیم سایهٔ مختص هر پنجره، بخش WINDOW RULES را ببینید.

--detect-rounded-corners

تلاش برای تشخیص پنجره‌های دارای گوشه‌های گرد و عدم تلقی آن‌ها به عنوان پنجره‌های فرم‌دار (shaped). متأسفانه دقت این قابلیت خیلی بالا نیست.

--detect-client-opacity

تشخیص _NET_WM_WINDOW_OPACITY در پنجره‌های کلاینت؛ مفید برای مدیران پنجره‌ای که _NET_WM_WINDOW_OPACITY پنجره‌های کلاینت را به پنجره‌های چارچوب منتقل نمی‌کنند.

--vsync, --no-vsync

فعال/غیرفعال کردن همگام‌سازی عمودی (VSync).

--use-ewmh-active-win

استفاده از _NET_ACTIVE_WINDOW در EWMH برای تشخیص پنجره‌ای که در حال حاضر فوکوس دارد، به‌جای گوش دادن به رویدادهای 'FocusIn'/'FocusOut'. به شرط پشتیبانی توسط مدیر پنجره، ممکن است دقت بالاتری داشته باشد.

--unredir-if-possible

لغو هدایت (Unredirect) تمامی پنجره‌ها در برخی موارد خاص. این قابلیت به ایجاد پرش تصویر (flickering) هنگام redirecting/unredirecting پنجره‌ها معروف است. در حال حاضر، لغو هدایت با شرایط زیر فعال می‌شود:
•اگر پنجرهٔ سطح بالا تمام صفحه را بپوشاند. در پیکربندی‌های چند مانیتوره، این به معنای همهٔ مانیتورها است.
•اگر هیچ پنجره‌ای وجود نداشته باشد.
•اگر پنجره‌ای طبق هینت‌های مدیر پنجره تمام‌صفحه باشد. (با --no-ewmh-fullscreen قابل غیرفعال‌سازی است).
•اگر پنجره‌ای درخواست دور زدن کامپوزیتور را داشته باشد (_NET_WM_BYPASS_COMPOSITOR). همچنین هنگامی که نمایشگرها خاموش می‌شوند، صرف‌نظر از اینکه --unredir-if-possible فعال باشد یا خیر، پنجره‌ها بدون قید و شرط از حالت هدایت خارج می‌شوند (unredirect).

--unredir-if-possible-delay MILLISECONDS

تأخیر پیش از لغو هدایت پنجره، به میلی‌ثانیه. پیش‌فرض: 0.

--unredir-if-possible-exclude CONDITION

شرایط پنجره‌هایی که نباید برای لغو هدایت صفحه، تمام‌صفحه تلقی شوند. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم unredirect مختص هر پنجره، بخش WINDOW RULES را ببینید.

--shadow-exclude CONDITION

مشخص کردن فهرستی از شرایط پنجره‌هایی که نباید سایه داشته باشند. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم سایهٔ مختص هر پنجره، بخش WINDOW RULES را ببینید.

--clip-shadow-above CONDITION

مشخص کردن فهرستی از شرایط پنجره‌هایی که نباید سایه‌ای روی آن‌ها کشیده شود، مانند پنجره‌های داک (dock). استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم برش سایه مختص هر پنجره، بخش WINDOW RULES را ببینید.

--fade-exclude CONDITION

مشخص کردن فهرستی از شرایط پنجره‌هایی که نباید به صورت تدریجی محو شوند. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم محوشدگی تدریجی مختص هر پنجره، بخش WINDOW RULES را ببینید.

--focus-exclude CONDITION

مشخص کردن فهرستی از شرایط پنجره‌هایی که باید همیشه فوکوس‌شده در نظر گرفته شوند. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت انجام این کار، بخش WINDOW RULES را ببینید.

--inactive-dim-fixed

استفاده از مقدار ثابت برای تیرگی پنجره‌های غیرفعال، به‌جای تنظیم آن بر اساس میزان کدر بودن پنجره.

--detect-transient

استفاده از WM_TRANSIENT_FOR جهت گروه‌بندی پنجره‌ها و هم‌زمان در نظر گرفتن وضعیت فوکوس پنجره‌های متعلق به یک گروه.

--detect-client-leader

استفاده از WM_CLIENT_LEADER جهت گروه‌بندی پنجره‌ها و هم‌زمان در نظر گرفتن وضعیت فوکوس پنجره‌های یک گروه. این امر معمولاً بدان معناست که پنجره‌های متعلق به یک برنامه هم‌زمان فوکوس‌شده یا غیرفوکوس تلقی می‌شوند. اگر --detect-transient نیز فعال باشد، WM_TRANSIENT_FOR اولویت بالاتری دارد.

--blur-method, --blur-size, --blur-deviation, --blur-strength

پارامترهایی برای محوسازی پس‌زمینه؛ برای اطلاعات بیشتر بخش BLUR را ببینید.

--blur-background

محو کردن پس‌زمینهٔ پنجره‌های نیمه‌شفاف / ARGB. از نظر عملکردی پرهزینه بوده و رفتار آن به درایور وابسته است. ممکن است نام این گزینه بدون اطلاع قبلی تغییر کند.

--blur-background-frame

محو کردن پس‌زمینهٔ پنجره‌ها هنگامی که چارچوب پنجره کدر (مات) نیست. متضمن گزینهٔ --blur-background است. از نظر عملکردی پرهزینه بوده و رفتار آن به درایور وابسته است. نام این گزینه ممکن است تغییر کند.

--blur-background-fixed

استفاده از قدرت محوسازی ثابت برای پنجره در هنگام محو شدن تدریجی (fading). این گزینه فقط برای گزینهٔ --fading اعمال می‌شود، و در صورت استفاده از اسکریپت‌های پویانمایی بی‌اثر (no-op) خواهد بود.

--blur-kern MATRIX

تعیین هستهٔ پیچش (convolution kernel) برای محوسازی، با ساختار زیر:
WIDTH,HEIGHT,ELE1,ELE2,ELE3,ELE4,ELE5...

به عبارت دیگر، ماتریس به صورت فهرستی از اعداد که با کاما از هم جدا شده‌اند قالب‌بندی می‌شود. دو عدد نخست باید عدد صحیح باشند و عرض و ارتفاع ماتریس را مشخص می‌کنند. این اعداد باید فرد باشند. سپس، width * height - 1 عدد بعدی، مقادیر ماتریس را سطر به سطر، بدون احتساب عنصر مرکزی، مشخص می‌کنند.

عناصر از نوع اعداد ممیز شناور متناهی هستند. ممیز اعشاری باید حتماً . (نقطه) باشد؛ نشانه‌گذاری علمی پشتیبانی نمی‌شود.

عنصر مرکزی بسته به اینکه از --blur-background-fixed استفاده کنید یا خیر، برابر با 1.0 یا متغیر بر اساس میزان کدر بودن خواهد بود. با این حال تنظیم خودکار ضریب محوسازی ممکن است با یک هستهٔ محوسازی سفارشی به خوبی کار نکند.

یک هستهٔ محوسازی گوسی 7x7 (با سیگما = 0.84089642) به این صورت است:

--blur-kern '7,7,0.000003,0.000102,0.000849,0.001723,0.000849,0.000102,0.000003,0.000102,0.003494,0.029143,0.059106,0.029143,0.003494,0.000102,0.000849,0.029143,0.243117,0.493069,0.243117,0.029143,0.000849,0.001723,0.059106,0.493069,0.493069,0.059106,0.001723,0.000849,0.029143,0.243117,0.493069,0.243117,0.029143,0.000849,0.000102,0.003494,0.029143,0.059106,0.029143,0.003494,0.000102,0.000003,0.000102,0.000849,0.001723,0.000849,0.000102,0.000003'

همچنین می‌تواند یکی از هسته‌های از پیش تعریف‌شده باشد: 3x3box (پیش‌فرض)، 5x5box، 7x7box، 3x3gaussian، 5x5gaussian، 7x7gaussian، 9x9gaussian، 11x11gaussian. تمامی هسته‌های گوسی با مقدار سیگما = 0.84089642 تولید شده‌اند. چنانچه نیاز به تولید هسته‌های محوسازی سفارشی پیدا کردید، می‌توانید پیکربندی جدید محوسازی را بررسی کنید (بخش BLUR را ببینید).

--blur-background-exclude CONDITION

شرایط استثنا برای محوسازی پس‌زمینه.

--invert-color-include CONDITION

مشخص کردن فهرستی از شرایط پنجره‌هایی که باید با رنگ‌های معکوس رسم شوند. منابع زیادی مصرف می‌کند و به خوبی آزموده نشده است. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت انجام این کار، بخش WINDOW RULES را ببینید.

--opacity-rule OPACITY:CONDITION

مشخص کردن فهرستی از قواعد کدر بودن، با قالب PERCENT:PATTERN، مانند 50:name *= "Firefox". استفاده از ابزار picom-trans نسبت به این گزینه ترجیح داده می‌شود. توجه داشته باشید که هیچ تضمینی دربارهٔ تداخل‌های احتمالی با سایر برنامه‌هایی که _NET_WM_WINDOW_OPACITY را روی پنجره‌های چارچوب یا کلاینت تنظیم می‌کنند وجود ندارد. استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم کدر بودن مختص هر پنجره، بخش WINDOW RULES را ببینید.

--crop-shadow-to-monitor

برش دادن سایهٔ پنجره‌ای که کاملاً روی یک مانیتور مشخص قرار دارد به همان مانیتور. این قابلیت در حال حاضر با استفاده از افزونهٔ X RandR پیاده‌سازی شده است.

--backend BACKEND

تعیین بک‌اند مورد استفاده: xrender یا glx. بک‌اند xrender گزینهٔ پیش‌فرض است.
•بک‌اند xrender تمامی عملیات رندر را با استفاده از افزونهٔ X Render انجام می‌دهد. این همان بک‌اندی است که xcompmgr استفاده می‌کند و در صورت مواجهه با ناهنجاری‌های رندر یا ناپایداری، عموماً یک حالت رزرو (fallback) امن محسوب می‌شود.
•بک‌اند glx (مبتنی بر OpenGL) تمامی عملیات رندر را با OpenGL انجام می‌دهد. این بک‌اند با برخی روش‌های VSync سازگارتر است و عملکرد به مراتب برتری در معکوس‌سازی رنگ (--invert-color-include) یا محوسازی (--blur-background) دارد. نیازمند پشتیبانی مناسب از OpenGL 3.3 توسط درایور و سخت‌افزار شما است. شاید مایل باشید گزینه‌های بهینه‌سازی عملکرد GLX در ادامه را بررسی کنید. ممکن است در برخی سیستم‌ها برای جلوگیری از تأخیر در تغییر محتویات صفحه به --xrender-sync-fence نیاز باشد.

--no-use-damage

غیرفعال‌سازی استفاده از اطلاعات آسیب (damage information). این امر باعث می‌شود هر بار کل صفحه دوباره ترسیم شود، به‌جای اینکه فقط بخش‌هایی از صفحه که واقعاً تغییر کرده‌اند بازترسیم شوند. این کار ممکن است کارایی را کاهش دهد، اما احتمال دارد برخی ناهنجاری‌های تصویری را برطرف کند.

--xrender-sync-fence

استفاده از X Sync fence برای همگام‌سازی فراخوانی‌های ترسیم کلاینت‌ها، جهت اطمینان از پایان یافتن تمام فراخوانی‌های ترسیم پیش از شروع رسم توسط picom. این گزینه برای برخی کاربران در درایورهای nvidia با بک‌اند GLX مورد نیاز است.

--force-win-blend

اجبار تمام پنجره‌ها به رسم شدن با ترکیب رنگ (blending). هنگامی که شیدری برای پنجره دارید که می‌تواند پیکسل‌های کدر را به شفاف تبدیل کند، کاربردی است.

--dbus

فعال‌سازی کنترل از راه دور از طریق D-Bus. برای جزئیات بیشتر بخش D-BUS API را در ادامه ببینید.

--benchmark CYCLES

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

--benchmark-wid WINDOW_ID

مشخص کردن شناسهٔ پنجره (window ID) برای بازترسیم در حالت محک زدن. در صورت عدم ذکر یا مقدار 0، کل صفحه بازترسیم می‌شود.

--no-ewmh-fullscreen

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

--max-brightness

کم‌نور کردن پنجره‌های بسیار روشن به گونه‌ای که روشنایی آن‌ها از این مقدارِ تعیین‌شده فراتر نرود. روشنایی پنجره با میانگین‌گیری از تمام پیکسل‌های آن تخمین زده می‌شود، بنابراین ممکن است موجب کاهش عملکرد شود. تنظیم این مقدار روی 1.0 این رفتار را غیرفعال می‌کند. نیازمند غیرفعال بودن --use-damage است. (پیش‌فرض: 1.0)

--transparent-clipping

باعث می‌شود پنجره‌های شفاف مانند پنجره‌های غیرشفاف، پنجره‌های دیگر را برش بزنند (clip کنند)، به‌جای اینکه روی آن‌ها ترکیب (blend) شوند.

--transparent-clipping-exclude CONDITION

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

--window-shader-fg SHADER

مشخص کردن مسیر شیدر قطعه (GLSL fragment shader) برای رندر محتویات پنجره. شیدر ابتدا نسبت به دایرکتوری‌ای که فایل پیکربندی در آن قرار دارد جستجو می‌شود، سپس در مکان‌های معمول فایل پیکربندی. برای جزئیات بیشتر دربارهٔ این رابط، بخش SHADER INTERFACE را در ادامه ببینید.

--window-shader-fg-rule SHADER:CONDITION

مشخص کردن مسیر شیدر قطعه (GLSL fragment shader) برای رندر محتویات پنجره با استفاده از الگوها. مشابه --opacity-rule، آرگومان‌ها باید با ساختار SHADER:CONDITION باشند، مانند "shader.frag:name = 'window'". فاصله‌های خالی ابتدا و انتهای SHADER حذف خواهند شد. اگر SHADER برابر با "default" باشد، شیدر پیش‌فرض برای پنجره‌های منطبق به کار می‌رود. (متأسفانه این بدان معنا نیز هست که نمی‌توانید از یک فایل شیدر به نام "default" استفاده کنید). استفاده از این گزینه توصیه نمی‌شود؛ برای روش پیشنهادی جهت تنظیم شیدرهای مختص هر پنجره، بخش WINDOW RULES را ببینید.

--root-pixmap-shader SHADER

مشخص کردن مسیر شیدر قطعه (GLSL fragment shader) برای رندر پیکس‌مپ ریشه (root pixmap). پیکس‌مپ ریشه معمولاً همان تصویر پس‌زمینهٔ میزکار شماست، هرچند در برخی محیط‌های رومیزی چنین نیست. شیدر ابتدا نسبت به دایرکتوری محل فایل پیکربندی و سپس در مسیرهای معمول فایل پیکربندی جستجو می‌شود. برای جزئیات بیشتر، بخش SHADER INTERFACE را در ادامه ببینید.

--dithered-present

استفاده از دقت بالاتر در حین رندر، و اعمال دیترینگ (dither) هنگام نمایش صفحهٔ رندر شده. ناهنجاری‌های نواربندی رنگ‌ها (banding artifacts) را کاهش می‌دهد، اما ممکن است باعث افت عملکرد شود. تنها با OpenGL کار می‌کند.

قواعد پنجره (Window rules) به شما امکان می‌دهند تا گزینه‌های ویژه‌ی پنجره‌ها را تنظیم کنید که می‌توان از آن‌ها برای تغییر ظاهر پنجره‌ها بر اساس شرایطی مشخص استفاده کرد. توجه داشته باشید گزینه‌های دیگری نیز وجود دارند که بخشی از قابلیت‌های قواعد پنجره را پوشش می‌دهند، اما قواعد پنجره انعطاف‌پذیرتر و قدرتمندتر هستند. اگر در حال ایجاد یک فایل پیکربندی جدید هستید، توصیه می‌شود به جای سایر گزینه‌ها از قواعد پنجره استفاده کنید.

در ادامه فهرستی از تمام گزینه‌هایی که قواعد پنجره جایگزین آن‌ها شده‌اند آمده است:

--shadow-ignore-shaped, -i, --inactive-opacity=OPACITY, --active-opacity OPACITY, --inactive-opacity-override, --inactive-dim VALUE, --mark-wmwin-focused, --mark-ovredir-focused, --invert-color-include CONDITION, --shadow-exclude CONDITION, --fade-exclude CONDITION, --focus-exclude CONDITION, --rounded-corners-exclude CONDITION, --blur-background-exclude CONDITION, --opacity-rule OPACITY:CONDITION, --corner-radius-rules RADIUS:CONDITION, --window-shader-fg-rule SHADER:CONDITION, --clip-shadow-above CONDITION. و همچنین گزینهٔ فایل پیکربندی wintypes.

اگر از گزینهٔ قواعد پنجره استفاده شود، هیچ‌کدام از گزینه‌های بالا اثری نخواهند داشت و پیام‌های هشدار صادر خواهد شد. هنگامی که از گزینهٔ قواعد پنجره استفاده می‌شود، کامپوزیتور در شرایط خاصی نیز رفتاری تا حدی متفاوت خواهد داشت. یک نمونه از این موارد این است که گوشه‌های گرد پنجره‌های تمام‌صفحه دیگر به‌طور پیش‌فرض غیرفعال نخواهند شد.

اگر در حال حاضر از برخی از این گزینه‌ها استفاده می‌کنید و می‌خواهید به قواعد پنجره مهاجرت کنید، یا اگر می‌خواهید رفتار فعلی را حفظ کنید، برای چگونگی تبدیل آن‌ها به بخش Migrating old rules مراجعه کنید.

قواعد پنجره تنها در فایل پیکربندی در دسترس هستند. برای تنظیم قواعد پنجره، گزینهٔ rules را در فایل پیکربندی به چیزی شبیه به این مقداردهی کنید:

rules = (
        { match = "focused"; opacity = 1; },
        { match = "name = 'firefox'"; shadow = true; },
        # ... and so on
)

مقدار rules = ( ... ) این گزینه را روی یک فهرست (list) تنظیم می‌کند که می‌تواند شامل چندین زیرمورد باشد. برای rules، هر زیرمورد باید یک گروه باشد (مانند { key = value; ... }) که نشان‌دهندهٔ یک شرط و مجموعه‌ای از گزینه‌ها برای اعمال در هنگام برقراری شرط است. این زیرموردها به ترتیبی که در فایل پیکربندی آمده‌اند مطابقت داده می‌شوند و با برقراری هر شرط، گزینه‌ها اعمال می‌گردند. اگر یک گزینه چندین بار تنظیم شود، آخرین مقدار اعمال خواهد شد.

درون هر زیرمورد، این کلیدها در دسترس هستند:

match

رشتهٔ شرط برای تطبیق پنجره‌ها با آن. برای ساختار نگارشی رشته‌های شرط، بخش FORMAT OF CONDITIONS را در زیر ببینید. در صورت عدم تعیین، این قاعده همیشه منطبق خواهد شد.

shadow

اینکه آیا در زیر پنجرهٔ منطبق، سایه کشیده شود یا خیر.

full-shadow

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

shadow-color

رنگ سایه. دارای نحوی مشابه با --shadow-color STRING.

fade

اینکه آیا هنگام باز یا بسته شدن پنجرهٔ منطبق، محوشدگی/پدیداری تدریجی (fade in/out) اعمال شود یا خیر. هنگام استفاده از پویانمایی‌ها، این گزینه اثری نخواهد داشت. از این گزینه تنها می‌توان برای غیرفعال کردن پویانمایی‌های محوشدگی که با گزینهٔ -f یا --fading فعال شده‌اند استفاده کرد.

opacity

میزان کدر بودن پنجرهٔ منطبق. (0.0 - 1.0). اگر به‌طور صریح توسط یک قاعده تعیین نشده باشد، مقدار کدر بودن از مشخصه‌های پنجره (مانند _NET_WM_WINDOW_OPACITY) دریافت خواهد شد.

blur-opacity

میزان کدر بودن تاری پس‌زمینه. (0.0 - 1.0). اگر به‌صراحت توسط یک قاعده تنظیم نشود، این مقدار 1.0 خواهد بود. اگر blur-background فعال نباشد، نادیده گرفته می‌شود.

dim

سطح تیرگی (dim) پنجرهٔ منطبق. مقدار بزرگ‌تر به معنای تیرگی بیشتر است. (0.0 - 1.0)

corner-radius

شعاع گوشهٔ پنجرهٔ منطبق بر حسب تعداد پیکسل. مقدار 0 به معنای گرد نکردن گوشه‌ها است.

blur-background

اینکه آیا پس‌زمینهٔ پنجرهٔ منطبق باید تار شود یا خیر.

invert-color

اینکه آیا رنگ‌های پنجرهٔ منطبق معکوس شوند یا خیر.

clip-shadow-above

اینکه آیا از کشیده شدن سایه‌ها بر روی پنجرهٔ منطبق جلوگیری شود یا خیر.

unredir

اینکه آیا پنجرهٔ منطبق باید باعث شود کامپوزیتور تغییرمسیر صفحه را لغو کند (unredirect)، و اینکه آیا در صورت لغو بودن تغییرمسیر، باید دوباره باعث برقراری تغییرمسیر صفحه شود یا خیر. این مقدار می‌تواند یک متغیر بولی باشد؛ اگر true باشد، در صورتی که پنجرهٔ منطبق دارای شرایط مشخصی باشد، تغییرمسیر صفحه لغو خواهد شد؛ اگر false باشد، هرگز باعث لغو تغییرمسیر صفحه نمی‌شود. اگر در حال حاضر تغییرمسیر صفحه لغو شده باشد و پنجرهٔ دیگری وجود نداشته باشد که لغو تغییرمسیر را راه‌اندازی کند، هر دوی این انتخاب‌ها باعث بازگردانی تغییرمسیر صفحه خواهند شد. برای کنترل آن رفتار نیز می‌توانید unredir را روی preferred تنظیم کنید؛ در این حالت چنین پنجره‌هایی در این وضعیت باعث بازگردانی تغییرمسیر نخواهند شد و در سایر شرایط مانند true رفتار می‌کنند؛ یا مقدار passive، که نه‌تنها در این حالت باعث تغییرمسیر نمی‌شود، بلکه به‌طور فعال نیز باعث لغو تغییرمسیر صفحه نخواهد شد. آخرین مقدار ممکن برای این گزینه forced است؛ هر پنجره‌ای که مقدار unredir آن روی forced باشد، بی‌قیدوشرط باعث لغو تغییرمسیر صفحه خواهد شد. مقدار مشخصهٔ _NET_WM_BYPASS_COMPOSITOR روی پنجره تنها و تنها زمانی در نظر گرفته می‌شود که unredir به‌صراحت توسط هیچ قاعده‌ای تنظیم نشده باشد.

transparent-clipping

اینکه آیا پنجرهٔ منطبق مانند پنجره‌های کدر سایر پنجره‌ها را برش (clip) دهد یا اینکه بر روی آن‌ها ترکیب (blend) شود. وقتی این گزینه روی پنجره‌های شفاف اعمال شود، بدین معنی است که هیچ‌چیزی در زیر بخش‌های شفاف پنجره ترسیم نخواهد شد و در عمل سوراخی در صفحه ایجاد می‌کند.

shader

مشخصات سایه‌زن قطعه (GLSL fragment shader) برای رندر محتوای پنجره. برای جزئیات بیشتر دربارهٔ این رابط، بخش SHADER INTERFACE را در زیر ببینید. این گزینه می‌تواند یک مسیر ساده به فایل سایه‌زن باشد، اما همچنین امکان مشخص کردن گزینه‌های اضافی برای سایه‌زن وجود دارد. در حال حاضر، تنها گزینه‌های اضافی پشتیبانی‌شده تعاریف ماکرو (macro defines) هستند. نحو:
shader = {
        path = "path/to/shader.glsl";
        defines = {
                COLOR = "vec4(1.0, 0.0, 0.0, 1.0)";
        };
};

این کار عبارت #define COLOR vec4(1.0, 0.0, 0.0, 1.0) را به ابتدای سایه‌زن شما می‌افزاید (به عدم وجود علامت نقل‌قول دوتایی دقت کنید). مقدار یک define حتماً باید یک رشته باشد، هر رشته‌ای پذیرفته می‌شود و هیچ پاک‌سازی یا اعتبارسنجی‌ای انجام نخواهد شد.

animations

تعریف اسکریپت‌های پویانمایی ویژهٔ پنجره. ساختار این گزینه مشابه با گزینهٔ سطح‌بالای animations است. اطلاعات بیشتر را می‌توانید در بخش ANIMATIONS بیابید. اگر اسکریپت‌های پویانمایی در چندین قاعدهٔ منطبق تعریف شده باشند، با یکدیگر ادغام خواهند شد. اگر چندین قاعدهٔ منطبق حاوی اسکریپت‌های پویانمایی برای یک راه‌انداز یکسان باشند، همانند سایر گزینه‌ها، آخرین مورد اثر خواهد کرد.

بیشتر گزینه‌های قوانین باید نگاشت یک‌به‌یک (1:1) با قوانین جدید پنجره داشته باشند. در اینجا فهرستی از موارد غیربدیهی و نحوهٔ دستیابی به همان اثر با استفاده از قوانین پنجره آورده شده است.

تاریک‌سازی و مات‌سازی حالت غیرفعال

این شامل گزینه‌های -i، --inactive-opacity=OPACITY، --inactive-dim VALUE، --active-opacity OPACITY، --inactive-opacity-override، --mark-wmwin-focused و --mark-ovredir-focused می‌شود. هنگام استفاده از قوانین پنجره، مدیر ترکیب (compositor) دیگر مفهومی به نام «پنجرهٔ فعال» ندارد، زیرا دستیابی به آن با قوانین پنجره آسان است. می‌توانید از match = "focused || group_focused" برای تطبیق پنجره‌هایی که با گزینه‌های قدیمی فعال محسوب می‌شدند، استفاده کنید. سپس می‌توانید میزان مات‌سازی (opacity) و تاریک‌سازی (dim) را برای پنجره‌های منطبق به تناسب تنظیم نمایید. اثر --mark-wmwin-focused و --mark-ovredir-focused را می‌توان به ترتیب با افزودن || wmwin و || override_redirect به رشتهٔ تطبیق پیاده‌سازی کرد. --inactive-opacity-override نیز با تنظیم opacity-override = true قابل دستیابی است.

نکته

تنظیم صریح opacity توسط یک قانون، مقدار opacity حاصل از مشخصه‌های پنجره (مانند _NET_WM_WINDOW_OPACITY) را که توسط ابزارهایی مانند picom-trans برای تنظیم شفافیت پنجره استفاده می‌شود، بازنویسی (override) خواهد کرد. اگر می‌خواهید همچنان از ابزارهایی مانند picom-trans استفاده کنید، می‌توانید با تطبیق ! _NET_WM_WINDOW_OPACITY، مقدار opacity را تنها برای پنجره‌هایی که فاقد این مشخصه هستند تنظیم نمایید.

پنجرهٔ فعال

این بخش شامل گزینهٔ --focus-exclude CONDITION است. این گزینه تنها برای تعیین پنجره‌هایی که باید فعال تلقی شوند به کار می‌رفت تا مات‌سازی و تاریک‌سازی حالت غیرفعال روی آن‌ها اعمال شود. از آنجا که با وجود قوانین پنجره دیگر نیازی نیست کامپوزیتور برای تعیین فعال بودن یا نبودن به شما کمک کند (توضیحات بالا را ببینید)، این گزینه دیگر مورد نیاز نیست.

گوشه‌های گرد و پنجره‌های تمام‌صفحه

گوشه‌های گرد دیگر به صورت خودکار برای پنجره‌های تمام‌صفحه غیرفعال نمی‌شوند. اگر می‌خواهید گوشه‌های گرد را برای پنجره‌های تمام‌صفحه غیرفعال کنید، می‌توانید از قانون زیر استفاده نمایید:
rules = (
        { match = "fullscreen"; corner-radius = 0; },
)

برخی از گزینه‌ها یک رشتهٔ شرط را برای تطبیق پنجره‌های مشخص می‌پذیرند. یک رشتهٔ شرط از یک یا چند شرط تشکیل شده که توسط عملگرهای منطقی به یکدیگر متصل شده‌اند.

گرامر صوری (formal grammar) برای یک شرط به شکل زیر است:

Condition <- Term ('||' Term)*
Term <- Item ('&&' Item)*
Item <- '!'? Target '@'? ('[' Index ']')? (Operator Pattern)? | '(' Condition ')'

به طور دقیق‌تر، یک شرط دنباله‌ای از یک یا چند Item برای تطبیق الگوهای ساده است که توسط عملگرهای منطقی && (و) و || (یا) به هم متصل شده‌اند. عملگر && اولویت بالاتری نسبت به || دارد. هر دو عملگر شرکت‌پذیر از چپ (left-associative) هستند. برای افزایش اولویت می‌توان از پرانتز استفاده کرد. اگر یک Item دارای عملگر نقیض پیشوند (!) باشد، نتیجهٔ آن مورد نقیض می‌شود.

درون یک Item:

Target

یا نام یک هدف از پیش‌تعریف‌شده است، یا نام یک مشخصهٔ پنجره (window property) برای تطبیق.

اهداف از پیش‌تعریف‌شدهٔ پشتیبانی‌شده عبارتند از:

x, y, x2, y2

مختصات پنجره، از گوشهٔ بالا-چپ پنجره (x, y) تا گوشهٔ پایین-راست (x2, y2).

width, height

اندازهٔ پنجره.

widthb, heightb

مشابه width و height، اما با احتساب حاشیهٔ پنجره.

border_width

عرض حاشیهٔ پنجره.

fullscreen

نشان‌دهندهٔ تمام‌صفحه بودن پنجره. اگر --no-ewmh-fullscreen تنظیم شده باشد، این وضعیت با اندازه و موقعیت پنجره تعیین می‌شود؛ در غیر این صورت، توسط مشخصهٔ _NET_WM_STATE_FULLSCREEN تعیین می‌گردد.

override_redirect

نشان‌دهندهٔ این که آیا پنجره دارای حالت override-redirect است یا خیر.

argb

نشان‌دهندهٔ این که آیا پنجره دارای نمای بصری ARGB است یا خیر.

focused

نشان‌دهندهٔ فوکوس بودن پنجره.

group_focused

نشان‌دهندهٔ این که آیا پنجره در همان گروه پنجرهٔ فوکوس‌شده قرار دارد یا خیر. این گزینه نیازمند --detect-transient یا --detect-client-leader است.

wmwin

نشان‌دهندهٔ این که آیا پنجره شبیه به یک پنجرهٔ مدیر پنجره (WM) است، یعنی هیچ پنجرهٔ کلاینتی ندارد و override-redirect نیست.

bounding_shaped

نشان‌دهندهٔ این که آیا پنجره دارای شکل محدودکننده (bounding shape) است یا خیر.

rounded_corners

نشان‌دهندهٔ این که آیا شکل محدودکنندهٔ پنجره تنها دارای گوشه‌های گرد است و در بقیهٔ بخش‌ها مستطیلی است یا خیر. این مورد مستلزم bounding_shaped است. به --detect-rounded-corners نیاز دارد. این گزینه هیچ ارتباطی با --corner-radius VALUE ندارد.

window_type

نوع پنجره، همان‌طور که توسط _NET_WM_WINDOW_TYPE تعریف شده است. فقط نام، به عنوان مثال normal به معنای _NET_WM_WINDOW_TYPE_NORMAL است. از آنجا که یک پنجره می‌تواند چندین نوع داشته باشد، در صورتی که هر یک از انواع پنجره مطابقت داشته باشد، بررسی برابری موفقیت‌آمیز خواهد بود.

name

نام پنجره. این مقدار برابر با _NET_WM_NAME یا _WM_NAME است.

class_i, class_g

نمونه (instance) و کلاس کلی پنجره. این‌ها به ترتیب مقادیر اول و دوم _WM_CLASS هستند.

role

نقش پنجره. این مقدار برابر با _WM_WINDOW_ROLE است.

urgent

نشان‌دهندهٔ این که آیا پنجره بر اساس تعریف ICCCM منتظر اقدام فوری کاربر است یا خیر. این مورد فقط بررسی می‌کند که آیا بیت اضطرار (urgency bit) در WM_HINTS تنظیم شده است یا نه. تفسیر این بیت در برنامه‌ها و مدیرهای پنجرهٔ مختلف متفاوت است. برخی از آن‌ها همچنین _NET_WM_STATE_DEMANDS_ATTENTION را در _NET_WM_STATE برای نشان دادن وضعیت اضطراری تنظیم می‌کنند، بنابراین ممکن است بخواهید آن را نیز بررسی کنید (مانند _NET_WM_STATE@[*] = '_NET_WM_STATE_DEMANDS_ATTENTION').

اگر مشخصهٔ پنجره باید روی پنجرهٔ کلاینت (client window) جستجو شود، Target می‌تواند با یک علامت اختیاری @ همراه باشد. در غیر این صورت پنجرهٔ قاب (frame window) استفاده خواهد شد.

Index

شمارهٔ نمایهٔ (اندیس) مشخصه برای جستجو است. به عنوان مثال، [2] سومین مقدار مشخصه را بازمی‌گرداند. در صورت عدم تعیین، اولین مقدار (اندیس [0]) به طور ضمنی استفاده می‌شود. از مقدار ویژهٔ [*] برای تطبیق با تمام مقادیر موجود مشخصه با استفاده از عملگر منطقی OR استفاده کنید. هیچ‌یک از اهداف از پیش‌تعریف‌شده دارای چندین مقدار نیستند، بنابراین از این مورد برای آن‌ها استفاده نکنید.

Operator و Pattern

نحوهٔ تطبیق Target را مشخص می‌کنند. این دو می‌توانند با هم حذف شوند؛ در این حالت اگر Target یک هدف از پیش‌تعریف‌شده نباشد، وجود مشخصهٔ پنجره بررسی می‌شود. برای یک Target از پیش‌تعریف‌شده، حذف Operator و Pattern معادل نوشتن != 0 است.

عملگرهای در دسترس بسته به نوع Target مورد تطبیق تغییر می‌کنند. اگر هدف یک عدد باشد، عملگرها عبارتند از =، >، <، >=، <= و همچنین نقیض آن‌ها که با قرار دادن پیشوند ! قبل از عملگر به دست می‌آید (مانند !=، !> و غیره). اگر هدف یک رشته باشد، عملگرها عبارتند از = (برابری دقیق)، *= (تطبیق زیررشته)، ^= (شروع با)، %= (تطبیق با glob)، ~= (تطبیق با regex)، و همچنین نسخه‌های غیرحساس به بزرگ و کوچکی حروف شامل ?=، *?=، ^?=، %?= و ~?=. عملگرهای رشته‌ای را نیز می‌توان با قرار دادن پیشوند ! قبل از عملگر نقیض کرد (مانند !=، !*= و غیره).

مقدار Pattern یا یک عدد صحیح است یا رشته‌ای که درون علامت‌های نقل‌قول تکی یا دوتایی قرار گرفته است. توالی‌های گریز (escape sequences) به سبک Python-3 برای رشته‌ها پشتیبانی می‌شوند. مقادیر بولی به صورت عدد صحیح تفسیر می‌شوند، بدین معنا که نوشتن true معادل 1 و false معادل 0 است.

مثال‌ها:

# اگر پنجره دارای فوکوس باشد
focused
focused = 1
# اگر پنجره override-redirect نباشد
!override_redirect
override_redirect = false
override_redirect != true
override_redirect != 1
# اگر پنجره یک منو باشد
window_type *= "menu"
_NET_WM_WINDOW_TYPE@ *= "MENU"
# اگر پنجره به عنوان پنهان علامت‌گذاری شده باشد: _NET_WM_STATE شامل _NET_WM_STATE_HIDDEN است
_NET_WM_STATE@[*] = "_NET_WM_STATE_HIDDEN"
# اگر پنجره به عنوان چسبان علامت‌گذاری شده باشد: _NET_WM_STATE شامل اتومی است که شامل
# "sticky" است، بدون در نظر گرفتن بزرگی و کوچکی حروف
_NET_WM_STATE@[*] *?= "sticky"
# اگر نام پنجره شامل "Firefox" باشد، بدون در نظر گرفتن بزرگی و کوچکی حروف
name *?= "Firefox"
_NET_WM_NAME@ *?= "Firefox"
# اگر نام پنجره به "Firefox" ختم شود
name %= "*Firefox"
name ~= "Firefox$"
# اگر پنجره روی پنجرهٔ قاب خود مشخصهٔ _COMPTON_SHADOW با مقدار 0، نوع CARDINAL،
# قالب 32، مقدار 0 داشته باشد
_COMPTON_SHADOW = 0
# اگر سومین مقدار _NET_FRAME_EXTENTS کمتر از 20 باشد، یا هیچ مشخصهٔ
# _NET_FRAME_EXTENTS روی پنجرهٔ کلاینت وجود نداشته باشد
_NET_FRAME_EXTENTS@[2] < 20 || !_NET_FRAME_EXTENTS@
# الگوی اینجا به صورت "dd4" تجزیه خواهد شد
name = "\x64\x64\o64"
# این دو معادل یکدیگر هستند
name = 'Firefox' || name = 'Chromium' && class_i = 'Navigator'
name = 'Firefox' || (name = 'Chromium' && class_i = 'Navigator')

نرم‌افزار picom هنگام باز یا بسته شدن یک پنجره، از پویانمایی محوشدگی پشتیبانی می‌کند. افزون بر آن، picom دارای یک سامانه اسکریپت پویانمایی بسیار قدرتمند است که می‌تواند برای متحرک‌سازی جنبه‌های گوناگون یک پنجره بر اساس محرک‌های مشخص استفاده شود. اسکریپت‌های پویانمایی را می‌توان در فایل پیکربندی با تنظیم گزینه animations تعریف کرد. همچنین می‌توان با استفاده از سامانه WINDOW RULES و تنظیم گزینه animations درون یک قاعده، پویانمایی‌ها را به ازای هر پنجره به‌طور جداگانه تعریف کرد. (پیش از رفتن به آن بخش، ابتدا ادامه این بخش را بخوانید.)

نحو پایه‌ای گزینه animations به صورت زیر است:

animations = ({
        triggers = [ ... ];
        suppressions = [ ... ];
        # more options follow
        ...
}, {
        # another animation script
}, ...)

عبارت animations = ( ... ) گزینه animations را روی یک فهرست تنظیم می‌کند که می‌تواند شامل چندین زیرآیتم باشد و هر آیتم یک اسکریپت پویانمایی است. یک اسکریپت پویانمایی، گروهی شامل چندین مدخل است (مانند { key = value; ... }). همه اسکریپت‌های پویانمایی در برخی گزینه‌های مشترک، مانند triggers و suppressions، اشتراک دارند؛ آن‌ها همچنین شامل گزینه‌های دیگری هستند که یا پویانمایی واقعی را تعریف کرده، یا یک پیش‌تنظیم پویانمایی را انتخاب می‌کنند.

triggers

فهرستی از محرک‌ها که زمان آغاز این پویانمایی را مشخص می‌کنند. هر محرک می‌تواند حداکثر یک اسکریپت پویانمایی مرتبط داشته باشد، در غیر این صورت رفتار تعریف‌نشده خواهد بود و یک هشدار صادر می‌شود.

محرک‌های معتبر عبارتند از:

open

هنگامی که یک پنجره باز می‌شود.

close

هنگامی که یک پنجره بسته می‌شود.

show

هنگامی که یک پنجره کمینه‌شده یا نمادین‌شده نمایش داده می‌شود.

hide

هنگامی که یک پنجره کمینه یا نمادین می‌شود.

increase-opacity

هنگامی که کدر بودن یا شفافیت ماتی یک پنجره افزایش می‌یابد. اگر کدر بودن و شفافیت ماتی در جهات متفاوتی تغییر کنند، تغییر opacity اولویت دارد.

decrease-opacity

هنگامی که کدر بودن یا شفافیت ماتی یک پنجره کاهش می‌یابد. اگر کدر بودن و شفافیت ماتی در جهات متفاوتی تغییر کنند، تغییر opacity اولویت دارد.

size, position

هنگامی که اندازه یا موقعیت مکانی یک پنجره تغییر می‌کند. اگر هر دو تغییر کنند، محرک size اولویت دارد. (آزمایشی)

color

هنگامی که ویژگی رنگ پنجره تغییر می‌کند. در حال حاضر این تنها شامل shadow-color می‌شود.

geometry

نام مستعار size + position.

هشدار

محرک‌های size و position آزمایشی هستند. استفاده از این محرک‌ها به این معناست که می‌پذیرید این پویانمایی‌ها هنگام تغییر اندازه یا جابه‌جایی دستی پنجره (مانند زمانی که پنجره را با ماوس می‌کشید) نیز فعال خواهند شد.

suppressions

مشخص می‌کند هنگام اجرای این پویانمایی، کدام پویانمایی‌های دیگر باید سرکوب شوند. در حالت عادی، اگر در زمان اجرای یک پویانمایی محرک دیگری فعال شود، پویانمایی در حال اجرا متوقف شده و پویانمایی جدید آغاز می‌گردد. اگر می‌خواهید از این رفتار جلوگیری کنید، می‌توانید گزینه suppressions را روی فهرستی از محرک‌هایی که باید سرکوب شوند تنظیم کنید. این گزینه اختیاری است و مقدار پیش‌فرض آن یک فهرست خالی می‌باشد.

تعریف یک پویانمایی کمی پیچیده است. برای ساده‌تر کردن دسترسی به پویانمایی‌ها، بدون اینکه نیازی به یادگیری جزئیات دقیق سامانه اسکریپت‌نویسی داشته باشید، picom تعدادی پیش‌تنظیم ارائه می‌دهد که می‌توانید تنها با مشخص کردن چند گزینه از آن‌ها استفاده کنید.

برای انتخاب یک پیش‌تنظیم، گزینه preset را مانند زیر به یک گروه اسکریپت پویانمایی اضافه کنید:

animations = ({
        triggers = [ "close", "hide" ];
        preset = "slide-out";
        direction = "down";
        ...
}, ...)

برخی پیش‌تنظیم‌ها دارای گزینه‌های اضافی هستند که می‌توانید برای سفارشی‌سازی پویانمایی آن‌ها را تنظیم کنید. در این مثال، پیش‌تنظیم slide-out دارای گزینه direction است که جهت پویانمایی لغزشی را مشخص می‌کند.


نکته

توصیف پویانمایی‌ها تنها با کلمات دشوار است. ما ویدیوهای کوتاهی داریم که هر پیش‌تنظیم را نمایش می‌دهند، اما متأسفانه نمی‌توان آن‌ها را در این صفحه راهنما گنجاند. از سوی دیگر، نسخه وب این سند که در وب‌سایت ما در آدرس
https://picom.app میزبانی می‌شود، شامل این ویدیوها است.

پیش‌تنظیم‌های زیر در دسترس هستند:

slide-in, slide-out

نمایش/پنهان کردن پنجره با یک پویانمایی لغزشی.

گزینه‌ها

direction

جهت لغزش؛ مقادیر معتبر عبارتند از up، down، left، right.

duration

مدت زمان پویانمایی بر حسب ثانیه. (می‌تواند اعشاری باشد).

fly-in, fly-out

نمایش/پنهان کردن پنجره با یک پویانمایی پروازی.

گزینه‌ها

direction

جهت پرواز؛ مقادیر معتبر عبارتند از up، down، left، right.

duration

مدت زمان پویانمایی بر حسب ثانیه.

appear, disappear

نمایش/پنهان کردن پنجره با ترکیبی از مقیاس‌بندی و محوشدگی.

گزینه‌ها

scale

ضریب مقیاس‌بندی پنجره؛ مقدار 1.0 به معنای عدم مقیاس‌بندی است.

duration

مدت زمان پویانمایی بر حسب ثانیه.

geometry-change

پویانمایی تغییر هندسه (یعنی اندازه و موقعیت مکانی) پنجره.


هشدار

این پیش‌تنظیم هم از محرک geometry و هم از متغیر خروجی saved-image-blend استفاده می‌کند. هر دوی این ویژگی‌ها آزمایشی هستند و ممکن است طبق انتظار کار نکنند.

گزینه‌ها

duration

مدت زمان پویانمایی بر حسب ثانیه.

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

نحو پایه (Basic syntax)

برای نشان دادن دقیق و ملموس مفهوم بالا، در اینجا یک مثال آورده شده است:

# this animation script does nothing to your windows by the way.
animations = ({
        # common options, these are not part of the collection of variables
        triggers = [ "open" ];
        # variables
        a = 10;
        b = "a * 10";
        c = "a + b";
        d = {
                curve = "cubic-bezier(0.25, 0.1, 0.25, 1.0)";
                duration = 0.5;
                delay = 0;
                start = 0;
                end = 1;
        };
        # more options follow
        # ...
}, ...)

یک متغیر می‌تواند به‌صورت یک عدد، یک عبارت (expression) یا یک تابع زمان‌بندی (timing function) تعریف شود. در مثال بالا، a به‌صورت یک عدد (10)، b به‌صورت نتیجه عبارت a * 10 و c نیز به همین ترتیب تعریف شده‌اند. عبارتی که برای تعریف یک متغیر به کار می‌رود می‌تواند به متغیرهای دیگر در همان اسکریپت ارجاع دهد. از این طریق می‌توانید پویانمایی‌های پیچیده‌ای ایجاد کنید. تا زمانی که هیچ ارجاع چرخه‌ای وجود نداشته باشد، محل تعریف متغیرها در اسکریپت اهمیتی ندارد.


نکته

از آنجا که نام متغیرها می‌تواند شامل خط تیره (-) باشد، علامت‌های منفی در عبارت‌ها باید با فاصله احاطه شوند. برای مثال، a - 10 به معنای a منهای 10 است، در حالی که a-10 متغیری به نام a-10 است.

متغیر d یک تابع زمان‌بندی است؛ یعنی گروهی با چندین گزینه که رفتار آن را مشخص می‌کنند. توابع زمان‌بندی عاملی هستند که پویانمایی را به حرکت درمی‌آورند. اگر هیچ تابع زمان‌بندی در یک اسکریپت پویانمایی تعریف نشود، هیچ چیزی متحرک نخواهد شد و پویانمایی فوراً پایان می‌یابد.

این گزینه‌ها برای یک تابع زمان‌بندی معتبر هستند:

curve

نوع منحنی و پارامترهای آن. می‌تواند linear باشد که هیچ پارامتری نمی‌پذیرد و یک منحنی خطی را تعریف می‌کند؛ یا cubic-bezier که چهار پارامتر برای چهار نقطه کنترلی منحنی بزیه درجه سه دریافت می‌کند؛ یا steps که یک یا دو پارامتر می‌گیرد: اولی تعداد گام‌ها و دومی “jumpterm” است که می‌تواند jump-start، jump-end، jump-none یا jump-both باشد. گزینه curve اختیاری است؛ اگر مشخص نشود، منحنی خطی به کار خواهد رفت.

delay

تعداد ثانیه‌های انتظار پیش از شروع تغییر مقدار. اختیاری است، مقدار پیش‌فرض 0 است.

duration

تعداد ثانیه‌هایی که پس از شروع تغییر مقدار، طول می‌کشد تا متغیر از start به end برسد. اجباری است و باید بزرگ‌تر از 0 باشد.

start

مقدار اولیه متغیر. اجباری است.

end

مقدار نهایی متغیر. اجباری است.

همه گزینه‌ها به جز curve را می‌توان با عبارت‌ها مقداردهی کرد. گزینه‌های تابع زمان‌بندی، خود متغیر به شمار نمی‌روند.


نکته

اگر هر یک از گزینه‌های delay، duration، start یا end با یک عبارت تعریف شده باشند، آن عبارت فقط یک بار در زمان شروع پویانمایی ارزیابی می‌شود. سپس مقادیر delay، duration، start و end در طول مدت پویانمایی ثابت خواهند ماند.

مدت‌زمان کل یک پویانمایی بر اساس مدت‌زمان طولانی‌ترین تابع زمان‌بندی تعیین می‌شود. پویانمایی زمانی به پایان می‌رسد که طولانی‌ترین تابع زمان‌بندی خاتمه یابد. پس از پایان پویانمایی، اثرات آن بر روی پنجره حذف خواهد شد.

هیچ محدودیتی در نحوه نام‌گذاری متغیرها وجود ندارد. بدیهی است که آن‌ها نمی‌توانند با نام گزینه‌های عمومی (triggers، suppressions و preset) تداخل داشته باشند، اما جدا از این مورد، تا زمانی که libconfig اجازه دهد می‌توانید هر نامی را انتخاب کنید. برخی از نام‌های متغیرها معانی ویژه‌ای دارند که در ادامه بررسی خواهند شد.

متغیرهای خروجی (Output variables)

اکنون می‌دانید چگونه یک اسکریپت پویانمایی بنویسید. اما آنچه نوشتیم در عمل هیچ تغییری روی پنجره ایجاد نمی‌کند. برای متحرک‌سازی پنجره، مجموعه‌ای از نام‌های متغیر ویژه را تعریف می‌کنیم که آن‌ها را “متغیرهای خروجی” می‌نامیم. اگر متغیرهایی با این نام‌ها تعریف کنید، مقادیر آن‌ها برای متحرک‌سازی پنجره به کار می‌رود.

برای مثال، اگر یک اسکریپت پویانمایی را به این شکل تعریف کنید:

animations = ({
        triggers = [ "open" ];
        offset-x = {
                duration = 2;
                start = 0;
                end = 100;
        };
}, ...)

آنگاه با باز شدن پنجره، در طول ۲ ثانیه ۱۰۰ پیکسل به سمت راست جابه‌جا خواهد شد.


هشدار

اگرچه گفتیم می‌توانید نام متغیرها را آزادانه انتخاب کنید، اما اگر برخی از آن‌ها در آینده به عنوان متغیر خروجی تعریف شوند، اسکریپت پویانمایی شما رفتار غیرمنتظره‌ای خواهد داشت. برای جلوگیری از این گونه مشکلات، چندین رده از نام‌های متغیر را رزرو کرده‌ایم که هرگز برای متغیرهای خاص به کار نخواهند رفت. این نام‌ها عبارتند از: ۱) هر نامی که با یک حرف منفرد و به دنبال آن یک خط تیره شروع شود (مانند a-، b- و غیره)؛ ۲) هر نامی که با var-، tmp- یا user- آغاز شود. اگر نیاز به تعریف یک متغیر غیرخروجی دارید، از یکی از این نام‌ها استفاده کنید.

در حال حاضر، این متغیرهای خروجی پشتیبانی می‌شوند:

offset-x، offset-y

جابه‌جایی (offset) پنجره به ترتیب در راستای محورهای X و Y. بدنه پنجره به این مقدار جابه‌جا خواهد شد. توجه داشته باشید که این گزینه بر سایه تأثیری ندارد؛ بنابراین اگر این متغیرها را تعریف کنید اما shadow-offset-x یا shadow-offset-y را مقداردهی نکنید، سایه در جایگاه بدون پویانمایی پنجره باقی خواهد ماند.

shadow-offset-x، shadow-offset-y

جابه‌جایی سایه به ترتیب در راستای محورهای X و Y. سایه به این مقدار جابه‌جا خواهد شد. این جابه‌جایی پس از مقیاس‌بندی پنجره و سایه اعمال می‌شود.

opacity

میزان کدر بودن (opacity) پنجره. این یک مقدار عددی بین 0 و 1 است.

blur-opacity

میزان کدر بودن تاری (blur) پشت پنجره. این یک مقدار عددی بین 0 و 1 است.

shadow-opacity

میزان کدر بودن سایه. این یک مقدار عددی بین 0 و 1 است.

shadow-red، shadow-green، shadow-blue

رنگ سایه. هر مؤلفه به‌صورت مجزا مشخص می‌شود و هر عدد بین 0 و 1 است.

scale-x، scale-y، shadow-scale-x، shadow-scale-y

ضریب مقیاس پنجره و سایه به ترتیب در راستای محورهای X و Y. مقدار 1.0 به معنای بدون تغییر اندازه است. بدنه پنجره و سایه به‌طور مستقل مقیاس‌بندی می‌شوند. مبدأ مقیاس در هنگام تغییر اندازه برای هر دوی آن‌ها، گوشه بالا-چپ پنجره خواهد بود.

crop-x، crop-y، crop-width، crop-height

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

saved-image-blend

هنگامی که هندسه (geometry) پنجره تغییر می‌کند، محتوای آن اغلب دستخوش دگرگونی شدیدی می‌شود که ناپیوستگی نامطلوبی پدید می‌آورد. این متغیر خروجی امکان ادغام و ترکیب (blend) محتوای پنجره را پیش و پس از تغییر هندسه فراهم می‌کند؛ تصویرهای پیش و پس از تغییر متناسب با پویانمایی کشیده می‌شوند. بدین ترتیب می‌توانید تغییرات هندسه را به‌صورت کاملاً نرم و روان متحرک‌سازی کنید. این مقدار عددی بین 0 و 1 است؛ مقدار 0 به معنای عدم استفاده از تصویر ذخیره‌شده است، در حالی که 1 یعنی تنها تصویر ذخیره‌شده دیده خواهد شد. (آزمایشی)

هشدار

متغیر saved-image-blend آزمایشی است. این متغیر ممکن است عملکرد نادرستی داشته باشد، مصنوعات بصری ایجاد کند یا باعث افت سرعت سیستم شود. در صورت بروز هرگونه مشکل برای کمک به بهبود آن می‌توانید یک issue در GitHub ثبت کنید، اگرچه تضمینی برای حل قطعی آن وجود ندارد.

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


مهم

اگر نام یک متغیر خروجی در اسکریپت پویانمایی شما تعریف نشود، مقدار پیش‌فرض متناظر با وضعیتی که پنجره در آن قرار دارد را خواهد گرفت. به‌ویژه، اگر متغیر opacity را در اسکریپت پویانمایی برای راه‌انداز “close” یا “hide” تعریف نکنید، یک پنجره بسته به صورت پیش‌فرض مقدار کدر بودن 0 خواهد داشت؛ در نتیجه پنجره به طور آنی ناپدید خواهد شد. در بیشتر موارد، لازم است مقدار opacity را روی 1 تنظیم کنید تا پنجره در طول مدت پویانمایی نمایان بماند.

متغیرهای زمینه (Context variables)

اکنون می‌دانید چگونه پنجره را متحرک کنید. اما این قابلیت هنوز برای پیاده‌سازی بسیاری از پویانمایی‌های دلخواه کافی نیست. برای نمونه، اگر بخواهید پنجره به بیرون از سمت راست صفحه حرکت کند، تعداد پیکسل‌های لازم برای جابه‌جایی به پهنای پنجره و موقعیت آن روی صفحه بستگی خواهد داشت. برای تکمیل این قابلیت‌ها، متغیرهای زمینه ارائه شده‌اند.

متغیر زمینه، متغیری است که picom برای شما تعریف می‌کند و می‌توانید مانند هر متغیر دیگری از آن در عبارت‌ها استفاده نمایید. مقادیر آن‌ها ویژگی‌های خاصی از پنجره در حال متحرک‌سازی را بازتاب می‌دهند.


هشدار

اگر متغیری با نام یکسان با یکی از متغیرهای زمینه تعریف کنید، متغیر شما متغیر زمینه را می‌پوشاند (shadow می‌کند). از آنجا که در آینده ممکن است متغیرهای زمینه بیشتری اضافه شوند، جلوگیری از این تداخل دشوار خواهد بود. بنابراین، همان قاعده متغیرهای خروجی در اینجا نیز صدق می‌کند: اگر نیاز به تعریف متغیر موقت دارید، از یکی از نام‌های رزرو شده استفاده کنید.

در حال حاضر، این متغیرهای زمینه تعریف شده‌اند:

window-x، window-y

مختصات گوشه بالا-چپ پنجره.

window-width، window-height

اندازه پنجره.

window-x-before، window-y-before، window-width-before، window-height-before

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

window-monitor-x، window-monitor-y، window-monitor-width، window-monitor-height

مستطیلی را تعریف می‌کند که نمایانگر نمایشگری است که پنجره روی آن قرار دارد. اگر پنجره به‌طور کامل درون هیچ نمایشگری جای نگرفته باشد، این مستطیل کل صفحه مجازی را منعکس خواهد کرد.

window-raw-opacity-before، window-raw-opacity

راه‌اندازهای پویانمایی معمولاً با تغییر در کدر بودن پنجره همراه‌اند؛ برای مثال هنگام باز شدن پنجره، شفافیت آن از 0 به 1 تغییر می‌کند. این دو متغیر، کدر بودن پنجره را برای فریم قبلی و فریم فعلی نشان می‌دهند. این متغیرها در زمان گذار نرم و روان کدر بودن پنجره کاربرد دارند.

window-blur-opacity-before، window-blur-opacity

میزان کدر بودن تاری پنجره برای فریم قبلی و فعلی.

window-shadow-red، window-shadow-green، window-shadow-blue، window-shadow-red-before، window-shadow-green-before، window-shadow-blue-before

رنگ سایه پیش و پس از تغییر رنگ سایه. (یادداشت‌های زیر را درباره متغیرهای window-*-before ببینید).

مهم

تمام متغیرهای window-*-before در هر فریم به‌روزرسانی می‌شوند و وضعیت پنجره در فریم قبلی را نشان می‌دهند؛ بدین معنی که آن‌ها تنها در یک فریم منفرد (زمانی که پویانمایی تازه آغاز شده است) معنادار هستند. بنابراین فقط باید از آن‌ها برای تعیین مقادیر start، end، duration یا delay در تابع زمان‌بندی استفاده کنید، زیرا این مقادیر تنها یک بار هنگام شروع پویانمایی ارزیابی می‌گردند.

اگر اسکریپت پویانمایی ایجاد کرده‌اید که فکر می‌کنید بسیار جالب است، تشویق می‌شوید آن را با جامعه به اشتراک بگذارید. می‌توانید یک issue یا یک pull request برای picom در GitHub ثبت کنید تا این شانس را داشته باشید که پویانمایی شما به عنوان یکی از پیش‌تنظیم‌ها گنجانده شود و توسط همگان مورد استفاده قرار گیرد.

این بخش رابط کاربری یک سایه‌زن (shader) سفارشی، نحوه استفاده picom از آن، و پارامترهایی که توسط picom به سایه‌زن ارسال می‌شوند را شرح می‌دهد.

یک سایه‌زن سفارشی، برنامه‌ای از نوع سایه‌زن قطعه GLSL (یا همان GLSL fragment shader) است که می‌تواند برای لغو روش پیش‌فرض رندر شدن پنجره‌ها استفاده شود. در صورت استفاده از سایه‌زن سفارشی، جلوه‌های پیش‌فرض picom (مانند کم‌نور کردن، معکوس‌سازی رنگ و غیره) دیگر به‌طور خودکار اعمال نخواهند شد. این وظیفه سایه‌زن سفارشی است که این جلوه‌ها را اعمال کند.

رابط بین picom و سایه‌زن سفارشی به backend مورد استفاده وابسته است. پشتانه xrender اصلاً از سایه‌زن پشتیبانی نمی‌کند. در اینجا رابط ارائه‌شده توسط backend glx را توضیح می‌دهیم.

سایه‌زن باید تابعی به نام vec4 window_shader() را تعریف کند که نقطه ورود (entry point) سایه‌زن خواهد بود. مقدار vec4 بازگردانده‌شده برای تنظیم gl_FragColor استفاده می‌شود. تابع vec4 default_post_processing(vec4 c) نیز برای اعمال جلوه‌های پیش‌فرض picom به رنگ ورودی 'c' در نظر گرفته شده است.

متغیرهای یکنواخت/ورودی (uniform/input) زیر در دسترس سایه‌زن قرار دارند:

in vec2 texcoord;             // texture coordinate of the fragment
uniform float opacity;        // opacity of the window (0.0 - 1.0)
uniform float dim;            // dimming factor of the window (0.0 - 1.0, higher means more dim)
uniform float corner_radius;  // corner radius of the window (pixels)
uniform float border_width;   // estimated border width of the window (pixels)
uniform bool invert_color;    // whether to invert the color of the window
uniform sampler2D tex;        // texture of the window
uniform vec2 effective_size;  // effective dimensions of the texture (repeats pixels if larger than tex)
uniform sampler2D brightness; // estimated brightness of the window, 1x1 texture
uniform float max_brightness; // configured maximum brightness of the window (0.0 - 1.0)
uniform float time;           // time in milliseconds, counting from an unspecified starting point

رفتار پیش‌فرض رندر پنجره در picom را می‌توان با سایه‌زن زیر بازتولید کرد:

#version 330
in vec2 texcoord;             // texture coordinate of the fragment
uniform sampler2D tex;        // texture of the window
// Default window post-processing:
// 1) invert color
// 2) opacity / transparency
// 3) max-brightness clamping
// 4) rounded corners
vec4 default_post_processing(vec4 c);
// Default window shader:
// 1) fetch the specified pixel
// 2) apply default post-processing
vec4 window_shader() {
    vec2 texsize = textureSize(tex, 0);
    vec4 c = texture2D(tex, texcoord / texsize, 0);
    return default_post_processing(c);
}

انتظار می‌رود این رابط تا حد زیادی پایدار باقی بماند.

در صورتی که پشتیبانی از libconfig در picom کامپایل شده باشد، امکان خواندن تنظیمات از فایل پیکربندی وجود دارد. اگر گزینه --config به کار نرود، picom به دنبال فایل پیکربندی ابتدا در $XDG_CONFIG_HOME/picom.conf (معمولاً ~/.config/picom.conf)، سپس $XDG_CONFIG_HOME/picom/picom.conf، سپس $XDG_CONFIG_DIRS/picom.conf (اغلب /etc/xdg/picom.conf) و سپس در $XDG_CONFIG_DIRS/picom/picom.conf می‌گردد.

هنگامی که دستور @include در فایل پیکربندی استفاده شود، picom ابتدا فایل ضمیمه‌شده را در پوشه والد picom.conf، سپس در $XDG_CONFIG_HOME/picom/include/ و در نهایت در $XDG_CONFIG_DIRS/picom/include جستجو خواهد کرد.

نرم‌افزار picom از قالب عمومی فایل‌های پیکربندی libconfig استفاده می‌کند. یک نمونه فایل پیکربندی با نام picom.sample.conf در درخت سورس برنامه موجود است. اکثر سوییچ‌های خط فرمان را می‌توان به عنوان گزینه‌هایی در فایل پیکربندی نیز استفاده کرد. برای نمونه، گزینه --vsync که پیش‌تر مستند شد را می‌توان با عبارت `vsync = ` در فایل پیکربندی مقداردهی کرد. گزینه‌های خط فرمان همواره تنظیمات تعیین‌شده در فایل پیکربندی را رونویسی (overwrite) خواهند کرد.

برخی گزینه‌ها را فقط می‌توان در فایل پیکربندی مشخص کرد. این گزینه‌ها شامل rules (بخش قوانین پنجره (WINDOW RULES) را ببینید)، animations (بخش پویانمایی‌ها (ANIMATIONS) را ببینید) و wintypes (توضیحات ذیل) می‌شوند.

تنظیمات مختص نوع پنجره (Window-type-specific) به شما اجازه می‌دهند تا گزینه‌های خاصی را بر اساس نوع پنجره تعیین کنید. این تنظیمات فقط در فایل پیکربندی در دسترس هستند. ساختار این گزینه به صورت زیر است:

wintypes:
{
  WINDOW_TYPE = { fade = BOOL; shadow = BOOL; opacity = FLOAT; focus = BOOL; blur-background = BOOL; full-shadow = BOOL; clip-shadow-above = BOOL; redir-ignore = BOOL; };
};

هشدار (Warning)

استفاده از این روش به هیچ عنوان توصیه نمی‌شود؛ برای روش پیشنهادی تنظیم گزینه‌های مختص پنجره، به بخش قوانین پنجره (WINDOW RULES) مراجعه کنید.


مهم (Important)

بر اساس استانداردهای مدیر پنجره، یک پنجره می‌تواند چندین نوع مختلف داشته باشد. اما با توجه به محدودیت نحوه پیاده‌سازی wintypes، اگر یک پنجره چندین نوع داشته باشد، برای اعمال گزینه‌های wintypes یکی از آن نوع‌ها به شکل تصادفی انتخاب خواهد شد. باز هم توصیه می‌شود که به جای آن از بخش قوانین پنجره (WINDOW RULES) استفاده کنید.

مقدار WINDOW_TYPE یکی از ۱۵ نوع پنجره تعریف‌شده در استاندارد EWMH است: "unknown"، "desktop"، "dock"، "toolbar"، "menu"، "utility"، "splash"، "dialog"، "normal"، "dropdown_menu"، "popup_menu"، "tooltip"، "notification"، "combo" و "dnd".

گزینه‌های زیر برای هر نوع پنجره در دسترس هستند:

fade, shadow

تنظیمات سایه و محوشدگی (fade) مختص آن نوع پنجره را کنترل می‌کند.

opacity

میزان کدر بودن (opacity) پیش‌فرض نوع پنجره را مشخص می‌کند.

focus

مشخص می‌کند که آیا پنجره‌ای از این نوع باید همیشه به صورت متمرکز (focused) در نظر گرفته شود یا خیر. (به‌طور پیش‌فرض، تمامی انواع پنجره‌ها به جز "normal" و "dialog" این گزینه را به صورت فعال دارند.)

blur-background

کنترل می‌کند که آیا پس‌زمینه شفاف پنجره‌ای از این نوع مات (blur) شود یا خیر.

full-shadow

مشخص می‌کند که آیا سایه در زیر قسمت‌هایی از پنجره که به‌طور عادی دیده نمی‌شوند نیز رسم شود یا خیر. هنگامی مفید است که پنجره بخش‌های شفاف دارد و می‌خواهید در آن بخش‌ها سایه بیفتد.

clip-shadow-above

کنترل می‌کند سایه‌هایی که ممکن است روی پنجره رسم شوند بریده (clip) شوند یا خیر. این گزینه برای پنجره‌های dock که نباید هیچ سایه‌ای روی آنها رسم شود بسیار کاربردی است.

redir-ignore

تعیین می‌کند که آیا این نوع پنجره‌ها باید پس از لغو بازهدایت (unredirect)، مجدداً باعث بازهدایت تصویر صفحه شوند یا خیر. اگر گزینه --unredir-if-possible را تنظیم کرده‌اید و نمی‌خواهید پنجره خاصی سبب بازهدایت غیرضروری صفحه نمایش شود، می‌توانید این گزینه را روی true قرار دهید.

می‌توانید نحوهٔ مات شدن پس‌زمینهٔ پنجره را با استفاده از بخش 'blur' در فایل پیکربندی خود تنظیم کنید. در اینجا یک مثال آورده شده است:

blur:
{
  method = "gaussian";
  size = 10;
  deviation = 5.0;
};

گزینه‌های موجود برای بخش blur عبارت‌اند از:

method

یک رشته. روش مات‌سازی را کنترل می‌کند. با گزینهٔ خط فرمان --blur-method مطابقت دارد. انتخاب‌های موجود عبارت‌اند از: none برای غیرفعال کردن مات‌سازی؛ gaussian برای مات‌سازی گاوسی؛ box برای مات‌سازی جعبه‌ای؛ kernel برای مات‌سازی کانولوشن با یک کرنل سفارشی؛ dual_kawase برای مات‌سازی dual-filter kawase. (پیش‌فرض: none)

size

یک عدد صحیح. اندازهٔ کرنل مات‌سازی، که برای روش‌های مات‌سازی gaussian و box لازم است. برای روش kernel، اندازه در خود کرنل گنجانده شده است. با گزینهٔ خط فرمان --blur-size مطابقت دارد (پیش‌فرض: 3).

deviation

یک عدد ممیز شناور. انحراف معیار برای روش مات‌سازی gaussian. با گزینهٔ خط فرمان --blur-deviation مطابقت دارد (پیش‌فرض: 0.84089642).

strength

یک عدد صحیح در محدودهٔ 0-20. شدت روش مات‌سازی dual_kawase. با گزینهٔ خط فرمان --blur-strength مطابقت دارد. اگر روی صفر تنظیم شود، مقدار درخواست‌شده توسط --blur-size به‌صورت تقریبی محاسبه می‌شود (پیش‌فرض: 5).

kernel

یک رشته. کرنل مورد استفاده برای روش مات‌سازی kernel، که در همان قالب گزینهٔ --blur-kern مشخص می‌شود. با گزینهٔ خط فرمان --blur-kern مطابقت دارد.

•برنامهٔ picom با دریافت SIGUSR1 مجدداً خود را مقداردهی اولیه می‌کند.

امکان کنترل picom از طریق پیام‌های D-Bus با اجرای picom به همراه --dbus و ارسال پیام‌ها به com.github.chjj.compton.<DISPLAY> وجود دارد. شناسهٔ <DISPLAY> همان نمایشگری است که توسط picom استفاده می‌شود و در آن تمام نویسه‌های غیر الفبایی-عددی به زیرخط (underscore) تبدیل شده‌اند. برای مثال، برای DISPLAY=:0.0 باید از com.github.chjj.compton._0_0 استفاده کنید.

متدها و سیگنال‌های D-Bus هنوز پایدار نیستند، بنابراین در حال حاضر مستند نشده‌اند.

•غیرفعال کردن پردازش فایل پیکربندی:
$ picom --config /dev/null
•اجرای picom با سایه و محوشدگی تدریجی (fading) سمت کلاینت:
$ picom -cf
•همانند مورد بالا، به‌علاوهٔ شفاف‌سازی ۸۰ درصدی پنجره‌های غیرفعال، شفاف‌سازی ۸۰ درصدی کادر پنجره، عدم محوشدگی هنگام باز/بسته شدن پنجره، و انتقال فرایند به پس‌زمینه (fork):
$ picom -bcf -i 0.8 -e 0.8 --no-fading-openclose
•رسم سایه‌های سفید:
$ picom -c --shadow-red 1 --shadow-green 1 --shadow-blue 1
•جلوگیری از رسم سایه روی پنجرهٔ wbar:
$ picom -c --shadow-exclude 'class_g = "wbar"'
•فعال‌سازی VSync با بک‌اند GLX:
$ picom --backend glx --vsync

لطفاً گزارش باگ‌ها را ارسال کنید به https://github.com/yshui/picom.

اطلاعات قدیمی در این صفحه راهنما یک باگ محسوب می‌شود.

صفحه خانگی: https://github.com/yshui/picom

xcompmgr(1), picom-inspect(1), picom-trans(1)

Yuxuan Shui

2026-04-03 picom