X, Xorg и D-Bus: в чем разница?

35

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

Я довольно новичок в программировании и нетерпелив; так что я просто погружаюсь в это. Сейчас я читаю ICCCM с надеждой узнать больше. Этот документ, однако, нацелен на публику, которая знает (кстати) больше, чем я. Поэтому я натолкнулся на некоторую информацию и хотел бы получить разъяснения.

Раздел 2 цитат ICCCM:

Обратите внимание, что все данные, передаваемые между владельцем и запросчиком, обычно должны передаваться через сервер в среде X версии 11. Клиент не может предположить, что другой клиент может открыть те же файлы или даже общаться напрямую. Другой клиент может общаться с сервером с помощью совершенно другого сетевого механизма (например, один клиент может быть DECnet, а другой TCP / IP). Таким образом, передача косвенных ссылок на данные (такие как имена файлов, имена хостов и номера портов и т. Д.) Разрешена только в том случае, если оба клиента конкретно согласны.

Насколько я понимаю, X Window Manager построен на основе X Server (спасибо Википедии). В приведенной выше цитате говорится, что клиент может общаться с сервером, используя 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? *

Обидно, что эта информация остается неясной, ее труднее усваивать, но, надеюсь, вы сможете пролить свет на это :) Спасибо.

Вениамин
источник

Ответы:

62

Вы задаете пять вопросов здесь, и, может быть, лучше задать пять вопросов ☺ Но я прыгну:

  1. X - это сервер, который можно сравнить с «веб-сервером» в том смысле, что это процесс, который прослушивает входящие соединения, которые говорят на определенном протоколе (протокол X), и выдает ответы. Соединения исходят от X-клиентов, которые могут быть на локальном хосте или на удаленном хосте, доступ к которому осуществляется через сеть.

  2. X11 является «основной версией» протокола X, который развивался с самого начала. X11 является самым последним протоколом и наиболее распространенным. (Xorg - это реализация X-сервера, X-библиотек и коллекции клиентов, все говорят на X11. Существуют и другие реализации: в основном несуществующая XFree86; коммерческие, такие как Hummingbird Exceed; вилки, такие как XQuartz, который работает в Mac OS X )

  3. «Диспетчер окон» - это клиент X, который управляет окнами. Как правило, он отвечает за оформление окон со скосами / границами, тенями, панелью меню, содержащей кнопки и т. Д., И управляет логикой размещения окон; поддержка перетаскивания, изменения размера или перестановки окон и т. д.

  4. X требует ввода и несет общую ответственность за управление этим с ядром. Исторически X много занимался управлением аппаратными средствами. В наше время на платформе Linux X постепенно становится «меньше» и передает эту ответственность ядру Linux. Преимущества этого: меньшая X кодовая база; меньше "скрещенных проводов" с ядром и X, которые пытаются управлять одним и тем же. (Примером этого является интерфейс событий Linux, где ядро ​​и его драйверы интерпретируют и транслируют события от мышей и т. д. в стандартный интерфейс /dev/input/event*, который используется X-сервером). Обратите внимание, что на других платформах (BSD, Solaris) X все еще довольно монолитен.

  5. Существует множество способов взаимодействия процессов друг с другом. Я полагаю, что X-клиенты могут взаимодействовать посредством протокола X (например, традиционные менеджеры X-окон должны знать, когда другие клиенты рисуют окна, чтобы их украшать; пейджеры должны знать, когда изменяется размер или положение окна, чтобы отразить это в пейджере). D-Bus - это современная технология межпроцессного взаимодействия (IPC), разработанная для устранения недостатков других методов. Это не специфично для X.

jmtd
источник
Хорошо, спасибо! Это действительно полезно. Насчет 5 вопросов: я не знаю, что такое протокол в этом случае, но если администратор захочет, чтобы я их разделил, я услышу об этом. Мне лично нравится иметь это в одном документе, и видеть 5 вопросов как подвопросы к названию. Еще раз спасибо.
Бенджамин
Суть в том, что протоколы не переключаются между собой, заключается в том, что система X Window разработана таким образом, что приложения («клиенты») не должны запускаться на одном хосте, то есть вы можете войти на другой компьютер, запустить там программу, и на вашем экране откроется окно. как локальное приложение. Если другая программа спросит «какой у вас идентификатор процесса, чтобы я мог поговорить с вами напрямую», то нет способа правильно ответить на этот вопрос.
Саймон Рихтер
Вы можете не захотеть, чтобы ресурс, совместно используемый X-сервером, представлял собой дисплей, состоящий из одного или нескольких мониторов и двух или более устройств ввода (клавиатура, мышь)
hildred
Определенно полезно все 5 вопросов вместе. Спасибо.
Харви
@hildred В случае сенсорного экрана в конфигурации киоска у вас может быть всего одно устройство ввода.
Шадур