Jak działają aplikacje KDE pod Gnome?

19

Jeśli Gnome używa GTK +, a KDE używa Qt, dlaczego aplikacje KDE mogą działać pod Gnome?

ps-aux
źródło

Odpowiedzi:

30

Zarówno GTK, jak i Qt to zestawy narzędzi do tworzenia interfejsów graficznych. Każdy zestaw narzędzi interfejsu użytkownika udostępnia własne funkcje do tworzenia widżetów (przyciski, pola tekstowe ...) i jest dostępny w postaci bibliotek , z którymi łączy się program graficzny. Program napisany dla GNOME będzie używał GTK ( libgdki libgtk), podczas gdy programy KDE używają Qt ( libQtCorei libQtGui), programy Oświecenia używają EFL i tak dalej.

Jednak wszystkie te zestawy narzędzi korzystają z tego samego systemu X Window i tego samego protokołu X11 . Aby wyświetlać się na ekranie, zestaw narzędzi łączy się z działającym serwerem X (zwykle Xorg, wcześniej nazywany XFree86), wysyła polecenia X11 (utwórz okno, narysuj coś w oknie) i odbiera zdarzenia wejściowe X11 (mysz, klawiatura, zmiana rozmiaru okna , i c) z powrotem.

(Większość nowoczesnych zestawów narzędzi, takich jak GTK, Qt lub EFL, samodzielnie wykonuje fantazyjne rysunki i po prostu używa X11, aby wysłać gotowy obraz całego okna, a serwer X po prostu wyświetla go na ekranie. Starsze zestawy narzędzi, takie jak lXaw lub Motif, zamiast tego używają X11 do rysowania prymitywów, takich jak linie, prostokąty lub tekst, a serwer X wykonuje wszystkie renderowania).

Serwer X wykonuje następnie zadanie złożenia wszystkiego, rozmowy z kartą graficzną i tak dalej. W ten sposób możesz uruchamiać programy korzystające z różnych wersji różnych zestawów narzędzi, ponieważ w końcu korzystają one z tych samych funkcji systemu operacyjnego.

Mechanizm, a nie polityka

Sytuacja z wieloma narzędziami nie jest unikalna dla X - na przykład programy Windows używają standardowego, comctl32ale także WPF, .NET WinForms, Chrome Aura, Firefox XUL, a nawet tego samego GTK lub Qt. Większość gier używa własnych elementów sterujących. Naprawdę jest to możliwe w każdym systemie graficznym, który pozwala narysować obraz w całym oknie.

Jednak jedną z zasad X był „mechanizm, a nie polityka”. Oznacza to, że serwer X zapewnia tylko swoim klientom (programom graficznym) mechanizm wykonywania różnych czynności, ale nakłada tak mało reguł, jak to konieczne . Innymi słowy, X bierze to w większym stopniu niż jakikolwiek inny system graficzny.

Na przykład jedną z integralnych części systemu graficznego jest zarządzanie oknami - rysowanie ramek (zwanych także dekoracjami) wokół każdego okna, możliwość przesuwania i zmiany rozmiaru okien i tak dalej. Windows i OS X mają wbudowany menedżer okien, ale w X działa jako osobny program - pakiet X.Org jest dostarczany z minimalną liczbą twm, ale prawie wszystkie środowiska graficzne mają własne menedżery okien (GNOME miał Sawfish, Metacity, gnome-shell; KDE ma KWin) zapewniający integrację z odpowiednim środowiskiem graficznym.

(Podobnie jak zestawy narzędzi, nowoczesne menedżery okien do „kompozytu” faktycznie przejmują zadanie Xorga polegające na skomponowaniu wszystkich okien do końcowego obrazu ekranu, umożliwiając dodawanie cieni lub efektów).

W nowoczesnych środowiskach komputerowych to również stwarza problemy. Aby użyć najczęstszego przykładu: ta sama funkcja „chwyć klawiaturę” jest używana przez klawisze skrótu; wyskakujące menu; oraz wygaszacze ekranu i tylko jeden program może z nich korzystać jednocześnie. Oznacza to, że nie można zablokować ekranu, gdy otwarte jest menu podręczne, ani pominąć utworów, gdy ekran jest zablokowany. Jest to jeden z kilku powodów, dla których Wayland powstaje jako zamiennik X11.

Dygresja

Technicznie oznacza to nawet, że możesz uruchamiać programy X na innym komputerze, rozmawiając z serwerem X na twoim komputerze przez sieć. Rzeczywiście, był to podstawowy przypadek użycia we wczesnych dniach i właśnie stąd nazwa „X serwer ”. Możliwe jest uruchomienie serwera X na komputerze Mac i wyświetlanie okien utworzonych przez programy działające w systemie Linux, FreeBSD, a nawet OpenVMS.

Jednak, jak wspomniano powyżej, nowoczesne zestawy narzędzi wykonują wszystkie rysunki po stronie klienta (wymyślna grafika i ładne czcionki są dość trudne do wykonania z prymitywami X11) i tylko wypychają końcowe obrazy na serwer X, który jest bardzo szybki lokalnie, ale wymaga spora przepustowość sieci.

(Inne protokoły, takie jak RFB (alias VNC) lub Microsoft „Remote Desktop”, zostały zaprojektowane do tego i mają bardzo skuteczne sposoby kompresji obrazów okien.)

grawitacja
źródło
1
Pętla zdarzeń Qt otacza GTK, dzięki czemu można nawet łączyć kod Qt i GTK w tej samej aplikacji (zwykle jest to tylko wtyczka).
Alex P
@Alex: Czy miałeś na myśli „can wrap” w pętli zdarzeń Qt, która może dostarczać zdarzenia do GTK, czy też mówiłeś, że Qt faktycznie korzysta z GLib dla pętli zdarzeń?
grawity
1
Qt może również używać własnej implementacji czystej pętli zdarzeń, ale domyślnie otacza Glib (przynajmniej w Qt4 - nie sprawdziłem, jak to robi Qt5). Istnieje ukryta flaga ($ QT_NO_GLIB), która kontroluje ją w czasie wykonywania.
Alex P
7

Częścią odpowiedzi jest to, że wiodące środowiska graficzne (Gnome, KDE, XFCE, być może inne) współpracują ze sobą pod http://freedesktop.org, aby umożliwić taką współpracę. Jedną ze specyfikacji opublikowanych przez FD.o jest EWMH , która zapewnia pewien poziom zgodności między menedżerami okien (w przypadku nowoczesnych funkcji, a nie tylko podstawowego zarządzania oknami).

vonbrand
źródło
4

Po uruchomieniu w środowisku GNOME aplikacje KDE nadal wywołują udostępnione biblioteki Qt, od których zależą. To samo dotyczy każdej działającej aplikacji w dowolnym innym środowisku pulpitu. Nie nakładają ograniczeń na to, co można nazwać, a co nie.

Ghassan
źródło