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ć.
Odpowiedzi:
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.
źródło
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.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 łą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ć:
i zrobione.
źródło