Переход от 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
После прочтения ответов прочитайте эту статью «Мысли и бессвязные по протоколу Х» julien.danjou.info/blog/…
когти
1
Ссылки как измененные julien.danjou.info/blog/2010/…
fstamour

Ответы:

13

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

В системах Unix вы получаете API / framework (X11 / X Window System), для которого существует несколько реализаций (Xorg, Xfree86), поверх которого вы получаете различные API / каркасы более высокого уровня (GTK +, Qt, ... ) потому что raw X11 настолько примитивен, поверх которого вы получаете различные рабочие столы (Gnome, KDE, ...), все они сделаны разными людьми.

Кроме того, система X11 была разработана с нуля с учетом удаленного графического интерфейса пользователя - то есть локального компьютера, отображающего графический интерфейс удаленно работающего приложения, - который вводит понятия «X-сервер» и «X-клиент».

Кроме того, существует номенклатура, которая «чувствует» неверное решение для новичков: на вашем локальном компьютере запущен «X-сервер», предоставляющий службу «показ GUI», в то время как удаленный компьютер является «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.

Вполне возможно использовать приложения Qt на рабочем столе Gnome или приложения GTK + на рабочем столе KDE (так было не всегда), поэтому вам не нужно беспокоиться о совместимости. Учитывая выбор между двумя приложениями с сопоставимыми функциями, люди обычно предпочитают приложение, использующее «родные» виджеты своего рабочего стола, но я бы не стал беспокоиться об этом.

Другие, более важные пункты в выборе «набора инструментов виджетов»: условия лицензирования, поддержка выбранного языка, кросс-платформенная совместимость.


Post Scriptum : Возвращаясь через несколько лет, я приобрел некоторый собственный опыт программирования GUI и осознал, что в приведенном выше объяснении отсутствует одна вещь, если вы ищете совет «в какую сторону идти»: wxWidgets . Это платформа, которая строится поверх того, что вы используете изначально, и позволяет прозрачно переносить разработку графического интерфейса, не жертвуя производительностью и не подключая какие-либо строки лицензирования. C ++ API. Это путь, который я выбрал для своих нужд графического интерфейса, и я чувствовал, что его следует упомянуть для полноты.

DevSolar
источник
+1 и обратите внимание, что если вам удастся выбрать фреймворк (например, Qt), вам не нужно будет особо заботиться обо всем, что связано с Х (хотя некоторые даже).
Питер Ярич
+1 & Таким образом, часть графического интерфейса Windows 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 (System)», реализованный «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 освободить все ресурсы

и .. сделано.

Акира
источник