در این قسمت مروری بر فایل xorg.conf خواهیم داشت. این فایل برای پیکربندی سرور X مورد استفاده قرار می‌گیرد و شما می‌توانید رفتارهای X server را از طریق این فایل کنترل کنید. این فایل به صورت پیشفرض در مسیر /etc/X11/xorg.conf قرار دارد. تاکیدا پیشنهاد می‌کنیم که قبل از خواندن این مقاله، حتما قسمت سامانه پنجره X را مطالعه کنید.

این فایل از قالب ساده‌ای برخوردار است:

  • کلیه خطوط خالی نادیده گرفته می‌شوند.
  • کاراکتر‌های فضای خالی (کاراکتر‌های tab و space) که در ابتدای خطوط قرار دارند، نادیده گرفته می‌شوند. بنابراین شما می‌توانید با قرار دادن تعدادی کاراکتر فضای خالی در ابتدای خطوط، فایل پیکربندی را دندانه گذاری کرده و خوانایی آن را بالا ببرید.
  • کاراکتر # به معنای آغاز یک «توضیح» است. به این ترتیب شما می‌توانید توضیحات دلخواه خود را در فایل پیکربندی درج کرده تا خواندن فایل برای دیگران راحت‌تر شود. هر کاراکتری که بعد از # بیاید نادیده گرفته می‌شود.

فایل xorg.conf از چند بخش مختلف تشکیل می‌شود. در ادامه این بخش‌های مختلف را با هم بررسی می‌کنیم.

هر بخش از قالبی به شکل زیر تشکیل می‌شود:

Section  "SectionName"
               SectionEntry
               ...
EndSection

بخش‌ها با کلمه کلیدی Section آغاز شده و با کلمه کلیدی EndSection پایان می‌یابند.

مهمترین بخش‌های فایل xorg.conf عبارتند از:

Files
ServerFlags
Module
InputDevice
Device
Monitor
Screen
ServerLayout

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

بخش ServerLayout در بالاترین سطح قرار دارد. این بخش دستگاه‌های ورودی و خروجی را با یکدیگر ترکیب می‌کند. دستگاه‌های ورودی در بخش InputDevice تشریح می‌شوند. اما یک دستگاه خروجی خود از ترکیب یک کارت گرافیک و یک مانیتور تشکیل می‌شود. کارت گرافیک در بخش Device تشریح می‌شود و مانیتور هم در بخش Monitor تشریح می‌شود. سپس کارت گرافیک و مانیتور توسط بخش Screen با یکدیگر ترکیب می‌شوند. در نتیجه بخش ServerLayout بخش‌های Screen و InputDevice را با هم ترکیب می‌کند.البته به غیر از این بخش‌ها، بخش‌های دیگری هم وجود دارد. در ادامه تمامی بخش های این فایل را به طور مجزا بررسی می‌کنیم:

 

بخش Module

Xorg از یک طراحی ماژولار برخوردار است. بعضی از قابلیت ها و ویژگی‌ها به صورت ماژول در دسترس هستند و در صورت نیاز به این ویژگی‌ها باید ماژول مورد نظر را هم فعال کرد. این کار از طریق بخش Module صورت می‌گیرد. ماژول های فایل‌هایی با پسوند .so، .o، .a و … هستند و معمولاً در مسیر /usr/local/lib/xorg/modules قرار دارند. برای دیدن ماژول های موجود کافی است این دایرکتوری را بررسی کنید. با استفاده از کلمه کلیدی Load می توانید یک ماژول را بارگذاری کنید. به این صورت:

Load  "modulename"

این خط به سرور می‌گوید که ماژولی به نام modulename را فعال کن. نام ماژول به حروف کوچک و بزرگ حساس است. برای بارگذاری یک ماژول باید از نام استاندارد آن استفاده کنید، نه نام فایل مربوط به آن ماژول. برای مثال ما تعدادی فونت از نوع TrueType داریم و می‌خواهیم از آن‌ها استفاده کنیم. اما برای استفاده از این فونت ها باید ماژولی به نام freetype را بارگذاری کنیم تا سرور بتواند از این فونت ها استفاده کند. برای بارگذاری این ماژول کافی است خط زیر را اضافه کنیم:

Load  "freetype"

تعدادی از ماژول ها همیشه به صورت خودکار بارگذاری می‌شوند. این ماژول ها عبارتند از: extmod ,dbe ,dri ,dri2 ,glx و record . اگر به هر دلیلی می‌خواهید این ماژول ها بارگذاری نشوند، می توانید از کلمه کلیدی Disbale استفاده کنید:

Disable  "modulename"

بخش Files

این بخش به سرور می‌گوید که کجا می‌تواند فایل‌های مورد نیازش را پیدا کند. مثلاً برای اینکه سرور بتواند از فونت ها استفاده کند، باید بداند که فونت ها در کجا قرار دارند. می‌توانید آدرس فونت ها (و یا هر نوع فایل دیگری) را در این بخش به سرور معرفی کنید. به عنوان مثال فرض کنید که تعدادی فونت در مسیر /usr/share/fonts/X11/TTF/ کپی کرده‌ایم. حالا برای اینکه به سرور در مورد این فونت ها اطلاع دهیم، می‌توانیم به این صورت عمل کنیم:

FontPath “/usr/share/fonts/X11/TTF/”

همین طور به کمک کلمه کلیدی ModulePath هم می‌توان مسیری که ماژول ها در آن قرار دارند را به سرور معرفی کرد. مسیرها را در داخل ”” بنویسید.

ModulePath "/usr/local/lib/xorg/modules"

بخش InputDevice

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

Section "InputDevice"
               Identifier "name"
               Driver     "inputdriver"
               options
               ...
EndSection

پارامترهای Identifier و Driver اجباری هستند و حتماً باید ذکر شوند. پارامتر Identifier مشخص کننده یک نام منحصر به فرد برای دستگاه ورودی است. پارامتر Driver هم درایوری که باید برای این دستگاه ورودی استفاده شود را مشخص می‌کند. بعد از اینکه شما این بخش را نوشتید، باید آن را در بخش ServerLayout معرفی کنید.

تنظیمات کیبورد

Option "XkbLayout" "us"

این پارامتر لایه صفحه‌کلید را مشخص می‌کند. در اکثر کیبوردهای موجود در ایران همان مقدار us مقدار درستی است.

Driver      "kbd"

درایور پیش فرض برای کیبورد‌ها است.

تنظیمات ماوس

Driver      "mouse"

درایور پیش فرض برای ماوس‌ها است.

Option "Device"      "/dev/psm0"

مشخص کننده درگاهی است که ماوس به آن متصل شده است.

Option "Protocol"    "Auto"

نوع ماوسی که استفاده می‌کنید را مشخص می‌کند. این خط اجباری است و اگر آن را مشخص نکنید سرور اجرا نخواهد شد. بهتر است بر روی Auto قرار گیرد. اگر یک ماوس PS/2 دارید، می توانید این گزینه را بر روی “PS/2” تنظیم کنید. حتی اگر یک لپ‌تاپ دارید و می‌خواهید touchpad را فعال کنید، باز هم می‌توانید این گزینه را بر روی “PS/2” تنظیم کنید.

Option "Buttons" "n"

این گزینه تعداد دکمه‌های موجود بر روی ماوس را مشخص می‌کند. معمولا سرور به صورت خودکار تعداد این دکمه‌ها را تشخیص می‌دهد. اگر این طور نیست به کمک این گزینه تعداد دکمه‌های ماوس خود را به سرور بگویید. n همان تعداد دکمه‌های ماوس است. مقادیر معمول ۲ و ۳ هستند. اما ممکن است ماوس شما دکمه‌های بیشتری (مثلا ۵ تا) داشته باشد.

Option "Emulate3Buttons"

اگر ماوس شما تنها دو تا دکمه دارد، می توانید دکمه سوم را شبیه سازی کنید. کافی است خط بالا را اضافه کنید تا قابلیت شبیه سازی دکمه سوم فعال شود. برای شبیه سازی دکمه سوم کافی است هر دو دکمه را به صورت هم زمان فشار دهید.

بخش Device

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

Section "Device"
               Identifier "name"
               Driver     "driver"
               entries
               ...
EndSection

پارامتر‌های Identifier و Driver اجباری هستند و حتماً باید ذکر شوند. پارامتر Identifier مشخص کننده یک نام منحصر به فرد برای کارت گرافیک است. پارامتر Driver هم درایوری که باید برای این کارت گرافیک استفاده شود را مشخص می‌کند. درایور vesa یک درایور عمومی است و از آن می‌توانید برای هر کارت گرافیکی استفاده کنید. اما این درایور اکثر قابلیت‌ها را نداشته و فقط قابلیت‌های اصلی را با خود دارد. بنابراین برای خطایابی و … می‌توانید از این درایور استفاده کنید.

بعد از اینکه این بخش را نوشتید باید آن را در بخش Screen هم معرفی کنید تا فعال شود. دیگر پارامترهای اختیاری عبارتند از:

Chipset  "chipset"

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

VideoRam  mem

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

بخش Monitor

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

قالب کلی آن به شکل زیر است:

Section "Monitor"
               Identifier "name"
               entries
               ...
EndSection

پارامتر Identifier مشخص کننده یک نام منحصر به فرد برای مانیتور مورد نظر است.

دیگر پارامترهای رایج عبارتند از:

VendorName  "vendor"

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

ModelName  "model"

این پارامتر هم مدل صفحه نمایش را مشخص می‌کند.

DisplaySize  width height

این پارامتر طول و عرض صفحه نمایش را بر حسب میلی‌متر مشخص می‌کند. (در هنگام محاسبه طول و عرض صفحه نمایش خود لبه ها را در نظر نگیرید)

بخش Screen

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

Section "Screen"
               Identifier "name"
               Device     "devid"
               Monitor    "monid"
               entries
               ...
               SubSection "Display"
                  entries
                  ...
               EndSubSection
               ...
EndSection

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

Device  "device-id"

این پارامتر کارت گرافیک را مشخص می‌کند.

Monitor  "monitor-id"

این پارامتر صفحه نمایش را مشخص می‌کند.

بخش Server Layout

یک ”server layout” از ترکیب یک بخش Screen و یک بخش InputDevice تشکیل می‌شود. به عبارتی دیگر، این بخش دستگاه‌های ورودی و دستگاه‌های خروجی را با یکدیگر ترکیب می‌کند. به همین دلیل این بخش در بالاترین سطح قرار می‌گیرد.

قالب کلی آن بدین شکل است:

Section "ServerLayout"
               Identifier   "name"
               Screen       "screen-id"
               ...
               InputDevice  "idev-id"
               ...
               options
               ...
EndSection

بخش ServerFlags

این بخش یکی دیگر از بخش‌های مهم فایل xorg.conf است. این بخش رفتارهای کلی سرور را کنترل می‌کند. تمام پارامترهای موجود در این بخش با کلمه کلیدی Options شروع می‌شوند و سپس بقیه مقادیر در داخل ”” نوشته می‌شود.

Option "DontVTSwitch"  "boolean"

به صورت پیش فرض، کاربران می‌توانند با فشردن کلیدهای ctrl+alt+Fn در بین کنسول های مجازی جا‌به‌جا شوند. اگر می‌خواهید کاربران قادر به سوئیچ کردن بین کنسول های مجازی نباشند، این گزینه را برابر با On قرار دهید.

Option "DontZap"  "boolean"

به صورت پیش فرض با فشردن کلیدهای ترکیبی ctrl+alt+← Backspace می‌توان سرور X را restart کرد. برای غیر فعال کردن این قابلیت می‌توانید این گزینه را برابر با On قرار دهید.

Option "BlankTime" "n"

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

Option "StandbyTime "n"

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

Option "SuspendTime" "n"

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

Option "OffTime" "n"

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

نمونه فایل

. یک نمونه از این فایل در زیر آورده شده است:

Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
	ModulePath   "/usr/local/lib/xorg/modules"
	FontPath     "${prefix}/share/fonts/X11/misc/"
	FontPath     "${prefix}/share/fonts/X11/TTF/"
	FontPath     "${prefix}/share/fonts/X11/OTF/"
	FontPath     "${prefix}/share/fonts/X11/Type1/"
	FontPath     "${prefix}/share/fonts/X11/100dpi/"
	FontPath     "${prefix}/share/fonts/X11/75dpi/"
EndSection

Section "Module"
	Load  "record"
	Load  "glx"
	Load  "dri2"
	Load  "dri"
	Load  "dbe"
	Load  "extmod"
EndSection

Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "kbd"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "auto"
	Option	    "Device" "/dev/sysmouse"
	Option	    "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection

Section "Device"
	Identifier  "Card0"
	Driver      "intel"
	BusID       "PCI:0:2:0"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	Monitor    "Monitor0"
	SubSection "Display"
		Viewport   0 0
		Depth     24
	EndSubSection
EndSection