X, Xorg i D-Bus: jaka jest różnica?

35

Podczas uczenia się, jak robić pewne rzeczy w programowaniu GUI (np. Rezerwowanie miejsca na ekranie dla aplikacji), muszę dowiedzieć się więcej o Menedżerze okien, zwykle X11 w Linuksie (nie jestem pewien, czy w ogóle są dystrybucje , które używają czegokolwiek innego niż X11, chociaż słyszałem o Wayland , która nie została jeszcze zaimplementowana w żadnym).

Jestem całkiem nowy w programowaniu i niecierpliwy; więc po prostu nurkuję. Teraz czytam ICCCM z nadzieją, że dowiem się więcej. Ten dokument jest jednak skierowany do publiczności, która wie (sposób) więcej niż ja. Natrafiłem więc na pewne informacje i chciałbym uzyskać wyjaśnienia.

Sekcja 2 ICCCM cytuje:

Należy pamiętać, że wszystkie dane przesyłane między właścicielem a wnioskodawcą zwykle muszą odbywać się za pośrednictwem serwera w środowisku X w wersji 11. Klient nie może zakładać, że inny klient może otworzyć te same pliki, a nawet komunikować się bezpośrednio. Drugi klient może rozmawiać z serwerem za pomocą zupełnie innego mechanizmu sieciowego (na przykład jednym klientem może być DECnet, a drugi TCP / IP). Dlatego przekazywanie pośrednich odwołań do danych (takich jak nazwy plików, nazwy hostów i numery portów itd.) Jest dozwolone tylko wtedy, gdy obaj klienci wyraźnie się z tym zgadzają.

O ile rozumiem, X Window Manager jest zbudowany na Top of X Server (dzięki Wikipedii). W powyższym cytacie: mówi, że klient może komunikować się z serwerem za pomocą DECnet lub TCP / IP. Do tej pory myślałem, że „serwer” jest mową, teraz wątpię: czy X serwer jest serwerem jak na „serwerze WWW”? Jak powinienem zrozumieć jego funkcję / definicję?

Następnie często pojawiają się odniesienia do X11, Xorg, X Server i / lub X Window Manager. Robi się mylące: czy X11 jest pakietem zawierającym Xorg i X Window Managera? Jeśli tak, to czy jest jeszcze coś w tym pakiecie X11?

X także potrzebuje myszy, klawiatury lub innego rodzaju danych wejściowych: czy ta część funkcji X Servera również? Czy X Window Manager ściśle dba tylko o wyświetlacz?

Wreszcie powyższy cytat wspomina także o komunikacji między klientem lub bez niego: przypominało mi to D-Bus, którego trochę użyłem do celów edukacyjnych. Za pomocą D-Bus można również wyzwalać zdarzenia okna. To sprawia, że ​​jestem trochę zdezorientowany, w jaki sposób programy powinny się ze sobą komunikować: * jaka jest różnica między programami współdziałającymi za pomocą X Server lub D-Bus? *

Szkoda, że ​​ta informacja jest w jakiś sposób niejasna, utrudnia naukę, ale mam nadzieję, że przyniesiesz trochę światła :) Dzięki.

Benzoes
źródło

Odpowiedzi:

61

Zadajesz tutaj pięć pytań, a może lepiej zadać pięć pytań ☺ Ale wskoczę:

  1. X jest serwerem i można go porównać do „serwera WWW”, ponieważ jest to proces, który nasłuchuje połączeń przychodzących, które mówią konkretny protokół (protokół X) i wydaje odpowiedzi. Połączenia pochodzą od klientów X, którzy mogą znajdować się na hoście lokalnym lub na hoście zdalnym, do którego dostęp uzyskuje się przez sieć.

  2. X11 to „główna wersja” protokołu X, który ewoluował od samego początku. X11 to najnowszy protokół i najczęstszy. (Xorg jest implementacją serwera X, bibliotek X i kolekcji klientów, wszystkie mówią X11. Istnieją inne implementacje: w dużej mierze nieczynny XFree86; komercyjne takie jak Hummingbird Exceed; widelce takie jak XQuartz, który działa na Mac OS X )

  3. „Menedżer okien” to klient X, który zarządza oknami. Zazwyczaj odpowiada za dekorowanie okien za pomocą fazowania / obramowań, cieni, paska menu zawierającego przyciski itp. - oraz obsługę logiki umieszczania okien; obsługa przeciągania, zmiany rozmiaru lub zmiany ustawień okien itp.

  4. X wymaga danych wejściowych i ponosi wspólną odpowiedzialność za zarządzanie nimi za pomocą jądra. Historycznie X sam zarządzał sprzętem. W dzisiejszych czasach, na platformie Linux, X stopniowo staje się „mniejszy” i deleguje tę odpowiedzialność na jądro Linuksa. Zaletami tego są: mniejsza baza kodu X; mniej „skrzyżowanych przewodów” z jądrem i X, które próbują zarządzać tymi samymi rzeczami. (przykładem tego jest interfejs zdarzeń Linuksa, w którym zdarzenia myszy itp. są interpretowane i tłumaczone przez jądro i jego sterowniki na standardowy interfejs /dev/input/event*, z którego korzysta serwer X). Zauważ, że na innych platformach (BSD, Solaris) X jest nadal dość monolityczny.

  5. Procesy komunikują się ze sobą na wiele sposobów. Wierzę, że klienci X mogą wchodzić w interakcje za pomocą protokołu X (na przykład tradycyjni menedżerowie okien X muszą wiedzieć, kiedy inni klienci rysują okna, aby je ozdobić; pagery muszą wiedzieć, kiedy zmienia się rozmiar lub pozycja okna, aby odzwierciedlają to w pagerze). D-Bus to nowoczesna technologia komunikacji międzyprocesowej (IPC) opracowana w celu wyeliminowania wad innych metod. Nie jest specyficzny dla X.

jmtd
źródło
Fajnie dzięki! To bardzo pomocne. O 5 pytaniach: nie wiem, jaki jest protokół w takim przypadku, ale jeśli administrator chce, żebym je podzielił, usłyszę o tym. Osobiście lubię mieć to w jednym dokumencie i widzę 5 pytań jako pytania podrzędne do tytułu. Dzięki jeszcze raz.
Benjamin
Chodzi o to, że protokoły nie przeskakują do tego, że system X Window został zaprojektowany tak, aby aplikacje („klienci”) nie musiały działać na tym samym hoście, tzn. Można zalogować się na innym komputerze, uruchomić tam program, a okno otworzy się na ekranie jak lokalna aplikacja. Gdyby inny program zapytał „jaki jest twój identyfikator procesu, abym mógł z tobą bezpośrednio porozmawiać”, nie ma sposobu, aby poprawnie odpowiedzieć na to pytanie.
Simon Richter
Możesz nie chcieć, aby zasobem współdzielonym przez serwer X był wyświetlacz składający się z jednego lub więcej monitorów i dwóch lub więcej urządzeń wejściowych (klawiatura, mysz)
hildred
Zdecydowanie pomocne wszystkie 5 pytań razem. Dziękuję Ci.
Harvey
@hildred W przypadku ekranu dotykowego w konfiguracji kiosku możesz mieć tylko kilka urządzeń wejściowych.
Shadur