Перехід від Windows до Linux: Розуміння - X Window System, X Server, Xorg, Xfree86


10

Я розробник Windows (Win32api), який переходить із Windows на Linux. Під час встановлення Linux багато відомостей про X11, X Window System, X Server, Xorg, Xfree86 і що ні.

Чому ми не знаємо про такі речі у Windows? Стаття Вікі про ці мене лякає. Чи може хтось пояснити ці речі? Як вони працюють? Чому це так складно в Linux та не у Windows?

Будь-які хороші посилання також оцінені.

PS: Я люблю знати внутрішнє, не соромтеся заглиблюватися.


1
Прочитавши відповіді, прочитайте цю статтю "Думки та бурхливість по протоколу X" julien.danjou.info/blog/…
кігті

1
Посилання змінені julien.danjou.info/blog/2010/…
fstamour

Відповіді:


13

Windows дає вам єдину реалізацію одного робочого столу поверх єдиної реалізації єдиного API / рамки, все це зроблено Microsoft.

У системах Unix ви отримуєте API / фреймворк (X11 / X Window System), для якого існують кілька реалізацій (Xorg, Xfree86), поверх яких ви отримуєте різні API / рамки більш високого рівня (GTK +, Qt, ... ) тому що сирий X11 настільки примітивний, поверх якого ви отримуєте різні настільні комп’ютери (Gnome, KDE, ...), які роблять різні люди.

Більше того, система X11 була розроблена з нуля з віддаленими графічними інтерфейсами, тобто локальною машиною, що відображає графічний інтерфейс віддалено запущеної програми, яка представляє поняття "сервер X" і "X клієнт".

Потім з'являється номенклатура, яка "відчуває" неправильний шлях для новачків: на вашій локальній машині працює "X-сервер", що надає послугу "відображення графічного інтерфейсу", тоді як віддалений апарат - "Клієнт X", використовуючи послуги на вашій машині для відображення графічного інтерфейсу.

Ну, це швидкий огляд; Як тільки ви це розібралися, розуміння будь-яких статей / дописів на форумі з цього питання повинно стати набагато простішим.

Редагувати: відповісти на два перші коментарі ОП.

Так, "X11" - це просто протокол, а Xorg / XFree86 - це дві реалізації. На своєму базовому рівні X11 стосується лише малювання ліній та крапок, що не дуже корисно, якщо ви хочете зробити графічний інтерфейс.

Крім протоколу X11, люди реалізували багато речей, і порівняння 1: 1 з Windows досить складно, оскільки Microsoft ніколи не намагався реально тримати речі окремо. Також я не є розробником типу GUI, тобто мій фактичний досвід роботи з будь-якою системою мінімальний.

У нижній частині "менеджер вікон" надає вікно (обробка меж, закриття / мінімізація / максимізація кнопок, зміна розміру тощо) та пропонує набір інструментів віджетів "нерухомість" у вікні. Є багато менеджерів вікон, деякі імітують інші системи (Windows, MacOS, AmigaOS, що завгодно), і вони здебільшого є взаємозамінними прозорими для решти системи.

"Набір інструментів віджетів" пропонує вам кнопки, повзунки, текстові поля тощо, на яких можна побудувати свій графічний інтерфейс. Це те, що ви (як розробник програми) насправді добираєтесь до "бачення", API розумного, і те, що визначає більшість "вигляду і відчуття" вашої програми.

"Робочий стіл" будує ряд програм на основі певної комбінації інструментів віджетів / вікон, щоб забезпечити послідовний вигляд та відчуття. Вам не доведеться турбуватися з цим, якщо ви насправді не хочете розробити сам робочий стіл.

На робочому столі "Gnome" використовується набір інструментів віджетів "GTK +" вгорі вікна-менеджера "Metacity".

На робочому столі "KDE" використовується набір інструментів віджетів "Qt" у верхній частині вікна "KWin".

Зауважте, що особливо ці два, GTK + та Qt, переросли далеко за рамки простих "наборів інструментів віджетів" у "рамки розробки додатків". Якщо ви хочете розробити програми для графічного інтерфейсу для Linux, вам потрібно вибрати, який із цих двох ви хочете використовувати. Є більше варіантів, якщо ви хочете більш "легкий" додаток (не потребує великих залежностей від бібліотеки), але сьогодні у більшості систем все одно встановлені GTK + та Qt libs.

Цілком можливо використовувати програми Qt на робочому столі Gnome або GTK + додатки на робочому столі KDE (це не завжди було так), тому вам доведеться мало хвилюватися про сумісність. Зважаючи на вибір між двома програмами порівнянної функціональності, люди зазвичай віддають перевагу додатку, використовуючи "рідні" віджети свого робочого столу, але я б не турбувався про це.

Інші, важливіші пункти відбору "набору інструментів віджетів": Умови ліцензування, підтримка вашої мови вибору, сумісність між платформами.


Post Scriptum : Повернувшись через кілька років, я зібрав власний досвід програмування графічного інтерфейсу, і зрозумів, що одне не вистачає у вищезазначеному поясненні, якщо ви шукаєте поради "в який шлях": wxWidgets . Це рамка, яка ґрунтується на всьому, що ви використовуєте в оригінальному режимі, і дозволяє прозоро переносити розроблений графічний інтерфейс, не приносячи шкоди продуктивності та не додаючи жодних рядків ліцензійного зв’язку. API C ++. Це шлях, який я вибрав для моїх потреб у графічному інтерфейсі, і я вважав, що його слід згадати для повноти.


Позначте +1 і зауважте, що якщо вам вдасться вибрати рамку (наприклад, Qt), вам не потрібно буде так сильно піклуватися про всі речі X (хоча деякі).
Петро Ярич

Частка GUI +1 та API інтерфейсу API еквівалентна Qt & GTK +. Тоді що еквівалент X Window System у Windows? чому і як існують KDE & Gnome?
кігті

@DevSolar: ви в правильному шляху. будь ласка, трохи більш описовим. X11 - це лише такі технічні характеристики, як POSIX? і xorg & xfree86 - це дві його реалізації? Якщо є GTK + & Qt, у чому була потреба Gnome & KDE? Порівняйте кожен крок / рівень з вікнами. Це легко зрозуміти для мене.
кігті

At the bottom, a "window manager"Менеджер вікон накопичується на X Window System? якщо так, система Windows буде внизу праворуч? Ти змушуєш мене плутати з менеджером вікон та системою вікон.
кігті

"X11" / "X Window (Система)", реалізовані "Xorg" / "XFree86", знаходяться в самому низу і пропонують крапки та лінії. "Менеджер вікон" ("Metacity" / "Kwin") пропонує вікна (кадр, перетягування, зміна розміру, закриття тощо).
DevSolar

3

Я не розумію, чому вам так важко зрозуміти пояснення, надані http://en.wikipedia.org/wiki/X_Window_System, але все одно:

Система X Window зазвичай складається з 2 частин:

  • Сервер (званий XServer)
  • Клієнти (звані .. XClients :))

Сервер підключається до обладнання (графічна карта, пристрої введення) і дозволяє клієнтам використовувати ці ресурси. Клієнти підключаються до xserver та використовують надані ресурси.

Існують сервери для Unix (Xorg, mac люди мають власні тощо) та для Windows (Hummingbird, порт Cygwin порта Xorg тощо).

Ви можете підключити клієнтів в одній ОС до серверів, що працюють на іншій ОС.

Комунікація між сервером та клієнтами здійснюється через Xlib-API або (більш сучасний) xcb-API .

Щоб створити просту програму, зазвичай це потрібно зробити:

  • підключити до xserver
  • попросити xserver створити вікно (яке дасть вам "ручку")
  • скажіть xserver піднести вікно
  • обробляти події (миша, клавіатура, експозиція, рух тощо)
  • малювати речі до вікна (текст, графіки тощо)
  • закрийте додаток, повідомивши xserver звільнити всі ресурси

і .. зроблено.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.