.\" Automatically generated by Pandoc 3.6 .\" .\" Define V font for inline verbatim, using C font in formats .\" that render this, and otherwise B font. .ie "\f[CB]x\f[]"x" \{\ . ftr V B . ftr VI BI . ftr VB B . ftr VBI BI .\} .el \{\ . ftr V CR . ftr VI CI . ftr VB CB . ftr VBI CBI .\} .ad l .TH "shikane" "5" "2026\-05\-31" "shikane 1.1.0" .nh .SH "نام (NAME)" shikane \- فایل پیکربندی .SH "توضیحات (DESCRIPTION)" برنامه shikane از قالب پرونده \c .UR https://toml.io TOML .UE \c \ برای فایل پیکربندی خود استفاده می‌کند و حاوی آرایه‌ای از \f[B]profile\f[R]ها است. هر \f[B]profile\f[R] یک جدول است که شامل آرایه‌ای از جدول‌های \f[B]output\f[R] می‌باشد. .PP کلمات \[lq]output\[rq]، \[lq]display\[rq] و \[lq]monitor\[rq] می‌توانند به جای یکدیگر استفاده شوند. با این حال، در متن زیر تمایزی بین \[lq]display\[rq] و \[lq]\f[B]output\f[R]\[rq] قائل شده است. کلمه \[lq]display\[rq] به یک نمایشگر متصل فعلی اشاره دارد و \[lq]\f[B]output\f[R]\[rq] به یک جدول در فایل پیکربندی اشاره می‌کند. همین موضوع به ترتیب برای \[lq]mode\[rq] و \[lq]\f[B]mode\f[R]\[rq] نیز صدق می‌کند. (لطفاً به ضخامت قلم دقت کنید.) .PP برنامه shikane پروفایل‌های (\f[B]profile\f[R]) ممکن را هنگام راه‌اندازی و زمانی که تغییری در مجموعه نمایشگرهای متصل فعلی رخ می‌دهد، به‌طور خودکار انتخاب می‌کند. یک \f[B]profile\f[R] زمانی در نظر گرفته می‌شود که هر نمایشگر متصل فعلی بتواند با حداقل یک \f[B]output\f[R] تطبیق داده شود و هیچ \f[B]output\f[R] تطبیق‌نیافته‌ای باقی نماند. .PD 0 .P .PD یک نمایشگر با یک \f[B]output\f[R] تطبیق می‌یابد اگر: .PD 0 .P .PD .IP \[bu] 2 پارامتر \f[B]search\f[R] با مشخصه‌های نمایشگر مطابقت داشته باشد (همچنین به \f[B]OUTPUT FIELDS\f[R] در زیر مراجعه کنید) .PD 0 .P .PD .IP \[bu] 2 و نمایشگر از حالتی (\f[B]mode\f[R]) که در جدول \f[B]output\f[R] مشخص شده است، پشتیبانی کند. .PP پس از گردآوری فهرستی از \f[B]profile\f[R]های ممکن، shikane تمام گونه‌های (variants) هر \f[B]profile\f[R] را تولید می‌کند. به‌محض بررسی و مرتب‌سازی تمام گونه‌ها بر اساس میزان دقت، shikane تلاش می‌کند آن‌ها را یکی پس از دیگری اعمال کند تا یکی موفق شود یا گونه‌ای برای آزمایش باقی نماند. .PP گونه‌ها نسخه‌های کمی متفاوت از همان \f[B]profile\f[R] هستند. .PD 0 .P .PD به عنوان مثال، یک نمایشگر مفروض دارای مجموعه‌ای از حالت‌های پشتیبانی‌شده است: 1920x1080\[at]60Hz و 1920x1080\[at]50Hz. اگر \f[B]mode\f[R] در config.toml به صورت \[lq]1920x1080\[rq] مشخص شده باشد، هر دو حالت با این مشخصات همخوانی دارند. به جای انتخاب تنها یک حالت و استفاده از آن، shikane هر دو را با تولید دو گونه بر اساس همان \f[B]profile\f[R] در نظر می‌گیرد. یک گونه از حالت 1920x1080\[at]60Hz و گونه دیگر از حالت 1920x1080\[at]50Hz استفاده می‌کند. .PD 0 .P .PD همین موضوع برای پارامتر search نیز صدق می‌کند. اگر چندین ترکیب (display,\f[B]output\f[R],mode) ممکن باشد، shikane گونه‌هایی با تمام آن‌ها تولید می‌کند. .PP نیازی نیست فایل پیکربندی را با دست بنویسید. می‌توانید از هر ابزاری برای چیدمان نمایشگرها به هر شکلی که می‌خواهید استفاده کنید و سپس دستور \f[B]export\f[R] از \f[B]shikanectl\f[R](1) را به کار ببرید. این دستور پیکربندی را برای شما تولید خواهد کرد. .SH "قالب (FORMAT)" .TP \f[B]timeout\f[R] = \f[I]timeout\f[R] اختیاری. برنامه shikane هر زمان که تغییری شناسایی شود، به مدت \f[I]timeout\f[R] مشخص‌شده (به میلی‌ثانیه) صبر خواهد کرد. معمولاً نباید این مقدار را تنظیم کنید زیرا باعث کند شدن shikane می‌شود. مقدار پیش‌فرض \f[I]0\f[R] است. .TP \f[B][[profile]]\f[R] اختیاری. یک جدول جدید \f[B]profile\f[R] را آغاز می‌کند. یک \f[I]name\f[R] باید مشخص شود. برای جزئیات به \f[B]PROFILE FIELDS\f[R] مراجعه کنید. .SS "فیلدهای پروفایل (PROFILE FIELDS)" .TP \f[B]name\f[R] = \[dq]\f[I]name\f[R]\[dq] اجباری. نام (\f[I]name\f[R]) مربوط به \f[B]profile\f[R] را مشخص می‌کند. .TP \f[B][[profile.output]]\f[R] اجباری. یک جدول \f[B]output\f[R] به \f[B]profile\f[R] اضافه می‌کند. شامل پارامترهایی است که برای پیکربندی یک نمایشگر استفاده می‌شوند. برای جزئیات به \f[B]OUTPUT FIELDS\f[R] مراجعه کنید. .RS .PP به عنوان مثال در \f[B]sway\f[R](1)، نام‌ها (\f[I]name\f[R]) و توضیحات (\f[I]description\f[R]) نمایشگر را می‌توان از طریق \f[B]swaymsg \-t get_outputs\f[R] به دست آورد. .RE .TP \f[B]exec\f[R] = [ \[dq]\f[I]command\f[R]\[dq], \&... ] اختیاری. یک آرایه \f[B]exec\f[R] حاوی مجموعه‌ای از دستورها (\f[I]command\f[R]) است که پس از اعمال موفقیت‌آمیز \f[B]profile\f[R] اجرا می‌شوند. ترتیب اجرا تضمین نمی‌شود که حفظ شود. نام (\f[I]name\f[R]) پروفایل را می‌توان از متغیر محیطی \f[B]$SHIKANE_PROFILE_NAME\f[R] دریافت کرد. .SS "فیلدهای خروجی (OUTPUT FIELDS)" یک نمایشگر در میان سایر موارد، دارای ویژگی‌های \f[I]name\f[R]، \f[I]vendor\f[R]، \f[I]model\f[R]، \f[I]serialnumber\f[R] و \f[I]description\f[R] است و ممکن است به این صورت باشد: \[lq]DP\-1\[rq]، \[lq]Company Foo\[rq]، \[lq]FooHD\-24\[rq]، \[lq]12345678\[rq]، \[lq]Something Foo Something Bar\[rq] .PP \f[B]search\f[R] = \[dq]\f[I]pattern\f[R]\[dq] .PP \f[B]search\f[R] = \[dq][\f[I]kind\f[R]]\f[I]pattern\f[R]\[dq] .PP \f[B]search\f[R] = \[dq][[\f[I]attrs\f[R]]\f[I]kind\f[R]]\f[I]pattern\f[R]\[dq] .TP \f[B]search\f[R] = [ \[dq][[\f[I]attrs\f[R]]\f[I]kind\f[R]]\f[I]pattern\f[R]\[dq], \&... ] اجباری. این فیلد از ۳ بخش تشکیل شده است. فهرست ویژگی‌ها (\f[B]attribute list\f[R]) \f[I]attrs\f[R] در ابتدا، نوع جستجو (\f[B]search kind\f[R]) \f[I]kind\f[R] در میانه، و الگو (\f[I]pattern\f[R]) در انتها. .RS .PP فهرست ویژگی‌ها (\f[B]attribute list\f[R]) \f[I]attrs\f[R] مشخص می‌کند که کدام ویژگی‌ها با \f[I]pattern\f[R] مقایسه خواهند شد و چگونه وزن‌دهی می‌شوند. این فیلد توالی‌ای از حروف از مجموعه {\f[B]dnmvs\f[R]} است. حروف متناظر با حرف اول ویژگی‌های ذکرشده در بالا هستند. هر ویژگی نباید بیش از یک بار در هر فیلد \f[B]search\f[R] استفاده شود. اولین ویژگی بالاترین/بهترین وزن را دارد و آخرین ویژگی پایین‌ترین/بدترین وزن را داراست. برای اینکه یک \f[B]search\f[R] منفرد قابل اعمال در نظر گرفته شود، تمام ویژگی‌ها باید با \f[I]pattern\f[R] مطابقت داشته باشند. .PP نوع جستجو (\f[B]search kind\f[R]) \f[I]kind\f[R] می‌تواند یکی از موارد {\f[B]=/%\f[R]} باشد. این ۳ نوع جستجو (\f[B]search kinds\f[R]) \[em] عبارت منظم (\f[B]/\f[R])، زیررشته (\f[B]%\f[R])، متن کامل (\f[B]=\f[R]) \[em] مشخص می‌کنند که \f[I]pattern\f[R] چگونه با هر ویژگی (\f[B]attribute\f[R]) در فهرست \f[I]attrs\f[R] مقایسه می‌شود. در مقایسه متن کامل، ویژگی‌های داده‌شده از نظر برابری با \f[I]pattern\f[R] مقایسه می‌شوند. در مقایسه زیررشته، ویژگی‌های داده‌شده باید حاوی \f[I]pattern\f[R] به عنوان زیررشته باشند. وزن با تقسیم طول‌های رشته‌های \f[I]pattern\f[R] و ویژگی محاسبه می‌شود. طول‌های برابر همانند مقایسه متن کامل رتبه‌بندی خواهند شد. در مقایسه عبارت منظم، \f[I]pattern\f[R] به عنوان یک عبارت منظم تفسیر می‌شود. مقایسه با عبارت منظم همیشه رتبه پایین‌تری نسبت به دو نوع جستجوی دیگر کسب خواهد کرد. .PP فهرست ویژگی‌ها (\f[B]attribute list\f[R]) و نوع جستجو (\f[B]search kind\f[R]) اختیاری هستند. اگر مشخص نشود، نوع جستجو به طور پیش‌فرض روی مقایسه متن کامل قرار می‌گیرد و shikane تلاش می‌کند حداقل یک ویژگی منطبق را بیابد. .PP همچنین، چندین جستجو، حداکثر تا ۵ مورد، می‌توانند در یک آرایه مشخص شوند. .RE .TP \f[B]enable\f[R] = \f[I]true\f[R] | \f[I]false\f[R] اجباری. نمایشگر تطبیق‌یافته را فعال یا غیرفعال می‌کند. .TP \f[B]exec\f[R] = [ \[dq]\f[I]command\f[R]\[dq], \&... ] اختیاری. یک آرایه \f[B]exec\f[R] حاوی مجموعه‌ای از دستورها است که پس از اعمال موفقیت‌آمیز \f[B]profile\f[R] اجرا می‌شوند. ترتیب اجرا تضمین نمی‌شود که حفظ شود. نام (\f[I]name\f[R]) نمایشگر را می‌توان از متغیر محیطی \f[B]$SHIKANE_OUTPUT_NAME\f[R] دریافت کرد. .PP .PP گزینه‌های \f[B]mode\f[R]، \f[B]position\f[R]، \f[B]scale\f[R]، \f[B]transform\f[R] و \f[B]adaptive_sync\f[R] تنها در صورتی ویژگی‌های مربوط به نمایشگر را تغییر می‌دهند که مشخص شده باشند (برای نمونه، اگر فیلد \f[B]scale\f[R] وجود نداشته باشد، مقیاس‌بندی نمایشگر تغییر نخواهد کرد). .PP \f[B]mode\f[R] = \[dq]\f[I]best\f[R]\[dq] | \[dq]\f[I]preferred\f[R]\[dq] .PP \f[B]mode\f[R] = \[dq][!]\f[I]width\f[R]x\f[I]height\f[R][\[at]\f[I]rate\f[R][Hz]]\[dq] .TP \f[B]mode\f[R] = { width = \f[I]width\f[R], height = \f[I]height\f[R], refresh = \f[I]rate\f[R][, custom = \f[I]true\f[R] | \f[I]false\f[R]] } اختیاری. نمایشگر تطبیق‌یافته را برای استفاده از حالت منطبق پیکربندی می‌کند. حالت‌ها ترکیبی از عرض (\f[I]width\f[R]) و ارتفاع (\f[I]height\f[R]) (به پیکسل) و نرخ نوسازی (\f[I]rate\f[R]) (به هرتز) هستند که نمایشگر شما می‌تواند برای استفاده از آن‌ها پیکربندی شود. نرخ نوسازی (\f[I]rate\f[R]) همچنین می‌تواند یک عدد اعشاری باشد. اگر نمایشگر از حالت مشخص‌شده (\f[B]mode\f[R]) پشتیبانی نکند، با یک \f[B]output\f[R] تطبیق داده نخواهد شد. .RS .PP یک \f[B]mode\f[R] پارامتری را می‌توان به صورت اختیاری با افزودن علامت تعجب (!) به عنوان پیشوند، به عنوان سفارشی اعلام کرد. در این حالت، shikane تلاشی برای یافتن حالتی با همان پارامترها نخواهد کرد و فقط مقادیر ارائه‌شده را به compositor ارسال می‌کند. .PP تنظیم \f[B]mode\f[R] روی \f[I]best\f[R] یا \f[I]preferred\f[R] به shikane دستور می‌دهد که خودش حالت را انتخاب کند. حالت \f[I]best\f[R] توسط shikane به عنوان حالتی با بالاترین تعداد پیکسل، عرض، ارتفاع و نرخ نوسازی تعیین می‌شود. بیشتر نمایشگرها حالتی را که ترجیح می‌دهند اعلام می‌کنند. اگر \f[B]mode\f[R] روی \f[I]preferred\f[R] تنظیم شده باشد، shikane در صورت وجود، حالت ترجیح‌داده‌شده را انتخاب می‌کند. در غیر این صورت، بهترین حالت به عنوان جایگزین انتخاب می‌شود. .RE .TP \f[B]position\f[R] = \[dq]\f[I]x\f[R],\f[I]y\f[R]\[dq] اختیاری. نمایشگر را در موقعیت مشخص‌شده در فضای مختصات جهانی قرار می‌دهد. .TP \f[B]scale\f[R] = \f[I]factor\f[R] اختیاری. نمایشگر را با ضریب اعشاری مشخص‌شده (\f[I]factor\f[R]) مقیاس‌بندی می‌کند. .TP \f[B]transform\f[R] = \[dq]\f[I]transform\f[R]\[dq] اختیاری. تبدیل هندسی نمایشگر را تنظیم می‌کند. می‌تواند یکی از مقادیر \f[I]90\f[R]، \f[I]180\f[R]، \f[I]270\f[R] برای چرخش؛ یا \f[I]flipped\f[R]، \f[I]flipped\-90\f[R]، \f[I]flipped\-180\f[R]، \f[I]flipped\-270\f[R] برای قرینه‌سازی و چرخش؛ یا \f[I]normal\f[R] برای بدون تبدیل باشد. .TP \f[B]adaptive_sync\f[R] = \f[I]true\f[R] | \f[I]false\f[R] اختیاری. همگام‌سازی تطبیقی را برای نمایشگر فعال یا غیرفعال می‌کند (همچنین با نام VRR یا نرخ نوسازی متغیر شناخته می‌شود). .SH "مثال‌ها (EXAMPLES)" فاصله‌گذاری‌های ابتدای خطوط ضروری نیستند و در اینجا تنها برای نمایش سلسله‌مراتب استفاده شده‌اند. .IP .EX \f[B][[profile]]\f[R] name = \[dq]Company Foo with one vertical display\[dq] \f[B][[profile.output]]\f[R] search = \[dq]v=Company Foo\[dq] enable = true mode = \[dq]1920x1080\[at]50Hz\[dq] position = \[dq]0,0\[dq] scale = 1.3 \f[B][[profile.output]]\f[R] search = \[dq]n/HDMI\-[ABC]\-[1\-9]\[dq] enable = true exec = [ \[dq]echo This is output $SHIKANE_OUTPUT_NAME\[dq] ] position = \[dq]1920,0\[dq] transform = \[dq]270\[dq] \f[B][profile.output.mode]\f[R] width = 2560 height = 1440 refresh = 75 \f[B][[profile]]\f[R] name = \[dq]custom DP\-[1\-9] flip\[dq] exec = [ \[dq]echo This is an unusual display\[dq] ] \f[B][[profile.output]]\f[R] search = \[dq]/DP\-[1\-9]\[dq] enable = true transform = \[dq]flipped\[dq] position = \[dq]0,0\[dq] mode = \[dq]!2000x1500\[at]55.194Hz\[dq] .EE .PP یک لپ‌تاپ دارای یک نمایشگر توکار است که همیشه متصل می‌باشد. .IP .EX \f[B][[profile]]\f[R] name = \[dq]laptop builtin\[dq] \f[B][[profile.output]]\f[R] search = \[dq]eDP\-1\[dq] enable = true \f[B][[profile]]\f[R] name = \[dq]no builtin + HDMI\[dq] \f[B][[profile.output]]\f[R] search = \[dq]n=eDP\-1\[dq] enable = false \f[B][[profile.output]]\f[R] search = \[dq]n=HDMI\-A\-1\[dq] mode = \[dq]best\[dq] enable = true .EE .PP برنامه shikane به شما اجازه می‌دهد چندین جستجو را مشخص کنید. به این ترتیب پروفایل‌ها می‌توانند تا حد امکان دقیق باشند. .IP .EX \f[B][[profile]]\f[R] name = \[dq]home setup\[dq] \f[B][[profile.output]]\f[R] search = \[dq]n=eDP\-1\[dq] enable = false \f[B][[profile.output]]\f[R] search = [ \[dq]n=HDMI\-A\-1\[dq], \[dq]s=1234VBAM\[dq], \[dq]m=1QX04Z\[dq], \[dq]v=specific company\[dq] ] enable = true \f[B][[profile.output]]\f[R] search = \[dq]smv=1234abcd\[dq] enable = true .EE .PP برای مثال در \f[B]sway\f[R](1)، از \f[B]exec\f[R] می‌توان برای انتقال فضاهای کاری به نمایشگر مورد نظر استفاده کرد: .IP .EX \f[B][[profile]]\f[R] name = \[dq]double monitor\[dq] exec = [ \[dq]swaymsg workspace 1, move workspace to eDP\-1\[dq], \[dq]swaymsg workspace 2, move workspace to DP\-1\[dq] ] output = [ {search = \[dq]eDP\-1\[dq], enable = true}, {search = \[dq]DP\-1\[dq], enable = true} ] .EE .PP برنامه shikane متغیر \f[B]$SHIKANE_PROFILE_NAME\f[R] را در محیط پردازه‌های اجراشده از آرایه \f[B]profile.exec\f[R] و متغیر \f[B]$SHIKANE_OUTPUT_NAME\f[R] را در محیط پردازه‌های \f[B]output.exec\f[R] فراهم می‌کند. اگر از \f[B]sway\f[R](1) استفاده می‌کنید، متغیر اخیر به‌ویژه در ترکیب با \c .UR https://gitlab.com/w0lff/swayws swayws .UE \c \ مفید است. .IP .EX \f[B][[profile]]\f[R] name = \[dq]generic profile\[dq] exec = [\[dq]notify\-send shikane \[rs]\[dq]Profile $SHIKANE_PROFILE_NAME has been applied\[rs]\[dq]\[dq]] \f[B][[profile.output]]\f[R] search = \[dq]/DP\-[1\-9]\[dq] enable = true exec = [\[dq]swayws range \-\-numeric 1 5 $SHIKANE_OUTPUT_NAME\[dq]] \f[B][[profile.output]]\f[R] search = \[dq]n%HDMI\-\[dq] enable = true mode = \[dq]preferred\[dq] exec = [\[dq]swayws range \-\-numeric 6 10 $SHIKANE_OUTPUT_NAME\[dq]] .EE .SH "نویسندگان (AUTHORS)" Hendrik Wolff \c .MT hendrik.wolff@agdsn.me .ME \c .SH "همچنین ببینید (SEE ALSO)" \f[B]shikane\f[R](1)، \f[B]shikanectl\f[R](1)، \c .UR https://gitlab.com/w0lff/swayws swayws .UE \c ، \c .UR https://toml.io TOML .UE \c