Кіріспе
X Window System үшін тегін және ашық кодты дисплей сервері
X.Org Server – X Window System (X11) дисплей серверінің X.Org Foundation басқаруымен жүзеге асырылған тегін және ашық кодты нұсқасы. Клиенттік жағындағы X терезесі жүйесі протоколы X11 кітапханалары түрінде іске асырылады, олар X серверімен байланыс үшін пайдалы API ретінде қызмет етеді. X11 үшін екі маңызды X кітапханасы бар. Бұл кітапханалардың біріншісі – бастапқы C тіліндегі X11 API болған Xlib, ал 2001 жылы XCB деп аталатын тағы бір C тіліндегі X кітапханасы құрылды. Xlib және XCB интерфейстері ретінде басқа тілдерде, сондай-ақ дербес кіші X кітапханалары да бар. X.Org Foundation X Server-ді қолдау үшін релиздерді жинақтау, сертификаттау (ақы төленеді), кодты жақсартуды бағалау, веб-сайтты дамыту және ақшалай қаржыны басқару сияқты қызметтерді ұсынады. Релиздерді жаһандық әзірлеушілер кодтайды, құжаттайды және жинақтайды.
Бағдарламалық жасақтама архитектурасы
X. Org сервері X терезесі жүйесінің негізгі протоколының 11 (X11) нұсқасын және оған қосымшаларды, мысалы RandR-ді серверлік жағынан іске асырады. 1.16.0 нұсқасы systemd негізіндегі іске қосу және басқаруды интеграциялайды, бұл жүктелу жылдамдығы мен тұрақтылығын арттырады. X сервері X ядролық протоколын қолдау үшін іске асырылуы тиіс көптеген мүмкіндіктерге ие. Оларға код кестелері, глифтардың растрленуі және кэштеу, XLFD және графикалық элементтерді салатын негізгі рендеринг API жатады.
Құрылғыға тәуелді X (DDX)
Құрылғыға тәуелді X (DDX) — x серверінің аппараттық құралдармен байланысатын бөлігі. X.Org Server бастапқы кодындағы "hw" каталогының әрқайсысы бір DDX-ті білдіреді. Аппараттық құралдарға графикалық карталар, тышқан және пернетақта жатады. Әрбір драйвер нақты аппараттық құралға арналған және жеке жүктелетін модуль ретінде жүзеге асырылады.
2D графикалық драйвері
Тарихи себептерге байланысты X. Org серверінде әлі де 2D рендерингті жеделдетудің белгілі бір түрін қолдайтын графикалық құрылғы драйверлері сақталып келеді. Бұрын, режимді орнату кейбір бейне контроллерлерінің аппараттық құралдарына (мысалы, GPU) арналған X серверінің графикалық құрылғы драйвері арқылы жүзеге асырылатын. Осы режимді орнату мүмкіндігіне, әртүрлі GPU-ларда қол жетімді болған кезде 2D үдетуге қосымша қолдау қосылды. Режимді орнату функциясы DRM-ге көшірілді және DRM режимді орнату интерфейсі арқылы ұсынылады, ал жаңа тәсіл «ядролық режимді орнату» (KMS) деп аталды. Бірақ 2D рендеринг үдетуі сақталды. Debian жүйесінде X. Org серверіне арналған 2D графикалық драйверлер жеке жинақталып, xserver xorg video * деп аталады. Орнатудан кейін 2D графикалық драйвер файлы /usr/lib/xorg/modules/drivers/ мекенжайында табылады. xserver xorg video nouveau жинағы nouveau drv-ді орнатады, ол 215 КиБ көлемде, ал Nvidia GeForce драйвері 8 МиБ көлемдегі nvidia drv.so файлын орнатады, ал Radeon Software fglrx drv.so файлын шамамен 25 МиБ көлемде орнатады. Қол жетімді тегін және ашық кодты графикалық құрылғы драйверлері Mesa 3D жобасының ішінде әзірленуде. Бұларды қажет болған жағдайда қайта құрастыруға болады, бірақ X. Org сервері өзінің көптеген нұсқаларында тұрақты API/ABI сақтайтын болғандықтан, меншік DDX 2D графикалық драйверлерін әзірлеу әлдеқайда жеңілдеді. 1.17 нұсқасында режимді орнатудың жалпы әдісі енгізілді. xf86 бейне режимдерін орнату жинағы, Debian жинағы xserver xorg video modesetting деп аталады, тоқтатылды, ал оның құрамындағы жалпы режимді орнату DDX серверлік жинаққа көшіріліп, KMS-ті қосатын әдепкі DDX болды, бұл AMD, Intel және NVidia GPU-дың көп бөлігін қолдайды. 2016 жылдың 7 сәуірінде AMD қызметкері Мишель Дэнзер xf86 video ati 7.7.0 нұсқасын және xf86 video amdgpu 1.1.0 нұсқасын шығарды, соңғысы олардың Polaris микроархитектурасын қолдауды қамтиды.
Жеделдету архитектурасы
(кем дегенде) XAA (XFree86 Acceleration Architecture), EXA, UXA және SNA бар. X терезесі жүйесінде XFree86 Acceleration Architecture (XAA) — бейнекартаның 2D аппараттық үдеуін X серверіне қолжетімді етуге арналған драйвер архитектурасы. Оны 1996 жылы Харм Ханемайер жазды және алғаш рет XFree86 3.3 нұсқасында жарияланды. Ол XFree86 4.0 үшін толыққанды қайта жазылды. Кейіннен X.Org серверінің 1.13 нұсқасынан алынып тасталды. Көптеген драйверлер үдеуді XAA модулі арқылы іске асырады. XAA әдепкі бойынша қосылған, бірақ жеке функциялардың үдеуін қажет болған жағдайда сервердің конфигурациялық файлында (XF86Config немесе xorg.conf) өшіруге болады. ARK чипсетіне арналған драйвер XAA-ның бастапқы әзірлеу платформасы болды. X.Org серверінің 6.9/7.0 нұсқасында EXA, XAA-ға қарағанда жақсырақ болғандықтан, оның орнына шығарылды, себебі XAA қазіргі бейнекарталар үшін жылдамдық артықшылығын қамтамасыз етпейді. EXA бүкіл X серверін OpenGL-ге көшірудің аралық қадамы ретінде қарастырылады.
Гламурлық
Glamor – X сервері үшін жалпы, аппараттық тәуелсіз 2D үдеткіш драйвері, ол X рендерлеу примитивтерін OpenGL операцияларына түрлендіреді, барлық қолданыстағы 3D OpenGL драйверлерін пайдалана отырып. Осылайша, ол Apple Quartz Compositor үшін Quartz Extreme және QuartzGL (2D өнімділігін үдету) сияқты жұмыс істейді. GLAMOR-дың басты мақсаты – барлық DDX 2D графикалық құрылғы драйверлерін және үдету архитектураларын ескіртіп, жаңасымен алмастыру, соның арқасында әрбір қолдау көрсетілетін графикалық чипсет үшін X 2D арнайы драйверлерін жазу қажеттілігінен құтылу. Glamor шейдерлерді қолдайтын 3D драйверін қажет етеді. Glamor өнімділігін жақсарту Google Summer of Code 2014 бағдарламасы үшін қабылданды. Glamor Xephyr және DRI3 қолдайды, сондай-ақ кейбір операцияларды 700–800% дейін арттыра алады. X.Org Server нұсқасы 1.16-ға қосылғаннан кейін Glamor-дың дамуы жалғастырылды және 1.17 нұсқасына арналған түзетулер жарияланды.
Виртуализациялау
Виртуалды ортада қонақ жүйеде іске қосылған X.Org серверінің мысалдары үшін ерекше және арнайы DDX бар: xf86 video qxl, "QXL бейне құрылғысы" драйвері. SPICE бұл драйверді пайдаланады, бірақ оныңсыз да жұмыс істей алады. Debian репозиторийлерінде xserver-xorg-video-qxl деп аталады, қараңыз: https://packages.debian.org/buster/xserver-xorg-video-qxl.
Кіріс стегі
Debian жүйесінде кіріс құрылғыларына қатысты драйверлер /usr/lib/xorg/modules/input/ каталогында табылады. Мұндай драйверлер мысалы, evdev drv.so, mouse drv.so, synaptics drv.so немесе wacom drv.so деп аталады. 1.16 нұсқасымен X.Org сервері xf86 input libinput деп аталатын қаптама түрінде libinput кітапханасын қолдауға ие болды. 2015 жылы Торонтода өткен XDC конференциясында libratbag конфигурацияланатын тышқандарды қолдау үшін арналған жалпы кітапхана ретінде ұсынылды. xserver xorg input joystick – X.Org серверінің классикалық джойстиктер мен геймпадтарды басқаруға арналған кіріс модулі, ол X ортасында ойын ойнау үшін емес, джойстик немесе геймпад арқылы курсорды басқару үшін көзделген.
IPC
X. Org сервері және кез келген x клиенті жеке-жеке процестер ретінде іске қосылады. Unix/Linux жүйесінде процесс басқа процестер туралы ештеңе білмейді. Егер басқа процесспен байланысу қажет болса, ол қолда бар процестер аралық байланыс (IPC) механизмдері арқылы байланысты реттеу үшін ядроға толық тәуелді. Unix домендік сокеттері бір машинада іске қосылған процестермен байланысу үшін қолданылады. Арнайы сокет функцияларын шақырулар жүйелік шақыру интерфейсінің құрамына кіреді. Интернет домендік сокеттері жергілікті түрде қолданылғанымен, Unix домендік сокеттері тиімдірек, себебі оларда протокол бойынша қосымша жүктеме жоқ (тексерулер, байттардың реті және т.б.). X. Org сервері D-Bus қолданбайды. Сокеттер – X серверінің процестері мен оның түрлі X клиенттері арасындағы ең көп қолданылатын процестер аралық байланыс (IPC) әдісі. Ол TCP/IP доменінде және тек UNIX доменінде жергілікті байланыс үшін қолданбалы бағдарламалау интерфейсін (API) қамтамасыз етеді. X Transport Interface-інде, мысалы, TLI (Transport Layer Interface) сияқты басқа да бірнеше API сипатталған. X клиент-сервер арасындағы IPC үшін басқа нұсқаларға X терезе жүйесінің кеңейтімдері қажет, мысалы MIT ортақ жад кеңейтімдері (MIT SHM).
Тарих
Қазіргі заманғы X. Org қоры 2004 жылы X стандарттарын қадағалап, ресми анықтамалық іске асыруды жариялаған орган, бұрынғы XFree86 әзірлеушілерімен біріккен кезде құрылды. X. Org серверінің алғашқы нұсқасы X11R6.7.0, XFree86 4.4 RC2 нұсқасынан жасалды, нәтижесінде жыл соңына дейін екі нұсқа бірдей шығарылды. X11R7.0.0 нұсқасы GNU Autotools негізінде жаңа модульдік құрастыру жүйесін қосты, ал X11R6.9.0 ескі imake құрастыру жүйесін сақтап қалды, екі нұсқа да бірдей код базасын пайдаланды. Содан бері X11R6.9 тармағы өзгеріссіз сақталып келеді және барлық жаңа әзірлемелер модульдік тармақта жүргізілуде. Жаңа құрастыру жүйесі плагиндер мен драйверлерді жүктеу үшін dlloader стандартты динамикалық байланыстырушысын енгізді, бұрынғы әдіс қолданудан тоқтатылды. Модульдендірудің нәтижесінде X11 бинарлық файлдары өздерінің /usr/X11R6 кіші каталог ағашынан шығып, көптеген Unix жүйелерінде /usr ағашына көшірілді. 2006 жылдың маусым айында X. Org серверінің бастапқы код базасын CVS-тен git-ке көшіруге тағы бір күш салынды. Екі күш-жігердің де ұзақ мерзімді мақсаты жобаға жаңа әзірлеушілерді тарту болды. Алан Куперсмиттің сөздерімен айтқанда:
7.1 нұсқасында KDrive фреймворкі (Кит Паккард жасаған X-тің шағын іске асырылуы, ол XFree86 негізінде емес, X. Org әзірлеушілері EXA сияқты жаңа идеяларды сынау үшін пайдаланған) X. Org серверінің негізгі код базасына енгізілді. 2008 жылы ядролық режимді орнату (KMS) драйверіне негізделген жаңа DRI2, DRI-дың орнын басты. Бұл өзгеріс X. Org серверінің архитектурасындағы маңызды кезең болды, себебі драйверлер серверлік және пайдаланушы кеңістігінен (UMS) ядролық кеңістікке көшірілді. 2013 жылы DRI3 және Present кеңейтулерінің бастапқы нұсқаларын Кит Паккард жылдам және жыртылмаған 2D рендерингті қамтамасыз ету үшін жазды және кодтады. Жыл соңында GLX-ті Red Hat компаниясының қызметкері Адам Джексон қайта жазды.
Шығарылымдар
ВерсияДатаX11 ВыпускОсновные характеристикиformat=dmyX11R7.0 (1.0.1)Первоначальный модульный X-сервер, архитектура EXAformat=dmyX11R7.1 (1.1.0)Интеграция KDrive, поддержка AIGLXformat=dmyX11R7.2 (1.2.0)Автоконфигурация, улучшенная поддержка композитных менеджеров на основе GLformat=dmyRandR 1.2format=dmyX11R7.3 (1.4.0)Поддержка горячего подключения устройств вводаformat=dmyX11R7.4 (1.5.1)MPXformat=dmyRandR 1.3, DRI2, XInput 1.5format=dmyX11R7.5 (1.7.1)XInput 2.0, многоуказательный Xformat=dmy, обработка ввода udevformat=dmyX11R7.6 (1.9.3)format=dmyX Синхронизационные барьерыformat=dmyformat=dmyX11R7.7 (1.12.2)XInput 2.2 (включая поддержку мультитач)format=dmyНовый API драйвера DDX, DRI2 offload, RandR 1.4, контексты OpenGL 3.x+, удаление XAAformat=dmyXInput 2.3format=dmyРасширения DRI3 и Presentformat=dmyXWayland DDX, ускорение GLAMOR, поддержка неподключенных к PCI устройств, поддержка systemd logind (rootless X), получена поддержка библиотеки libinput в форме обертки под названием xf86 input libinputformat=dmyИнтеграция бывшего драйвера xf86 video modesetting generic DRM/KMS, добавлена поддержка DRI2 с GLAMORformat=dmyRandR 1.5format=dmyПотоковый ввод, синхронизация PRIME, ограничение и искажение указателя XWayland, поддержка расширения Windows DRIformat=dmyУлучшения системы сборки Meson, GLXVND позволяет использовать отдельные драйверы OpenGL для разных X-экранов, RandR leasing улучшает поддержку Steam VRformat=dmyСистема сборки Meson теперь на одном уровне с Autotools, поддержка переменной частоты обновления, жесты на тачпаде через XInput 2.4