Przejście z systemu Windows do Linux: Zrozumienie - X Window System, X Server, Xorg, Xfree86

10

Jestem programistą Windows (Win32api) przenoszącym się z systemu Windows na system Linux. Podczas instalowania Linuksa jest wiele rzeczy, które należy wiedzieć o X11, X Window System, X Server, Xorg, Xfree86.

Dlaczego nie jesteśmy świadomi takich rzeczy w systemie Windows? Artykuł na wiki na ten temat mnie przeraża. Czy ktoś może wyjaśnić te rzeczy? Jak oni pracują? Dlaczego jest tak skomplikowany w systemie Linux, a nie w systemie Windows?

Doceniamy również wszelkie dobre referencje.

PS: Uwielbiam znać elementy wewnętrzne, nie wahaj się zagłębić.

pazury
źródło
1
Po przeczytaniu odpowiedzi przeczytaj ten artykuł „Myśli i włóczenie się po protokole X” julien.danjou.info/blog/…
pazury
1
Linki zmienione julien.danjou.info/blog/2010/…
fstamour

Odpowiedzi:

13

Windows zapewnia pojedynczą implementację pojedynczego pulpitu na jednej implementacji pojedynczego API / frameworka, wszystkie wykonane przez Microsoft.

W systemach Unix otrzymujesz API / framework (X11 / X Window System), dla którego istnieje wiele implementacji (Xorg, Xfree86), a na dodatek dostajesz różne API / frameworki „wyższego poziomu” (GTK +, Qt, ... ), ponieważ surowy X11 jest tak prymitywny, na którym dostajesz różne pulpity (Gnome, KDE, ...), wszystkie wykonane przez różnych ludzi.

Co więcej, system X11 został zaprojektowany od podstaw z myślą o zdalnych GUI - tj. Maszynie lokalnej wyświetlającej GUI zdalnie działającej aplikacji - która wprowadza pojęcia „X Server” i „X Client”.

Następnie istnieje nomenklatura, która „wydaje się” niewłaściwa dla nowych użytkowników: na twoim komputerze lokalnym działa „X Server”, który zapewnia usługę „display GUI”, podczas gdy maszyna zdalna to „X Client” korzystający z usług na komputerze, aby wyświetlić GUI.

Cóż, to jest krótki przegląd; kiedy już to rozwiążesz, zrozumienie wszelkich artykułów / postów na forum na ten temat powinno stać się znacznie łatwiejsze.

Edycja: aby odpowiedzieć na dwa pierwsze komentarze PO.

Tak, „X11” jest jedynie protokołem, a Xorg / XFree86 to dwie implementacje. Na podstawowym poziomie X11 dotyczy tylko rysowania linii i kropek, co nie jest szczególnie przydatne, jeśli chcesz wykonać GUI.

Oprócz protokołu X11 ludzie zaimplementowali wiele rzeczy, a porównanie 1: 1 z Windows jest dość trudne, ponieważ Microsoft nigdy nie zadał sobie trudu, aby naprawdę oddzielić rzeczy. Ponadto nie jestem programistą typu GUI, tzn. Moje rzeczywiste doświadczenie z dowolnym systemem jest minimalne.

Na dole „menedżer okien” zapewnia okno (obsługa granic, zamykanie / minimalizowanie / maksymalizowanie przycisków, zmiana rozmiaru itp.) Oraz „nieruchomości” w oknie zestawu narzędzi widżetu. Istnieje wiele menedżerów okien, niektóre naśladują inne systemy (Windows, MacOS, AmigaOS, cokolwiek), i są one w większości wymienne dla pozostałych systemów.

„Zestaw narzędzi widżetów” oferuje przyciski, suwaki, pola tekstowe itp., Na których można zbudować GUI. Właśnie to (jako twórca aplikacji) faktycznie „widzisz”, pod względem API i to decyduje o większości „wyglądu i działania” Twojej aplikacji.

„Pulpit” buduje wiele aplikacji na pewnej kombinacji zestawu narzędzi / menedżera okien, aby zapewnić spójny wygląd i działanie. Nie musisz się tym przejmować, chyba że naprawdę chcesz sam zaprojektować pulpit.

Pulpit „Gnome” korzysta z zestawu narzędzi widgetów „GTK +” w górnej części menedżera okien „Metacity”.

Pulpit „KDE” korzysta z zestawu narzędzi widgetów „Qt” na menedżerze okien „KWin”.

Zauważ, że szczególnie te dwa, GTK + i Qt, ewoluowały daleko poza proste „zestawy narzędzi widgetów” w „ramy programowania aplikacji”. Jeśli chcesz tworzyć aplikacje GUI dla Linuksa, musisz wybrać, którego z nich chcesz użyć. Jest więcej możliwości, jeśli chcesz mieć bardziej „lekką” aplikację (niewymagającą dużych zależności bibliotek), ale dziś większość systemów ma już zainstalowane biblioteki GTK + i Qt.

Z aplikacji Qt na pulpicie Gnome lub aplikacji GTK + na pulpicie KDE można całkowicie korzystać (nie zawsze tak było), więc nie musisz się martwić o kompatybilność. Biorąc pod uwagę wybór między dwiema aplikacjami o porównywalnej funkcjonalności, ludzie zazwyczaj wolą aplikację przy użyciu „rodzimych” widżetów na wybranym komputerze, ale nie martwiłbym się tym.

Inne, ważniejsze punkty w wyborze „zestawu narzędzi widgetów”: Warunki licencjonowania, obsługa wybranego języka, zgodność między platformami.


Post Scriptum : Wracając kilka lat później, nabrałem trochę własnego doświadczenia w programowaniu GUI i zdaję sobie sprawę, że w powyższym wyjaśnieniu brakuje jednej rzeczy, jeśli szukasz porady „w którą stronę iść”: wxWidgets . Jest to struktura, która opiera się na czymkolwiek, z czego korzystasz natywnie, i pozwala na przezroczyste, przenośne tworzenie GUI, bez poświęcania wydajności i bez dołączania żadnych ciągów licencji. C ++ API. Jest to ścieżka, którą wybrałem dla moich potrzeb w zakresie GUI, i uważam, że należy o niej wspomnieć, aby była kompletna.

DevSolar
źródło
+1 i zauważ, że jeśli uda ci się wybrać framework (na przykład Qt), nie będziesz musiał przejmować się wszystkimi rzeczami X (choć niektóre).
Peter Jaric
+1 i tak część GUI Windows API jest odpowiednikiem Qt i GTK +. Więc jaki jest odpowiednik X Window System w Windowsie? dlaczego i jak istnieją KDE i Gnome?
pazury
@DevSolar: jesteś na dobrej drodze. proszę, bądź trochę bardziej opisowy. X11 to tylko specyfikacje takie jak POSIX? a xorg i xfree86 to dwie implementacje? Jeśli jest GTK + i Qt, jaka była potrzeba Gnome i KDE? Porównaj każdy krok / poziom z oknami. To dla mnie łatwe do zrozumienia.
pazury
At the bottom, a "window manager"Menedżer okien buduje się na X Window System? jeśli tak, system Windows byłby w prawym dolnym rogu? Sprawiasz, że mylę się z menedżerem okien i systemem okien.
pazury
„X11” / „X Window (System)”, zaimplementowane przez „Xorg” / „XFree86”, znajdują się na samym dole i oferują kropki i linie. „Menedżer okien” („Metacity” / „Kwin”) oferuje okna (ramka, przeciąganie, zmiana rozmiaru, zamykanie itp.).
DevSolar
3

Nie rozumiem, dlaczego tak trudno ci zrozumieć wyjaśnienie dostarczone przez http://en.wikipedia.org/wiki/X_Window_System, ale tak czy inaczej:

System X Window zwykle składa się z 2 części:

  • Serwer (o nazwie XServer)
  • Klienci (nazywani .. XClients :))

Serwer łączy się ze sprzętem (karta graficzna, urządzenia wejściowe) i umożliwia klientom korzystanie z tych zasobów. Klienci łączą się z serwerem xserver i używają podanych zasobów.

Istnieją serwery dla systemu Unix (Xorg, komputery Mac mają własne itp.) I Windows (Hummingbird, port Xorg Cygwina itp.).

Możesz połączyć klientów w jednym systemie operacyjnym z serwerami działającymi w innym systemie operacyjnym.

Komunikacja między serwerem a klientami odbywa się za pośrednictwem interfejsu API Xlib lub (bardziej nowoczesnego) interfejsu API xcb .

Aby utworzyć prostą aplikację, zwykle wystarczy to zrobić:

  • połącz się z serwerem xserver
  • poproś xserver o utworzenie okna (które da ci „uchwyt”)
  • powiedz xserverowi, aby otworzył okno
  • przetwarzanie zdarzeń (mysz, klawiatura, ekspozycja, ruch itp.)
  • rysuj rzeczy do okna (tekst, grafiki itp.)
  • zamknij aplikację, informując xserver o zwolnieniu wszystkich zasobów

i zrobione.

akira
źródło