Я разработчик Windows (Win32api), переходя с Windows на Linux. При установке linux нужно многое узнать о X11, X Window System, X Server, Xorg, Xfree86 и о том, чего нет.
Почему мы не знаем о таких вещах в Windows? Вики статья об этом пугает меня. Кто-нибудь может объяснить эти вещи? Как они работают? Почему это так сложно в Linux, а не в Windows?
Любые хорошие ссылки также приветствуются.
PS: я люблю знать внутренности, не стесняйтесь углубляться.
Ответы:
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. Это путь, который я выбрал для своих нужд графического интерфейса, и я чувствовал, что его следует упомянуть для полноты.
источник
At the bottom, a "window manager"
Оконный менеджер собирается в X Window System? если это так, система Windows будет внизу справа? Вы меня путаете с оконным менеджером и оконной системой.Я не понимаю, почему вам так трудно понять объяснение, предоставленное http://en.wikipedia.org/wiki/X_Window_System, но в любом случае:
Система X Window обычно состоит из 2 частей:
Сервер подключается к оборудованию (графическая карта, устройства ввода) и позволяет клиентам использовать эти ресурсы. Клиенты подключаются к xserver и используют предоставленные ресурсы.
Существуют серверы для Unix (Xorg, у Mac есть свои собственные и т. Д.) И для Windows (Hummingbird, порт Cygwin для Xorg и т. Д.).
Вы можете подключить клиентов в одной ОС к серверам, работающим в другой ОС.
Связь между сервером и клиентами осуществляется через Xlib-API или (более современный) xcb-API .
Чтобы создать простое приложение, вы обычно просто делаете это:
и .. сделано.
источник