X Window System — віконна система, що забезпечує стандартні інструменти й протоколи для побудови графічних інтерфейсів користувача. Майже всі сучасні операційні системи підтримують .
забезпечує базові функції графічного середовища: відображення й переміщення вікон на екрані, взаємодію з мишею та клавіатурою. не визначає деталей інтерфейсу користувача — цим займаються менеджери вікон, яких розроблено безліч. Через це зовнішній вигляд програм у середовищі може дуже різнитися; різні програми можуть використати цілком несхожі один на одного інтерфейси.
У передбачена мережева прозорість: графічні програми можуть виконуватися на іншій машині в мережі, інтерфейс при цьому буде передаватися через мережу й відображатись на локальній машині користувача. У терміни «клієнт» і «сервер» мають незвичне багатьом значення: «сервер» означає локальний дисплей користувача (дисплейний сервер), а «клієнт» — програму, яка цей дисплей використовує (вона може виконуватися й на віддаленому комп'ютері).
Система була розроблена в Массачусетському технологічному інституті (MIT) 1984 року. Нинішня версія протоколу — X11 (на квітень 2016 р. — X11R7.7) — з'явилась у вересні 1987 р. Проєкт X очолюється фондом X.Org Foundation. Зразкова реалізація () системи вільно доступна на умові ліцензії MIT і подібних до неї ліцензій.
часто називають X11 чи X, неформально «ікси́».
Клієнт-серверна модель і мережева прозорість
X Window System використовує клієнт-серверну модель взаємодії: X-сервер обмінюється повідомленнями з різними клієнтськими програмами. Сервер приймає запити виведення графіки (вікон) і відправляє назад введення користувача (з клавіатури, миші чи сенсорного екрана). X-сервер може бути: системною програмою, яка контролює виведення зображення на персональному комп'ютері; застосунком, який відображає графіку у вікно іншої дисплейної системи; виділеним компонентом аппаратного забезпечення.
Ця клієнт-серверна термінологія — термінал користувача як «сервер» і віддалені програми як «клієнти» — найчастіше заплутує нових користувачів X, оскільки зазвичай ці терміни мають зворотні значення. Але приймає точку зору програми, а не кінцевого користувача: локальний дисплей надає послуги відображення графіки програмам, тобто виступає в ролі сервера. Віддалені програми користуються цими послугами, а тому відіграють ролі клієнтів.
Протокол, за допомогою якого спілкуються сервер і клієнт, є прозорим для мережі: клієнт і сервер можуть знаходитися як на одній і тій же машині, так і на різних. Зокрема, вони можуть працювати на різних архітектурах під керівництвом різних операційних систем — результат буде однаковим. Клієнт і сервер можуть навіть безпечно взаємодіяти через Інтернет за допомогою тунелювання з'єднання крізь зашифрований мережевий сеанс.
Щоб запустити віддалену клієнтську програму, що виводить графіку на локальний X-сервер, користувач зазвичай відкриває емулятор термінала та підключається до віддаленої машини за допомогою telnet або SSH. Потім він віддає команду, яка вказує дисплей, на який слід виводити графіку (наприклад, export DISPLAY=[ім'я комп'ютера користувача]:0 при використанні bash). Нарешті, користувач запускає клієнтську програму. Вона під'єднається до локального X-сервера та буде відображати графіку на локальний екран і приймати введення від локальних пристроїв введення. Інший варіант — використовувати невелику допоміжну програму, яка підключається до віддаленої машини та запускає на ній потрібну клієнтську програму.
Використання віддалених клієнтів може бути корисно, наприклад, у таких ситуаціях: Графічне адміністрування віддаленої машини; Виконання інтенсивних ресурсомістких обчислень на віддаленій UNIX-машині та виведення результатів на локальній Windows-машині; Виконання графічних програм одночасно на декількох машинах з одним дисплеєм, однією клавіатурою та однією мишею.
Принципи побудови X В 1984-му Боб Шейфлер та Джим Геттіс зафіксували ранні принципи побудови X: Додавай нову функціональність тільки тоді, коли без неї не можна завершити якийсь реальний застосунок. Вирішити, чим не є система, настільки ж важливо, наскільки вирішити, чим вона є. Не намагайся задовольнити всі можливі потреби; замість цього зроби систему розширюваною, щоб нові потреби могли бути задоволені сумісним чином. Гірше за узагальнення одного прикладу може бути тільки узагальнення взагалі без прикладів. Якщо проблема не зрозуміла до кінця, можливо, краще не вирішувати її зовсім. Якщо ти можеш добитися 90 відсотків потрібного ефекту, витративши всього 10 відсотків сил, використовуй простіше рішення. Якнайкраще ізолюй складні місця. Забезпечуй механізм, а не політику. Зокрема, політика інтерфейсу користувача має бути в руках клієнтів.
З того часу проєкт X, переважно, дотримувався цих принципів. Демонстраційна реалізація розробляється з розрахунком на розширення й поліпшення, в той самий час, вона залишається майже повністю сумісною з протоколом 1987 року.
Інтерфейси користувача
X Window System навмисно не визначає, як повинен виглядати інтерфейс користувача програми — кнопки, меню, заголовки вікон і т. д. Ці питання вирішуються на рівні віконних менеджерів, інструментаріїв елементів інтерфейсу, середовищ робочого столу і на рівні окремих застосунків. З цієї причини візуальне подання X-інтерфейсів зазнало величезних змін з плином часу.
Віконний менеджер керує розміщенням і виглядом вікон застосунків. Він може створювати інтерфейс, подібний Microsoft Windows або Macintosh (наприклад, так працюють менеджери вікон KWin в KDE та Metacity в GNOME), або зовсім інший стиль (наприклад, в фреймових віконних менеджерах, таких, як Ion). Віконний менеджер може бути простим і мінімалістичним (як twm — базовий віконний менеджер, що постачається з X), а може пропонувати функціональність, близьку до повноцінного робочого середовища (наприклад, Enlightenment).
Багато користувачів використовують X разом з повним середовищем робочого столу, яке містить віконний менеджер, різні програми та єдиний стиль інтерфейсу. Найпопулярніші середовища робочого столу — GNOME та KDE. У стандарті Single UNIX Specification вказане середовище CDE. Проєкт freedesktop.org намагається забезпечити взаємодію між різними середовищами, а також компоненти, необхідні для конкурентоспроможного робочого столу на основі X.
Реалізації Референсна (зразкова) реалізація () від фонду X.Org Foundation, звана X.Org Server, є канонічною реалізацією X Window System. Оскільки вона поширюється на умовах досить ліберальної ліцензії, з'явилися кілька її різновидів: (як вільних, так і пропрієтарних). Комерційні постачальники UNIX часто беруть референсну реалізацію та адаптують її до власного апаратного забезпечення, зазвичай сильно модифікуючи її та додаючи пропрієтарні розширення.
Аж до 2004 проєкт XFree86 був найпоширенішим варіантом X для вільних UNIX-подібних операційних систем. XFree86 виник як порт X на 386-сумісні персональні комп'ютери. До кінця 1990-х цей проєкт став головним джерелом технічних інновацій в X Window System і де-факто керував розробкою X. Проте у 2004 році XFree86 змінила умови ліцензії та реалізація X.Org Server (яка є форком XFree86, але з вільною ліцензією) стала поширенішою.
Коли X Window System виконується всередині іншої віконної системи (наприклад, віконної підсистеми Microsoft Windows або Mac OS), вона зазвичай працює в режимі без кореневого вікна (). Це означає, що кореневим вікном (тлом екрана і пов'язаними з ним меню) керує зовнішня віконна система, а не власне X Window System. При цьому зовнішня віконна система також керує геометрією X-вікон, створюваних усередині неї. Однак деякі сервери (наприклад, Exceed, Xming або Cygwin/X) здатні створювати й кореневе вікно — в такому разі клієнти відображаються в окремому вікні зовнішньої системи.
X-термінали X-термінал — це виділене апаратне забезпечення, на якому виконується X-сервер і яке служить тонким клієнтом. Ця архітектура завоювала популярність при побудові недорогих термінальних парків, де багато користувачів одночасно використовують один великий сервер застосунків. Таке використання X Window System добре відповідає початковим намірам розробників з MIT.
X-термінали можуть вивчати мережу (в межах локального широкомовного домену) з використанням протоколу XDMCP, складаючи при цьому список вузлів мережі, з яких вони можуть запускати клієнтів. На початковому вузлі повинен виконуватися дисплейний менеджер X ().
Зараз виділені (апаратні) X-термінали не мають широкої популярності: зазвичай персональний комп'ютер з X-сервером забезпечує ту ж функціональність при меншій вартості.
Розширення X-сервер складається з набору розширень, кожне з яких реалізує певні функції: від промальовування геометричних примітивів до прискорення обробки та виведення на екран тривимірної графіки з використанням можливостей відеоапаратури. Майже кожен з цих модулів можна відключити або налаштувати в конфігураційному і.
DDC VESA Display Data Channel(DDC™) — стандарт обміну інформацією між монітором та графічною платою, що дозволяє монітору передавати дані про підтримувану роздільну здатність, частоти розгортки, виробника монітора і т. д. Модуль DDC підтримує версії 1 і 2 специфікації DDC. Відповідно до отриманих даних він встановлює основні параметри екрана або попереджує про невідповідність заданих користувачем параметрів.
RANDR X Resize, Rotate and Reflect Extension — розширення X-сервера, що реалізовує функції масштабування, повороту та відображення кореневого вікна. Використовується при зміні роздільної здатності, при динамічній заміні монітора (наприклад, при перемиканні з вбудованого екрана ноутбука на зовнішній монітор). Розсилає застосункам, що працюють, попередження про зміну конфігурації екрана.
XRender X Rendering Extension надає функції для поєднання та виводу зображень на екран. Дозволяє обрізати зображення, накладати маску з кольорами з використанням альфа-каналу, використовувати різні фільтри, готувати й виводити текстову інформацію, а також відображати основні геометричні фігури.
Shape Розширення Shape призначено для поліпшення вигляду інтерфейсу користувача. Серед його можливостей — відкидання тіні елементами інтерфейсу для створення ілюзії тривимірності, вікна та кнопки з округлими краями; можливість створювати різні фігури, відмінні від прямокутних.
Xinerama Розширення Xinerama дозволяє представити декілька моніторів як один екран. З його допомогою можна виводити узгоджене зображення на великі екрани, складені з багатьох моніторів. Однак багато з наявних в наш час віконних менеджерів не підтримують (або не повністю підтримують) специфікації Xinerama, і тому показують неадекватне зображення при використанні цього розширення.
Xv X video extension — розширення, що дозволяє прискорити виведення відеофрагментів на екран із використанням можливостей графічної плати (а точніше — її драйвера), зменшуючи навантаження на центральний процесор. Багато графічних плат дозволяють виводити відеозображення у форматах кодування кольору YUV (YUY2, I420 і т. д.), які використовуються в стандартах систем аналогового кольорового телебачення PAL, SECAM, NTSC, не переводячи їх попередньо в формат передачі кольору екрана (RGB16/24/32), а також робити протилежне кодування. Розширення Xv надає інформацію про доступні графічні плати, кількість доступних портів (кожен порт може використовувати тільки один застосунок), підтримувані формати кодування кольору. Всю цю інформацію можна переглянути за допомогою утиліти xvinfo.
Обмеження та критика X У книзі «The UNIX-HATERS Handbook» (1994) ціла глава присвячена проблемам X у кінці 1980-х — на початку 1990-х років. Стаття «Why X Is Not Our Ideal Window System» («Чому X не є ідеальною віконною системою») (1990) докладно розглядає проблеми протоколу й дає рекомендації щодо поліпшення.
Відеоапаратура