| PICOM(1) | User Commands | PICOM(1) |
نام (NAME)
picom - یک کامپوزیتور برای X11
خلاصه دستور (SYNOPSIS)
picom [OPTIONS]
توضیحات (DESCRIPTION)
نرمافزار picom یک کامپوزیتور (ترکیبگر پنجره) مبتنی بر نسخهٔ Dana Jansens از xcompmgr است (که خود توسط Keith Packard نوشته شده بود). این برنامه شامل بهبودهایی نسبت به نسخهٔ اصلی xcompmgr است، مانند تنظیم میزان کدر بودن چارچوب پنجره و شفافیت پنجرههای غیرفعال.
گزینهها (OPTIONS)
-h, --help
-r, --shadow-radius=RADIUS
-o, --shadow-opacity=OPACITY
-l, --shadow-offset-x=OFFSET
-t, --shadow-offset-y=OFFSET
-I, --fade-in-step=OPACITY_STEP
-O, --fade-out-step=OPACITY_STEP
-D, --fade-delta=MILLISECONDS
-c, --shadow
-f, --fading
-i, --inactive-opacity=OPACITY
-e, --frame-opacity=OPACITY
-b, --daemon
--log-level
--log-file
--show-all-xerrors
--config PATH
--write-pid-path PATH
--plugins PATH
--shadow-color STRING
--shadow-red VALUE
--shadow-green VALUE
--shadow-blue VALUE
--inactive-opacity-override
--active-opacity OPACITY
--inactive-dim VALUE
--corner-radius VALUE
--corner-radius-rules RADIUS:CONDITION
--rounded-corners-exclude CONDITION
--no-frame-pacing
--mark-wmwin-focused
--mark-ovredir-focused
--no-fading-openclose
--no-fading-destroyed-argb
--shadow-ignore-shaped
--detect-rounded-corners
--detect-client-opacity
--vsync, --no-vsync
--use-ewmh-active-win
--unredir-if-possible
--unredir-if-possible-delay MILLISECONDS
--unredir-if-possible-exclude CONDITION
--shadow-exclude CONDITION
--clip-shadow-above CONDITION
--fade-exclude CONDITION
--focus-exclude CONDITION
--inactive-dim-fixed
--detect-transient
--detect-client-leader
--blur-method, --blur-size, --blur-deviation, --blur-strength
--blur-background
--blur-background-frame
--blur-background-fixed
--blur-kern MATRIX
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
--opacity-rule OPACITY:CONDITION
--crop-shadow-to-monitor
--backend BACKEND
--no-use-damage
--xrender-sync-fence
--force-win-blend
--dbus
--benchmark CYCLES
--benchmark-wid WINDOW_ID
--no-ewmh-fullscreen
--max-brightness
--transparent-clipping
--transparent-clipping-exclude CONDITION
--window-shader-fg SHADER
--window-shader-fg-rule SHADER:CONDITION
--root-pixmap-shader SHADER
--dithered-present
قواعد پنجره (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 مراجعه کنید.
نحو (Syntax)
قواعد پنجره تنها در فایل پیکربندی در دسترس هستند. برای تنظیم قواعد پنجره، گزینهٔ rules را در فایل پیکربندی به چیزی شبیه به این مقداردهی کنید:
rules = (
{ match = "focused"; opacity = 1; },
{ match = "name = 'firefox'"; shadow = true; },
# ... and so on
)
مقدار rules = ( ... ) این گزینه را روی یک فهرست (list) تنظیم میکند که میتواند شامل چندین زیرمورد باشد. برای rules، هر زیرمورد باید یک گروه باشد (مانند { key = value; ... }) که نشاندهندهٔ یک شرط و مجموعهای از گزینهها برای اعمال در هنگام برقراری شرط است. این زیرموردها به ترتیبی که در فایل پیکربندی آمدهاند مطابقت داده میشوند و با برقراری هر شرط، گزینهها اعمال میگردند. اگر یک گزینه چندین بار تنظیم شود، آخرین مقدار اعمال خواهد شد.
درون هر زیرمورد، این کلیدها در دسترس هستند:
match
shadow
full-shadow
shadow-color
fade
opacity
blur-opacity
dim
corner-radius
blur-background
invert-color
clip-shadow-above
unredir
transparent-clipping
shader
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
بیشتر گزینههای قوانین باید نگاشت یکبهیک (1:1) با قوانین جدید پنجره داشته باشند. در اینجا فهرستی از موارد غیربدیهی و نحوهٔ دستیابی به همان اثر با استفاده از قوانین پنجره آورده شده است.
تاریکسازی و ماتسازی حالت غیرفعال
نکته
تنظیم صریح opacity توسط یک قانون، مقدار opacity حاصل از مشخصههای پنجره (مانند _NET_WM_WINDOW_OPACITY) را که توسط ابزارهایی مانند picom-trans برای تنظیم شفافیت پنجره استفاده میشود، بازنویسی (override) خواهد کرد. اگر میخواهید همچنان از ابزارهایی مانند picom-trans استفاده کنید، میتوانید با تطبیق ! _NET_WM_WINDOW_OPACITY، مقدار opacity را تنها برای پنجرههایی که فاقد این مشخصه هستند تنظیم نمایید.
پنجرهٔ فعال
گوشههای گرد و پنجرههای تمامصفحه
rules = (
{ match = "fullscreen"; corner-radius = 0; },
)
قالب شرطها (FORMAT OF CONDITIONS)
برخی از گزینهها یک رشتهٔ شرط را برای تطبیق پنجرههای مشخص میپذیرند. یک رشتهٔ شرط از یک یا چند شرط تشکیل شده که توسط عملگرهای منطقی به یکدیگر متصل شدهاند.
گرامر صوری (formal grammar) برای یک شرط به شکل زیر است:
Condition <- Term ('||' Term)*
Term <- Item ('&&' Item)*
Item <- '!'? Target '@'? ('[' Index ']')? (Operator Pattern)? | '(' Condition ')'
به طور دقیقتر، یک شرط دنبالهای از یک یا چند Item برای تطبیق الگوهای ساده است که توسط عملگرهای منطقی && (و) و || (یا) به هم متصل شدهاند. عملگر && اولویت بالاتری نسبت به || دارد. هر دو عملگر شرکتپذیر از چپ (left-associative) هستند. برای افزایش اولویت میتوان از پرانتز استفاده کرد. اگر یک Item دارای عملگر نقیض پیشوند (!) باشد، نتیجهٔ آن مورد نقیض میشود.
درون یک Item:
Target
اهداف از پیشتعریفشدهٔ پشتیبانیشده عبارتند از:
x, y, x2, y2
width, height
widthb, heightb
border_width
fullscreen
override_redirect
argb
focused
group_focused
wmwin
bounding_shaped
rounded_corners
window_type
name
class_i, class_g
role
urgent
اگر مشخصهٔ پنجره باید روی پنجرهٔ کلاینت (client window) جستجو شود، Target میتواند با یک علامت اختیاری @ همراه باشد. در غیر این صورت پنجرهٔ قاب (frame window) استفاده خواهد شد.
Index
Operator و Pattern
عملگرهای در دسترس بسته به نوع 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، اشتراک دارند؛ آنها همچنین شامل گزینههای دیگری هستند که یا پویانمایی واقعی را تعریف کرده، یا یک پیشتنظیم پویانمایی را انتخاب میکنند.
گزینههای مشترک (Common options)
triggers
محرکهای معتبر عبارتند از:
open
close
show
hide
increase-opacity
decrease-opacity
size, position
color
geometry
هشدار
محرکهای size و position آزمایشی هستند. استفاده از این محرکها به این معناست که میپذیرید این پویانماییها هنگام تغییر اندازه یا جابهجایی دستی پنجره (مانند زمانی که پنجره را با ماوس میکشید) نیز فعال خواهند شد.
suppressions
پیشتنظیمها (Presets)
تعریف یک پویانمایی کمی پیچیده است. برای سادهتر کردن دسترسی به پویانماییها، بدون اینکه نیازی به یادگیری جزئیات دقیق سامانه اسکریپتنویسی داشته باشید، picom تعدادی پیشتنظیم ارائه میدهد که میتوانید تنها با مشخص کردن چند گزینه از آنها استفاده کنید.
برای انتخاب یک پیشتنظیم، گزینه preset را مانند زیر به یک گروه اسکریپت پویانمایی اضافه کنید:
animations = ({
triggers = [ "close", "hide" ];
preset = "slide-out";
direction = "down";
...
}, ...)
برخی پیشتنظیمها دارای گزینههای اضافی هستند که میتوانید برای سفارشیسازی پویانمایی آنها را تنظیم کنید. در این مثال، پیشتنظیم slide-out دارای گزینه direction است که جهت پویانمایی لغزشی را مشخص میکند.
نکته
توصیف
پویانماییها
تنها با
کلمات
دشوار است.
ما
ویدیوهای
کوتاهی
داریم که هر
پیشتنظیم
را نمایش
میدهند،
اما
متأسفانه
نمیتوان
آنها را در
این صفحه
راهنما
گنجاند. از
سوی دیگر،
نسخه وب این
سند که در
وبسایت ما
در آدرس
https://picom.app
میزبانی
میشود،
شامل این
ویدیوها
است.
پیشتنظیمهای زیر در دسترس هستند:
slide-in, slide-out
نمایش/پنهان کردن پنجره با یک پویانمایی لغزشی.
گزینهها
direction
duration
fly-in, fly-out
نمایش/پنهان کردن پنجره با یک پویانمایی پروازی.
گزینهها
direction
duration
appear, disappear
نمایش/پنهان کردن پنجره با ترکیبی از مقیاسبندی و محوشدگی.
گزینهها
scale
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
delay
duration
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
shadow-offset-x، shadow-offset-y
opacity
blur-opacity
shadow-opacity
shadow-red، shadow-green، shadow-blue
scale-x، scale-y، shadow-scale-x، shadow-scale-y
crop-x، crop-y، crop-width، crop-height
saved-image-blend
هشدار
متغیر 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
window-monitor-x، window-monitor-y، window-monitor-width، window-monitor-height
window-raw-opacity-before، window-raw-opacity
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 در هر فریم بهروزرسانی میشوند و وضعیت پنجره در فریم قبلی را نشان میدهند؛ بدین معنی که آنها تنها در یک فریم منفرد (زمانی که پویانمایی تازه آغاز شده است) معنادار هستند. بنابراین فقط باید از آنها برای تعیین مقادیر start، end، duration یا delay در تابع زمانبندی استفاده کنید، زیرا این مقادیر تنها یک بار هنگام شروع پویانمایی ارزیابی میگردند.
اگر اسکریپت پویانمایی ایجاد کردهاید که فکر میکنید بسیار جالب است، تشویق میشوید آن را با جامعه به اشتراک بگذارید. میتوانید یک issue یا یک pull request برای picom در GitHub ثبت کنید تا این شانس را داشته باشید که پویانمایی شما به عنوان یکی از پیشتنظیمها گنجانده شود و توسط همگان مورد استفاده قرار گیرد.
رابط سایهزن (SHADER INTERFACE)
این بخش رابط کاربری یک سایهزن (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);
}
انتظار میرود این رابط تا حد زیادی پایدار باقی بماند.
فایلهای پیکربندی (CONFIGURATION FILES)
در صورتی که پشتیبانی از 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
opacity
focus
blur-background
full-shadow
clip-shadow-above
redir-ignore
میتوانید نحوهٔ مات شدن پسزمینهٔ پنجره را با استفاده از بخش 'blur' در فایل پیکربندی خود تنظیم کنید. در اینجا یک مثال آورده شده است:
blur:
{
method = "gaussian";
size = 10;
deviation = 5.0;
};
گزینههای موجود برای بخش blur عبارتاند از:
method
size
deviation
strength
kernel
سیگنالها (SIGNALS)
رابط D-BUS (D-BUS API)
امکان کنترل picom از طریق پیامهای D-Bus با اجرای picom به همراه --dbus و ارسال پیامها به com.github.chjj.compton.<DISPLAY> وجود دارد. شناسهٔ <DISPLAY> همان نمایشگری است که توسط picom استفاده میشود و در آن تمام نویسههای غیر الفبایی-عددی به زیرخط (underscore) تبدیل شدهاند. برای مثال، برای DISPLAY=:0.0 باید از com.github.chjj.compton._0_0 استفاده کنید.
متدها و سیگنالهای D-Bus هنوز پایدار نیستند، بنابراین در حال حاضر مستند نشدهاند.
مثالها (EXAMPLES)
$ picom --config /dev/null
$ picom -cf
$ picom -bcf -i 0.8 -e 0.8 --no-fading-openclose
$ picom -c --shadow-red 1 --shadow-green 1 --shadow-blue 1
$ picom -c --shadow-exclude 'class_g = "wbar"'
$ picom --backend glx --vsync
لطفاً گزارش باگها را ارسال کنید به https://github.com/yshui/picom.
اطلاعات قدیمی در این صفحه راهنما یک باگ محسوب میشود.
منابع (RESOURCES)
صفحه خانگی: https://github.com/yshui/picom
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
Yuxuan Shui
| 2026-04-03 | picom |