X-Programme laufen auf verschiedenen Plattformen unter diversen Betriebssystemen. Das Anwendungsprogramm, genannt X-Client, schickt Aufträge an den X-Server, der die Hardware bedient.
Aus Performancegründen läuft die Client-Software häufig auf leistungsstarken Rechnern im Netz, während für den Server ein kleiner PC oder ein X-Terminal verwendet werden kann.
X-Server und X-Client können auf denselben oder auf verschiedenen Rechnern laufen. Sie kommunizieren mit Hilfe des X-Protokolls auf asynchrone Weise (gepuffert). Es gibt vier Arten von Nachrichten: requests, replies, events und errors.
Der X-Server hat exklusive Kontrolle über die grafischen Ausgabegeräte einschließlich Tastatur. Der Server verwaltet die Ressourcen, das sind komplexe Datenstrukturen für Windows, Pixmaps, Fonts, Grafik-Kontexte. Der Client referiert die Ressource über ihre ID. Dadurch wird der Kommunikationsbedarf reduziert; außerdem können mehrere Clients dieselben Ressourcen verwenden.
Der X-Client schickt Kommandos oder fragt Zustände ab. Ein Client kann Kontakt zu mehreren Servern halten. Der Window-Manager ist ein weiterer X-Client -- und damit austauschbar. Er plaziert, verziert und ikonifiziert die Top-Level-Fenster.
Ein grafisches Ausgabegerät wird display genannt. Dazu gehören ein Grafik-Speicher und ggf. mehrere Bildschirme, genannt screens. Ein display-Name setzt sich zusammen aus
(<Hostname> | <Internet-Nr> ) : <Server-Nr> [.<Screen-Nr>]und kann über die Environmentvariable DISPLAY gesetzt werden:
sh% export DISPLAY=magni:0 sh% export DISPLAY=131.173.12.30:0Zuvor muß der angesprochene Server seine Einwilligung gegeben haben. Um z.B. dem Rechner zeus die Ausgabe auf dem Rechner magni zu erlauben, setzt man auf magni das Kommando ab
sh% xhost +zeusX-Clients arbeiten ereignisorientiert, d.h., sie reagieren auf events, die der Server an sie schickt. Durch Event-Masken legt der Client fest, welches Fenster über welche Ereignisse informiert werden soll.