8

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

Почему мы не знаем о таких вещах в Windows? Вики статья об этом пугает меня. Кто-нибудь может объяснить эти вещи? Как они работают? Почему это так сложно в Linux, а не в Windows?

Любые хорошие ссылки также приветствуются.

PS: я люблю знать внутренности, не стесняйтесь углубляться.

2 ответа2

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. Это путь, который я выбрал для своих нужд GUI, и я чувствовал, что его следует упомянуть для полноты.

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 освободить все ресурсы

и .. сделано.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .