Skip to content
Open Source Developer Blog

Linuxda Grafika (2-qism)

Maqolaning maqsadi

Ushbu maqola Linux-da grafik stack qanday ishlashi, xususan Xorg va Mesa-ga e'tibor qaratish va Linuxda turli stacklari qanday ishlashi haqida texnik tushuncha berishga qaratilgan.

Biz Linuxda keng qoʻllaniladigan displey serveri Xorg va grafik spetsifikatsiyalarning open-source dasturiy taʼminoti Mesa ning roli va arxitekturasini koʻrib chiqamiz. Ushbu elementlarni tushunish Linuxda ilovalarni ishlab chiqish yoki tizimlarni boshqarishni istagan har bir kishi uchun juda muhimdir, chunki ular grafikalar qanday ko'rsatilishi va ko'rsatilishida muhim rol o'ynaydi.

Bundan tashqari, biz GNOME, XFCE4, Cinnamon va KDE kabi turli xil mashhur Linux desktop environmentlarini o'rganamiz, ularning tuzilmalari, komponentlari, konfiguratsiya variantlari va Xorg va Mesa bilan qanday o'zaro ta'sirini tushunamiz.

Siz tajribali Linux foydalanuvchisi bo'lasizmi, tizimingizning ichki ishlashiga qiziqqan yangi foydalanuvchi yoki sozlashingizni optimallashtirishni xohlayotgan tizim administratori bo'lasizmi, ushbu maqola sizga kerakli bilim va tushunchalarni taqdim etishga qaratilgan.

Window System Server layer

Bizdagi keyingi layer Window System Server Layer. Kompyuterda windowing system(oynalash tizimi) (yoki window system) displey ekranlarining turli qismlarini alohida boshqaradigan dasturiy ta'minot to'plamidir. Bu foydalanuvchi interfeysi uchun WIMP(windows, icons, menus, pointer) paradigmasini amalga oshiradigan grafik foydalanuvchi interfeysining (GUI) bir turi.

Har bir hozirda ishlayotgan ilovaga foydalanuvchiga grafik interfeysini ko'rsatish uchun ekranning odatda o'lchami o'zgartiriladigan va odatda to'rtburchaklar yuzasi beriladi; bu oynalar bir-birining ustiga tushishi mumkin, ular bir-birining ustiga chiqishi mumkin bo'lmagan plitka interfeysidan farqli o'laroq. Odatda har bir oynaning atrofida window decorationlari chiziladi. Window decorationlarini va oyna ichidagi mavjud widgetlarni dasturlash, slayderlar, tugmalar va boshqalar kabi foydalanuvchining bevosita o'zaro ta'siri uchun grafik elementlar bo'lib, widget toolkitdan foydalanish orqali osonlashtiriladi va soddalashtiriladi.

Har qanday window systemning asosiy komponenti odatda displey serveri deb ataladi, ammo window serveri yoki compositor kabi muqobil nominatsiyalar ham qo'llaniladi. O'zining grafik interfeysini window(oyna)da ishga tushiradigan va taqdim etadigan har qanday dastur displey serverining clienti hisoblanadi. Displey serveri va uning clientlari bir-biri bilan application programming interface (API) yoki odatda displey server protokoli deb ataladigan communication protocoli orqali bog'lanadi, displey serveri clientlar va foydalanuvchi o'rtasida mediator(vositachi) hisoblanadi.

U kerneldan barcha ma'lumotlarni oladi, kernel barcha biriktirilgan kirish(input) qurilmalaridan, masalan, klaviatura, ko'rsatuvchi qurilmalar yoki sensorli ekrandan oladi va uni to'g'ri clientga uzatadi. Displey serveri clientlarning kompyuter monitoriga chiqishi uchun ham javobgardir. Ovoz chiqishi odatda displey serveri tomonidan boshqarilmaydi, lekin ovoz balandligi odatda GUI appletlari orqali boshqariladi va qaysi ilovalar yuqorida ekanligini displey serveri hal qiladi. Window system kompyuter foydalanuvchisiga bir vaqtning o'zida bir nechta dasturlar bilan ishlash imkonini beradi. Har bir dastur o'zining grafik interfeysini o'z oynasida taqdim etadi, bu odatda ekranning to'rtburchaklar maydonidir.

Dasturchi nuqtai nazaridan windowing system grafik primitivlarni amalga oshiradi. Masalan: shriftlarni ko'rsatish yoki ekranda chiziq chizish. U grafik interfeysning yuqori darajali elementlari, masalan, window manager tomonidan foydalanish uchun grafik hardwarening mavhumligini ta'minlaydi.

Displey server protokoli tarmoqqa qodir yoki hatto tarmoq shaffof(network transparent) bo'lishi mumkin, bu nozik clientlarni implement qilishni osonlashtiradi.

Display Server

Displey serveri yoki window serveri - bu dastur bo'lib, uning asosiy vazifasi o'z clientlarining operatsion tizimning qolgan qismiga, hardware vositalariga va bir-biriga kirish va chiqishlarini muvofiqlashtirishdir.

Linuxda Displey serverlari foydalanuvchining grafik interfeysida(user interface) asosiy rol o'ynaydi, ular user applicationlari va kompyuterning hardware vositalari, asosan, grafik qurilmalari o'rtasida vositachi vazifasini bajaradi. Displey serverining vazifalari klaviatura va sichqoncha kabi kiritish qurilmalarini boshqarish, qaysi oyna yuqorida bo'lishini hal qilish, tizim resurslarini taqsimlash va oyna mazmunini(window content) ekranga ko'rsatishni o'z ichiga oladi. Displey serverlarini tushunish juda muhim, chunki u Linux grafik stackidagi asosiy komponentlardan biridir. Displey serveri o'z clientlari bilan tarmoqda shaffof(network-transparent) yoki oddiygina tarmoqqa(network-capable) ulanishi mumkin bo'lgan displey server protokoli, communication protocoli(aloqa protokoli) orqali bog'lanadi. Displey serveri har qanday grafik foydalanuvchi interfeysida, xususan, window systemda asosiy komponent hisoblanadi. Mustaqil displey serverining server/client munosabatlari bir oz ziddir, chunki "server" odatda katta, uzoq joylashgan machine sifatida tasavvur qilinadi, ammo mustaqil "displey server" kichik, mahalliy(local) tizim bo'lib, ko'pchilik clientlar katta markaziy machinenada bajariiladi. Tushuntirish shundan iboratki, displey serveri displey va kiritish qurilmalari(input device) xizmatlarini taqdim etadi.

Image GUI ning asosiy komponentlari: Displey serveri window systemni implement qiladi. Oddiy window manageri shunchaki window decorationlarini chizadi, ammo compositing window managerlari ko'proq narsani qiladilar.

X Window System

X Window System (X11 yoki oddiygina X) - bu Unix-ga o'xshash operatsion tizimlarda keng tarqalgan bitmapli displeylar uchun oynalash tizimi(windowing system). X GUI muhiti uchun asosiy frameworkni taqdim etadi: displey qurilmasida oynalarni chizish va ko'chirish, sichqoncha va klaviatura bilan o'zaro ta'sir qilish. X foydalanuvchi interfeysini majburlamaydi - bu alohida dasturlar tomonidan boshqariladi. Shunday qilib, X-ga asoslangan muhitlarning vizual uslubi juda farq qiladi; turli dasturlar tubdan farqli interfeyslarni taqdim etishi mumkin.

X 1984 yilda Massachusetts Institute of Technology (MIT) Athena loyihasining bir qismi sifatida paydo bo'lgan. X protokoli 1987 yil sentyabr oyidan beri 11-versiyada (shuning uchun "X11") mavjud. X.Org Foundation MIT Litsenziyasi va shunga o'xshash ruxsat beruvchi litsenziyalar ostida bepul va open source dasturiy ta'minot sifatida mavjud bo'lgan X.Org Server joriy ma'lumotnomasi bilan X loyihasini boshqaradi.

X client–server modelidan foydalanadi: X server turli client dasturlari bilan aloqa qiladi. Server graphical output (windows) uchun so'rovlarni(request) qabul qiladi va foydalanuvchi ma'lumotlarini (klaviatura, sichqoncha yoki sensorli ekrandan) qaytarib yuboradi.

Ushbu client–server terminologiyasi - foydalanuvchi terminali server va applicationlar client bo'lib - ko'pincha yangi X foydalanuvchilarini chalkashtirib yuboradi, chunki atamalar teskari ko'rinadi.

Lekin X oxirgi foydalanuvchi nuqtai nazaridan emas, balki dasturning istiqbolini oladi: X applicationlarga displey va I/O(input output) servicelarini taqdim etadi, shuning uchun u serverdir; applicationlar ushbu servicelardan foydalanadi, shuning uchun ular clientlardir.

Server va client o'rtasidagi aloqa protokoli(communication protocol) tarmoqda shaffof(network-transparent) ishlaydi: client va server bir xil mashinada yoki turli xil qurilmalarda, ehtimol turli arxitektura va operatsion tizimlarda ishlashi mumkin. Client va server hatto shifrlangan tarmoq seansi orqali ulanishni tunnel qilish orqali Internet orqali xavfsiz muloqot qilishlari mumkin.

X clientining o'zi boshqa clientlarga displey servicelarini taqdim etish orqali X serveriga taqlid qilishi mumkin. Bu "X nesting" deb nomlanadi. Xnest va Xephyr kabi open source clientlar bunday X joylashtirishni qo'llab-quvvatlaydi.

X.Org Server (X11)

X server - displey, klaviatura va sichqoncha bilan kompyuterda ishlaydigan dastur bo'lib, u displeyda grafiklarni chizish va klaviatura va sichqonchadan kiritilgan ma'lumotlarni qayta ishlash servicelarini taqdim etadi. U displeyni boshqarish, foydalanuvchi ma'lumotlarini boshqarish va displey bilan o'zaro aloqada bo'lgan uskunani, masalan, grafik kartani boshqarish uchun javobgardir. Server shuningdek, ekrandagi oynalarni(window) boshqarish, stacking tartibini aniqlash va oynalarni boshqarish uchun user inputni boshqarish uchun javobgardir. X serverlari odatda operatsion tizimning windowing systemining bir qismi sifatida implement qilinadi. Ular grafik qurilmalarni boshqarish, foydalanuvchi ma'lumotlarini qayta ishlash va grafik interfeyslar uchun asosiy qurilish bloklarini, masalan, windowlar va chizilgan primitivlarni ta'minlash uchun javobgardir. X Window Systemida X server displey va input devicelarini boshqaradigan markaziy organ bo'lib, u ilovalarga grafiklarni chizish va input eventlarini qabul qilish usulini ta'minlaydi.

Displey serveriga misol sifatida kernelning tepasida ishlaydigan X.Org serveridir (odatda Unix-ga o'xshash kernel, masalan, Linux yoki BSD). U foydalanuvchi ma'lumotlarini oladi (masalan, Linux-dagi evdev-dan) va uni clientlaridan biriga uzatadi. Displey serveri o'z clientlaridan ma'lumotlarni ham oladi; u ma'lumotlarni qayta ishlaydi, birlashtirishni amalga oshiradi va Linuxda ma'lumotlarni uchta kernel komponentlaridan biriga - DRM, GEM yoki KMS drayveriga uzatadi. Komponent ma'lumotlarni framebufferga yozadi va framebufferning mazmuni ulangan ekranga uzatiladi va ko'rsatiladi. X GLX ga tayanadi.

GLX ("OpenGL Extension to X Window System" ning boshlang'ich belgisi) X Window System kernel protokolining kengaytmasi(extension) bo'lib, OpenGL va X Window System o'rtasidagi interfeysni hamda OpenGLning o'zi uchun kengaytmalarni ta'minlaydi. Bu OpenGL-dan foydalanishni xohlovchi dasturlarga buni X Window System tomonidan taqdim etilgan windowda amalga oshirish imkonini beradi. GLX ikkita "state" ni ajratadi: indirect state(bilvosita state) va direct state(bevosita state).

Displey serveri kontseptsiyasining amalga oshirilishidan biri bu X Window System, xususan uning amalda qo'llanilgan versiyasi - X.Org Server va Xlib va XCB clientlar kutubxonalari. X.Org serveri displey serveridir, lekin joriy tatbiqida u kompozitsiyani bajarish uchun ikkinchi dasturga, ya'ni compositing window managerga tayanadi. Misollar Mutter yoki KWin. X11 displey server protokolini implement qiladigan displey serverlarining diqqatga sazovor namunalari X.Org Server, XFree86, XQuartz va Cygwin/X, X11 displey server protokolini implement qiluvchi clientlar kutubxonalari esa Xlib vaXCB hisoblanadi.

Image

Rasm: X.Org Server o'z clientlari bilan muloqot qiladi, masalan. Amarok, X11 protokoli orqali

X Client

X clientlari o'zlarining grafik foydalanuvchi interfeyslarini ko'rsatish uchun X serveriga ulanadigan individual applicationlardir. X clienti oddiy terminal emulyatoridan tortib to to'liq ish stoli muhitigacha(full-fledged desktop environment) bo'lgan har qanday narsa bo'lishi mumkin. X clienti X serveri bilan client va server o'zaro ta'sirini belgilaydigan standart buyruqlar(command) va javoblar(response) to'plami bo'lgan X protokoli yordamida aloqa(communicate) qiladi. Ushbu protokol network-transparentdir, shuning uchun X clientlari masofaviy mashinalarda ishlashlari va local X serverida o'zlarining grafik foydalanuvchi interfeyslarini ko'rsatishlari mumkin. X Window Systemida X clienti o'zining grafik foydalanuvchi interfeysini ko'rsatish uchun X serveridan servicelarni so'raydigan dasturdir. X clienti ekranda biror narsa chizishni xohlasa, u X protokoli yordamida X serveriga so'rov( request) yuboradi. X server so'rovni qayta ishlaydi va javobni(response) yuboradi. X client va X server tarmoq ulanishi orqali muloqot qiladi, bu odatda local kompyuterda UNIX domain socketidir, lekin masofaviy ulanishlar uchun TCP/IP socketi ham bo'lishi mumkin.

Keling bularni kengroq o'rganamiz.

Requestlar: X clientining asosiy vazifasi X serveriga request yuborishdir. Ushbu requestlar serverga turli xil vazifalarni(task) bajarishni buyuradi, masalan, oynalarni chizish, grafik yoki matnni ko'rsatish, foydalanuvchi ma'lumotlarini yozib olish va boshqalar.

Event Handling: X clientlari X server tomonidan yuborilgan eventlarni kutadilar va qayta ishlaydilar. Ushbu eventlar sichqonchaning harakati, bosish yoki tugmachalarni bosish kabi foydalanuvchi o'zaro ta'siri yoki oynani ochish kabi tizim bildirishnomalari bo'lishi mumkin.

Connection: X clienti X serveriga turli mexanizmlar yordamida, ko'pincha local connectionlar uchun Unix domen soketlari yoki masofaviy ulanishlar uchun TCP/IP orqali ulanish o'rnatadi. Ulangandan so'ng, client requestlarni yuborishi va eventlarni qabul qilishi mumkin.

Window Management: X clienti X serveridan oynalarni(window) yaratish, manipulyatsiya qilish yoki yo'q qilishni so'raydi. Har bir window client o'z contentini ko'rsatishi mumkin bo'lgan to'rtburchaklar maydondir(rectangular area). Windowlar turli atribut va propertilarga ega bo'lishi mumkin va client ularni kerak bo'lganda sozlash va boshqarish uchun javobgardir.

Graphics Rendering: X serveri asosiy renderlash imkoniyatlarini ta'minlasa-da, X clienti nima ko'rsatish kerakligini aniqlash uchun javobgardir. Bu shakllar, ranglar, matn, tasvirlar va boshqalarni aniqlashni o'z ichiga oladi. Client ushbu instructionlarni serverga request sifatida yuboradi.

Clipboard(buffer) Operations: X clientlari selectionlar bilan o'zaro aloqada bo'lishi mumkin (masalan, clipboard). Foydalanuvchi ma'lumotlardan nusxa ko'chirganda, X clienti ma'lum bir selectionning egaligini da'vo qiladi. Keyin boshqa clientlar joylashtirish operatsiyalarini amalga oshirish uchun ushbu selection contentini so'rashi mumkin.

Properties & Atoms: X clientlar Windowsda propertielarni o'rnatishi(set) yoki olishi(fetch) mumkin. Propertilar noyob identifikatorlar bo'lgan "atomlar" tomonidan nomlanadi. Bu Propertilar oyna sarlavhalaridan(window title) tortib murakkabroq metamaʼlumotlargacha boʻlgan keng doiradagi maʼlumotlarni saqlashi mumkin.

Extensionlar: X clientlari asosiy X protokoliga turli extensionlardan foydalanishlari mumkin, bu ularga qo'shimcha funksiyalar yoki optimallashtirilgan operatsiyalarni beradi. Masalan, RENDER extensionidan foydalanish yanada rivojlangan renderlash imkoniyatlarini beradi.

Closing & Cleanup: X clienti o'z operatsiyalarini tugatganida yoki foydalanuvchi tomonidan yopilganda, u X serveriga tozalash uchun requestlar yuboradi - oynalarni yopish, resurslarni chiqarish va h.k.

Aslini olganda, X clienti X Window tizimidagi application-side komponenti bo‘lib, foydalanuvchi nimani ko‘rishi va u bilan o‘zaro aloqada bo‘lishini aniqlaydi, shu bilan birga haqiqiy displey va kiritish tafsilotlarini(input detail) boshqarish uchun X serveriga tayanadi.

X protocol

X protokoli X Window tizimining asosiy aloqa protokoli(communication protocol) bo'lib, X clientlarning X server bilan qanday aloqa qilishini belgilaydi. X Window tizimi Unix-ga o'xshash operatsion tizimlarda foydalanuvchi grafik interfeyslarini (GUI) yaratish va boshqarish uchun asos yaratadi va X protokoli ushbu tizim ichida almashiladigan xabarlarning tuzilishi va semantikasini boshqaradi.

X protokoli client-server modelini osonlashtiradi, bunda X server haqiqiy displeyni, grafik uskunani va kiritish qurilmalarini manage va control qiladi, X clientlar esa o'zlarining GUI-ni ko'rsatishni va kirishni(input) olishni xohlaydigan ilovalardir.

Binary Protocol: X protokoli Binary Protocol bo'lib, xabarlar odam o'qiy oladigan matn emas, balki structured binary data sifatida yuboriladi. Bu tanlov aloqani samarali qiladi, lekin client va serverdan binary datalarning aniq tuzilishi va tartibini tushunishni talab qiladi.

Requestlar va Responselar: X protokoli asosan clientdan serverga yuborilgan requestlardan(so'rov) va serverdan clienta qaytariladigan responselar(javob) yoki eventlardan iborat. Requestlar serverga biror amalni bajarishni buyuradi (masalan, oyna chizish yoki kirishni olish). O'z navbatida, server responselarni qaytarib yuborishi mumkin, bu client so'ragan ma'lumotlar yoki tugmani bosish kabi clientga biror narsa haqida xabar beradigan eventlar bo'lishi mumkin.

Resurs identifikatorlari: X protokoli oynalar, shriftlar yoki grafik kontekstlar kabi turli ob'ektlar yoki ob'ektlarga murojaat qilish uchun ko'pincha "resource IDs" deb ataladigan noyob identifikatorlardan foydalanadi. Ushbu identifikatorlar clientga ham, serverga ham bir xil ob'ekt haqida chalkashmasdan gapirish imkonini beradi.

Versiyalash va Extensionlar: Protokolda vaqt o'tishi bilan rivojlanishiga imkon beruvchi aniqlangan versiya tizimi mavjud. Bundan tashqari, protokol extensionlarni qo'llab-quvvatlaydi, bu esa asl spetsifikatsiyadan tashqari yangi funksiyalarni qo'shish imkonini beradi. Client ulanganda, u serverdan qo'llab-quvvatlanadigan extensionlar va ularning versiyalarini so'rashi mumkin.

Byte Ordering: Turli xil kompyuter arxitekturalari xotiradagi ko'p baytli qiymatlarni turlicha ifodalaydi, yoki little-endian yoki big-endian formatida. X protokoli buni clientga ulanish vaqtida byte orderini belgilashga ruxsat berish orqali tasdiqlaydi. Bu turli xil mashina arxitekturalarida ma'lumotlarning izchil talqin qilinishini ta'minlaydi.

Network Transparency: X protokolining muhim xususiyatlaridan biri uning tarmoq shaffofligi(network ransparency) uchun dizaynidir. Bu shuni anglatadiki, X clienti o'z GUI-ni tarmoq bo'ylab boshqa kompyuterda X serverida ko'rsatgan holda bitta mashinada ishlashi mumkin. X protokoli xabarlari tarmoq ulanishi orqali yuboriladi, bu esa masofaviy displey va o'zaro ta'sir qilish imkonini beradi.

Error Handling: Protokol request bilan bog'liq muammo bo'lsa, server clientga qaytarib yuborishi mumkin bo'lgan maxsus xato xabarlarini belgilaydi. Ushbu tizimli xatolarni boshqarish clientlarga muammolarni oqilona hal qilish imkonini beradi.

Aslini olganda, X protokoli X clientlari va serverlariga muloqot qilish va hamkorlik qilish imkonini beruvchi aniq belgilangan qoidalar va structurelar to‘plamini taqdim etadi, bu grafik ilovalarni Unix-ga o‘xshash operatsion tizimlarda ko‘rsatish va ular bilan o‘zaro aloqada bo‘lish imkonini beradi.