X, Xorg і D-Bus: у чому різниця?


35

У процесі навчання тим, що робити певні речі в програмуванні GUI (наприклад, резервування місця на екрані для програми), я повинен дізнатися більше про Менеджер вікон, як правило, X11 в Linux (я не впевнений, чи існують навіть дистрибутиви , де використовується що-небудь інше, ніж X11, хоча я чув про Wayland , який ще не реалізований.)

Я зовсім новачок у програмуванні і нетерплячий; тому я просто занурююся в це. Зараз я читаю ICCCM, з надією дізнатися більше. Цей документ, однак, спрямований на громадськість, яка знає (до речі) більше, ніж я. Тож я натрапив на якусь інформацію, і я хотів би отримати деякі роз’яснення.

Розділ 2 цитує ICCCM:

Зауважте, що всі дані, передані між власником та запитувачем, зазвичай повинні надходити за допомогою сервера в середовищі X Версії 11. Клієнт не може припустити, що інший клієнт може відкривати ті самі файли або навіть безпосередньо спілкуватися. Інший клієнт може спілкуватися з сервером за допомогою зовсім іншого механізму мереж (наприклад, один клієнт може бути DECnet, а інший TCP / IP). Таким чином, передавання непрямих посилань на дані (наприклад, назви файлів, імена хостів та номери портів тощо) дозволяється лише за умови, що обидва клієнта конкретно погоджуються.

Наскільки я розумію, X Window Manager побудований на вершині X Server (завдяки Wikipedia). У цитаті вище: він говорить, що клієнт може спілкуватися з сервером за допомогою DECnet або TCP / IP. Поки я вважав, що "сервер" є фігурою мови, зараз я сумніваюся: чи X сервер - це сервер, як на "веб-сервері"? Як я повинен зрозуміти його функцію / визначення?

Тоді часто є посилання на X11, Xorg, X Server та / або X Window Manager. Це стає заплутаним: чи пакет X11 включає в себе Xorg та X Window Manager? Якщо так, чи є ще щось у цьому комплекті X11?

X також потрібна миша, клавіатура або будь-який інший тип вводу: це також частина функцій X Server? Чи X Window Manager чітко доглядає лише за дисплеєм?

Нарешті, наведена вище цитата також зазначає, що клієнт спілкувався чи ні один з одним: це нагадало мені D-Bus, який я трохи використав для навчальних цілей. За допомогою D-Bus ви також можете викликати події вікна. Це мене трохи збентежило, як програми повинні спілкуватися між собою: * яка різниця між програмами, що взаємодіють за допомогою X Server або D-Bus? *

Прикро, що ця інформація залишається якось незрозумілою, це ускладнює навчання, але, сподіваємось, ви зможете пронести трохи світла на це :) Дякую.

Відповіді:


61

Ви задаєте тут п’ять питань, а може бути, краще будете задати п’ять запитань. Але я заскочу:

  1. X - це сервер і його можна порівняти з "веб-сервером", оскільки це процес, який слухає вхідні з'єднання, які говорять про певний протокол (протокол X), і він видає відповіді. З'єднання надходять від клієнтів X, які можуть бути на локальному хості або на віддаленому хості, до якого можна отримати доступ по мережі.

  2. X11 - це "основна версія" протоколу X, яка розвивалася з моменту створення. X11 - це останній протокол і найпоширеніший. (Xorg - це реалізація сервера X, бібліотеки X та колекції клієнтів. Усі розмовляють з X11. Є й інші реалізації: значною мірою неіснуюча XFree86; комерційна, наприклад Hummingbird Exceed; вилки, такі як XQuartz, що працює на Mac OS X )

  3. "Менеджер вікон" - це клієнт X, який управляє Windows. Зазвичай він несе відповідальність прикрашати вікна скосами / бордюрами, краплями тіней, панеллю меню, що містить кнопки тощо - та керувати логікою розміщення вікон; опорні вікна, які перетягуються, змінюються за розміром чи перестановляються тощо.

  4. X вимагає введення даних, і він несе відповідальність за управління цим ядром. Історично X робив багато апаратного управління самим. У сучасний час на платформі Linux X поступово стає «меншим» і делегує цю відповідальність ядра Linux. Перевагами цього є: менша база коду X; менше "перехрещених проводів" з ядром та X, які намагаються керувати одними і тими ж матеріалами. (прикладом цього є інтерфейс подій Linux, де події мишей тощо інтерпретуються та переводяться ядром та його драйверами у стандартний інтерфейс на /dev/input/event*, який споживається сервером X). Зауважте, що на інших платформах (BSD, Solaris) X все ще досить монолітний.

  5. Існує багато, багато способів для процесів спілкування один з одним. Я вважаю, що клієнти X можуть взаємодіяти за допомогою протоколу X (наприклад, традиційні менеджери вікон X повинні знати, коли інші клієнти малюють вікна, щоб прикрасити їх; пейджери повинні знати, коли змінюється розмір або положення вікна, щоб відобразити це в пейджері). D-Bus - це сучасна технологія міжпроцесорного зв'язку (IPC), розроблена для усунення недоліків інших методів. Це не конкретно X.


Приємного спасибі! Це справді корисно. Про 5 питань: я не знаю, що таке протокол у такому випадку, але якщо адміністратор хоче, щоб я розділив їх, я почую про це. Мені особисто подобається, щоб це було в одному документі, і я бачу 5 питань як підзаписи до заголовка. Знову дякую.
Бенджамін

Сенс у тому, щоб не скачувати протоколи, полягає в тому, що система X Window спроектована таким чином, що програми ("клієнти") не повинні працювати на одному хості, тобто ви можете увійти на іншу машину, запустити програму там, і вікно відкриється на вашому екрані як місцевий додаток. Якщо інша програма запитала "який у вас ідентифікатор процесу, тож я можу поговорити з вами безпосередньо", немає способу правильно відповісти на це питання.
Саймон Ріхтер

Можливо, ви не хочете, щоб ресурсом, яким поділяється X-сервер, є дисплей, що складається з одного або декількох моніторів та двох або більше пристроїв введення (клавіатура, миша)
hildred

Однозначно корисні всі 5 питань разом. Дякую.
Харві

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