وزن: ۲
توضیحات: داوطلبان باید قادر به نصب و پیکربندی X11 باشند.
حوزههای کلیدی دانش:
- تأیید اینکه کارت گرافیک و مانیتور توسط یک X server پشتیبانی میشوند
- آگاهی از X font server
- درک و دانش اولیه از فایل پیکربندی X Window
اصطلاحات و ابزارهای کاربردی:
- /etc/X11/xorg.conf
- xhost
- DISPLAY
- xwininfo
- xdpyinfo
- X
در روزگاری که کامپیوترها بسیار گران بودند و بین کاربران زیادی به اشتراک گذاشته میشدند، ترمینالهای X راهی کمهزینه برای استفاده کاربران از منابع یک کامپیوتر واحد فراهم میکردند. امروزه کامپیوترها آنقدر قدرتمند شدهاند که دیگر کسی به فکر اشتراکگذاری منابع نیست، اما درسهای تاریخی وجود دارد که باید در مورد آنها بدانید!
سیستم پنجرهای X که اغلب با نام X شناخته میشود، یک سیستم پنجرهای (windowing system) برای ایستگاههای کاری گرافیکی است که در MIT توسعه یافته است. این سیستم بر اساس مدل کلاینت/سرور (client/server) کار میکند: مدل کلاینت/سرور در سیستم X برعکس مدلهای کلاینت/سرور معمولی عمل میکند، جایی که کلاینت روی ماشین محلی اجرا شده و از سرور درخواست خدمات میکند. در سیستم X، سرور روی ماشین محلی اجرا میشود و نمایشگر و خدمات خود را در اختیار برنامههای کلاینت قرار میدهد. برنامههای کلاینت ممکن است محلی باشند یا از راه دور در شبکههای مختلف وجود داشته باشند، اما X server به صورت شفاف (transparent) ظاهر میشود.
علاوه بر نمایش پنجرهها برای کلاینتها (اپلیکیشنها)، X server همچنین دستگاههای ورودی مانند کیبورد، ماوس و صفحات لمسی را مدیریت میکند.
{% hint style="info" %} سرور XOrg پیادهسازی رایگان و متنباز سرور نمایش برای X Window System بود که توسط بنیاد X.Org مدیریت میشد. نام X11 به نسخه ۱۱ سیستم پنجرهای X اشاره دارد. {% endhint %}
در بسیاری از توزیعهای مدرن لینوکس، سرور Display manager هنوز وجود دارد، اما X Window با راهکارهای جدیدی مانند wayland جایگزین شده است.
فایل xorg.conf فایلی است که برای پیکربندی X.Org Server استفاده میشود. xorg.conf معمولاً در /etc/X11/xorg.conf قرار دارد اما در توزیعهای مدرن لینوکس دیگر وجود ندارد، بنابراین ما از یک نمونه xorg.conf برای توضیح آن استفاده میکنیم.
فایل پیکربندی xorg.conf به بخشهایی (sections) سازماندهی شده است که میتوانند با هر ترتیبی مشخص شوند. فرمت کلی بخشها به این صورت است:
Section "SectionName"
SectionEntry ...EndSection
بیایید نگاهی سریع به مهمترین آنها بیندازیم:
- Files - مسیرهای فایلهایی مانند fontpath
Section "Files"
FontPath "/usr/share/X11/fonts/misc"
FontPath "/usr/share/X11/fonts/100dpi/:unscaled"
FontPath "/usr/share/X11/fonts/75dpi/:unscaled"
FontPath "/usr/share/X11/fonts/Type1"
FontPath "/usr/share/X11/fonts/100dpi"
FontPath "/usr/share/X11/fonts/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
- Module - تعیین میکند کدام ماژولها بارگذاری شوند
Section "Module"
Load "bitmap"
Load "ddc"
Load "dri"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "type1"
Load "vbe"
EndSection
به عنوان مثال glx وظیفه جلوههای گرافیکی سه بعدی را بر عهده دارد.
- InputDevice - کیبورد و اشارهگر (ماوس)
Section "InputDevice"
Identifier "Generic Keyboard"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us"
EndSection
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ImPS/2"
Option "Emulate3Buttons" "true"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "RightEdge" "5000"
EndSection
این بخشهای InputDevice برای هر دستگاه ورودی مانند تاچپد، ماوس و کیبورد که ممکن است به سیستم خود متصل کرده باشید، پیکربندی شدهاند.
- Monitor - شرح دستگاه نمایشگر
Section "Monitor"
Identifier "Generic Monitor"
Option "DPMS"
EndSection
- Device - شرح/اطلاعات کارت گرافیک
Section "Device"
Identifier "ATI Technologies, Inc. Radeon Mobility 7500 (M7 LW)"
Driver "radeon"
BusID "PCI:1:0:0"
Option "DynamicClocks" "on"
Option "CRT2HSync" "30-80"
Option "CRT2VRefresh" "59-75"
Option "MetaModes" "1024x768 800x600 640x480 1024x768+1280x1024"
Option "XAANoOffscreenPixmaps" "true"
EndSection
- Screen - یک آداپتور ویدئو را به یک مانیتور متصل میکند
Section "Screen"
Identifier "Screen0"
Device "Screen0 ATI Technologies, Inc. Radeon Mobility 7500 (M7 LW)"
Monitor "Generic Monitor"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 4
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 8
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 15
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 16
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection
- ServerLayout - یک یا چند صفحه نمایش را با یک یا چند دستگاه ورودی مرتبط میکند
Section "ServerLayout"
Identifier "DefaultLayout"
Screen "Default Screen"
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
InputDevice "Synaptics Touchpad"
EndSection
ممکن است موقعیتهایی پیش بیاید که در آنها نیاز داشته باشیم اطلاعات دقیقی درباره پنجره یک اپلیکیشن در سیستم لینوکس خود به دست آوریم. برای مثال، ممکن است نیاز داشته باشیم اندازه و موقعیت پنجره را بدانیم.
دستور xwininfo ابزاری است که در این مورد به ما کمک میکند. این در واقع یک ابزار اطلاعات پنجره برای X (یا سیستم X-Windows) است. بسته به اینکه کدام گزینهها انتخاب شده باشند، اطلاعات مختلفی درباره آن پنجره میدهد؛ اطلاعاتی مانند اندازه، موقعیت، رنگ، عمق و غیره.
root@ubuntu16-1:~# xwininfo
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0x320000a "root@ubuntu16-1: ~"
Absolute upper-left X: 65
Absolute upper-left Y: 52
Relative upper-left X: 0
Relative upper-left Y: 0
Width: 732
Height: 410
Depth: 32
Visual: 0x2a0
Visual Class: TrueColor
Border width: 0
Class: InputOutput
Colormap: 0x3200009 (not installed)
Bit Gravity State: NorthWestGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: no
Corners: +65+52 -3+52 -3-138 +65-138
-geometry 80x24--7+14
دستور xdpyinfo ابزاری برای نمایش اطلاعات درباره یک X server است.
root@ubuntu16-1:~# xdpyinfo
name of display: :0
version number: 11.0
vendor string: The X.Org Foundation
vendor release number: 11906000
X.Org version: 1.19.6
maximum request size: 16777212 bytes
motion buffer size: 256
bitmap unit, bit order, padding: 32, LSBFirst, 32
image byte order: LSBFirst
number of supported pixmap formats: 7
supported pixmap formats:
depth 1, bits_per_pixel 1, scanline_pad 32
depth 4, bits_per_pixel 8, scanline_pad 32
depth 8, bits_per_pixel 8, scanline_pad 32
depth 15, bits_per_pixel 16, scanline_pad 32
depth 16, bits_per_pixel 16, scanline_pad 32
depth 24, bits_per_pixel 32, scanline_pad 32
depth 32, bits_per_pixel 32, scanline_pad 32
keycode range: minimum 8, maximum 255
focus: window 0x320000b, revert to Parent
number of extensions: 29
BIG-REQUESTS
Composite
DAMAGE
...
همانطور که گفتیم، X به گونهای طراحی شده است که نسبت به شبکه شفاف باشد، به طوری که یک X server بتواند پنجرهها را از منابع محلی یا اپلیکیشنهای تحت شبکه نمایش دهد.
دستور اصلی برای اجرای این فعالیتهای شبکه xhost است - برنامه کنترل دسترسی سرور برای X. معمولاً دسترسی از راه دور غیرفعال است، زیرا یک خطر امنیتی محسوب میشود. اما اگر نیاز دارید یک اپلیکیشن گرافیکی (GUI) را روی یک کامپیوتر از راه دور اجرا کنید و گرافیک آن روی صفحه نمایش خودتان ظاهر شود، میتوان از xhost برای اجازه دادن به کامپیوتر از راه دور استفاده کرد. بیایید شروع کنیم:
- دستور
xhostبدون هیچ گزینهای، وضعیت دسترسی را به ما میگوید:
root@ubuntu16-1:~# xhost
access control enabled, only authorized clients can connect
SI:localuser:user1
xhost +: کنترل دسترسی را خاموش میکند (تمام هاستهای راه دور به X server دسترسی خواهند داشت)xhost -: کنترل دسترسی را دوباره روشن میکند.
root@ubuntu16-1:~# xhost +
access control disabled, clients can connect from any host
root@ubuntu16-1:~# xhost -
access control enabled, only authorized clients can connect
xhost + hostname: نام هاست را به لیست کنترل دسترسی X server اضافه میکند.xhost - hostname: نام هاست را از لیست کنترل دسترسی X server حذف میکند.
root@ubuntu16-1:~# xhost +172.16.43.136
172.16.43.136 being added to access control list
root@ubuntu16-1:~# xhost
access control enabled, only authorized clients can connect
INET:172.16.43.136 (no nameserver response within 5 seconds)
SI:localuser:user1
root@ubuntu16-1:~# xhost -172.16.43.136
172.16.43.136 being removed from access control list
برنامه xhost برای افزودن و حذف نامهای کاربری به لیست مجاز برای اتصال به X server استفاده میشود:
xhost +si:localuser:some_user: به "some_user" اجازه دسترسی به X کاربر فعلی (localuser) را میدهد.xhost -si:localuser:some_user: دسترسی "some_user" را لغو میکند.
root@ubuntu16-1:~# xhost +si:localuser:payam
localuser:payam being added to access control list
root@ubuntu16-1:~# xhost
access control disabled, clients can connect from any host
SI:localuser:payam
SI:localuser:user1
root@ubuntu16-1:~# xhost -si:localuser:payam
localuser:payam being removed from access control list
کلمه جادویی در سیستم X window، واژه DISPLAY است. یک نمایشگر (به زبان ساده) شامل موارد زیر است:
- یک کیبورد
- یک ماوس
- و یک صفحه نمایش
یک DISPLAY توسط برنامه X server مدیریت میشود. سرور قابلیتهای نمایش را به سایر برنامههایی که به آن متصل میشوند ارائه میدهد. سرور راه دور از طریق تعریف متغیر محیطی DISPLAY میداند که باید ترافیک شبکه X را به کجا هدایت کند که به طور کلی به یک X Display server واقع در کامپیوتر محلی شما اشاره دارد.
root@ubuntu16-1:~# echo $DISPLAY
:0
مقدار متغیر محیطی display به صورت زیر است: hostname:D.S
که در آن:
- hostname: نام کامپیوتری است که X server روی آن اجرا میشود. حذف hostname به معنای localhost است.
- D: یک شماره ترتیبی است (معمولاً ۰). اگر چندین نمایشگر به یک کامپیوتر متصل باشند، میتواند متفاوت باشد.
- S: شماره صفحه نمایش است. یک نمایشگر در واقع میتواند چندین صفحه داشته باشد. معمولاً فقط یک صفحه وجود دارد که ۰ مقدار پیشفرض آن است.
:0.0یعنی ما در مورد اولین صفحه نمایش متصل به اولین نمایشگر شما در localhost صحبت میکنیم.
ما میتوانیم محیط DISPLAY را تغییر دهیم و خروجی گرافیکی خود را به ماشین دیگری متصل کنیم.
root@ubuntu16-1:~# export DISPLAY=172.16.43.136:0
root@ubuntu16-1:~# xeyes
در این حالت اگر یک برنامه گرافیکی اجرا شود، خروجی آن (پنجرهها) در ماشین دیگری نشان داده خواهد شد.
هنگام استفاده از دستور
sshدر لینوکس، میتوان از گزینه-Xبرای تعیین X11 forwarding استفاده کرد.
.
.
.
https://developer.ibm.com/tutorials/l-lpic1-106-1/
https://commons.wikimedia.org/wiki/File:X11_display_server_protocol.svg
https://en.wikipedia.org/wiki/X.Org_Server
https://www.faqforge.com/linux/fetch-detailed-information-application-window-linux/ https://www.x.org/releases/X11R7.7/doc/man/man1/xwininfo.1.xhtml https://linux.die.net/man/1/xdpyinfo https://www.x.org/releases/X11R7.7/doc/man/man1/xdpyinfo.1.xhtml https://www.lifewire.com/linux-command-xhost-4093456 https://beamtic.com/xhost-linux https://linux.die.net/man/1/xhost https://askubuntu.com/questions/432255/what-is-the-display-environment-variable
.
