Antworten:
Sowohl GTK als auch Qt sind Toolkits zum Erstellen grafischer Schnittstellen. Jedes UI-Toolkit bietet eigene Funktionen für Programme zum Erstellen von Widgets (Schaltflächen, Textfelder ...) und wird in Form von Bibliotheken bereitgestellt , mit denen das grafische Programm verknüpft ist. Ein für GNOME geschriebenes Programm verwendet GTK ( libgdk
und libgtk
), während KDE-Programme Qt ( libQtCore
und libQtGui
), Enlightenment-Programme EFL usw. verwenden.
Alle diese Toolkits verwenden jedoch dasselbe X-Window-System und dasselbe X11-Protokoll . Damit die Dinge auf dem Bildschirm angezeigt werden, verbindet sich das Toolkit mit dem laufenden X-Server (normalerweise Xorg, früher XFree86 genannt), sendet X11-Befehle (Fenster erstellen, etwas in ein Fenster zeichnen) und empfängt X11-Eingabeereignisse (Maus, Tastatur, Fenstergröße ändern) , & c) zurück.
(Die meisten modernen Toolkits, wie GTK, Qt oder EFL, zeichnen selbstständig und senden mit X11 das fertige Bild des gesamten Fensters. Der X-Server stellt es lediglich auf den Bildschirm. Ältere Toolkits wie lXaw oder Motif verwenden stattdessen X11, um Grundelemente wie Linien, Rechtecke oder Text zu zeichnen, und der X-Server rendert alles.)
Der X-Server erledigt dann die Aufgabe, alles zusammenzusetzen, mit Ihrer Grafikkarte zu sprechen und so weiter. Auf diese Weise können Sie Programme ausführen, die verschiedene Versionen verschiedener Toolkits verwenden, da letztendlich nur dieselben Betriebssystemfunktionen verwendet werden.
Die Situation mit mehreren Toolkits gilt nicht nur für X - Sie finden beispielsweise Windows-Programme, die den Standard verwenden, comctl32
aber auch WPF, .NET WinForms, Chrome's Aura, Firefox's XUL und sogar dieselben GTK oder Qt. Die meisten Spiele verwenden ihre eigenen Steuerelemente. In Wirklichkeit ist dies auf jedem Grafiksystem möglich, mit dem Sie ein Bild über das gesamte Fenster zeichnen können.
Eines der Prinzipien von X war jedoch "Mechanismus, nicht Politik". Dies bedeutet, dass der X-Server nur den Mechanismus für seine Clients (Grafikprogramme) bereitstellt, um verschiedene Dinge zu tun, aber so wenig Regeln wie nötig auferlegt . Mit anderen Worten, X nimmt dies in größerem Maße in Kauf als jedes andere Grafiksystem.
Ein wesentlicher Bestandteil eines Grafiksystems ist beispielsweise die Fensterverwaltung - das Zeichnen von Rahmen (auch als Dekorationen bezeichnet) um jedes Fenster, das Verschieben und Ändern der Fenstergröße usw. Windows und OS X verfügen über einen im System integrierten Fenstermanager, der in X jedoch als separates Programm ausgeführt wird. Die X.Org-Suite verfügt über eine minimale twm
, aber fast alle Desktop-Umgebungen verfügen über einen eigenen Fenstermanager (GNOME hatte Sawfish, Metacity, gnome-shell (KDE hat KWin) für die Integration in die jeweilige Desktop-Umgebung.
(Wie Toolkits übernehmen moderne "Compositing" -Fenster-Manager tatsächlich die Aufgabe von Xorg, alle Fenster auf dem endgültigen Bildschirm zusammenzustellen und so das Hinzufügen von Schatten oder Effekten zu ermöglichen.)
In modernen Desktop-Umgebungen hat dies auch Probleme verursacht. Um das gängigste Beispiel zu verwenden: Die gleiche "Grab Keyboard" -Funktionalität wird von Hotkeys verwendet. Popup-Menüs; und Bildschirmschoner, und nur ein Programm kann es gleichzeitig verwenden. Dies bedeutet, dass Sie den Bildschirm nicht sperren können, während ein Popup-Menü geöffnet ist, und keine Songs überspringen können, während der Bildschirm gesperrt ist. Dies ist einer der Gründe, warum Wayland als Ersatz für X11 entwickelt wurde.
Technisch bedeutet dies sogar, dass Sie X-Programme auf einem anderen Computer ausführen und über das Netzwerk mit dem X-Server auf Ihrem Computer kommunizieren können. In der Tat war dies der primäre Anwendungsfall in der Anfangszeit und daher kommt der Name "X- Server " überhaupt erst. Es ist möglich, einen X-Server auf einem Mac auszuführen und Fenster anzeigen zu lassen, die von Programmen erstellt wurden, die unter Linux, FreeBSD oder sogar OpenVMS ausgeführt werden.
Wie oben erwähnt, führen moderne Toolkits alle Zeichenvorgänge clientseitig aus (ausgefallene Grafiken und hübsche Schriftarten sind mit X11-Grundelementen nur schwer zu realisieren) und übertragen die endgültigen Bilder nur auf den X-Server, der lokal sehr schnell ist, jedoch a erfordert ziemlich viel Netzwerkbandbreite.
(Andere Protokolle wie RFB (auch bekannt als VNC) oder Microsofts "Remote Desktop" sind dafür konzipiert und bieten eine sehr effiziente Möglichkeit, die Fensterbilder zu komprimieren.)
Ein Teil der Antwort ist, dass die führenden Desktop-Umgebungen (Gnome, KDE, XFCE usw.) unter http://freedesktop.org zusammenarbeiten , um eine solche Interaktion zu ermöglichen. Eine von FD.o veröffentlichte Spezifikation ist EWMH , die ein gewisses Maß an Kompatibilität zwischen Fenstermanagern sicherstellt (für moderne Funktionen nicht nur grundlegende Fensterverwaltung).