right|thumb|Schéma client-serveur de X Window. X Window System, souvent abrégé X ou X11, est un système de fenêtrage ( en anglais) qui gère l'écran, la souris et le clavier. X repose sur un protocole de communication client-serveur qui permet d'utiliser un réseau de manière transparente entre l'application et le terminal. Le protocole en est à la onzième version depuis 1987, d'où l'abréviation X11.

C'est un standard ouvert largement utilisé sur les systèmes d’exploitation de type Unix (Linux, BSD). Le système de fenêtrage X (dit « serveur X ») est optionnel sur macOS (qui utilise nativement Quartz). Il est possible d'installer un serveur X sur la plupart des systèmes d'exploitation, dont Windows.. On dit communément d'une application qu'elle fonctionne « sous X » lorsqu'elle est conçue pour l'environnement XIl s'agit d'un jeu de mots par rapport au sens de « sous X » qui signifie « anonymement »..

Les spécifications X11 sont actuellement dirigées par la Fondation X.Org qui développe également X.org, sa principale implémentation.

Utilisation & fonctionnement Dans son principe, le système de fenêtrage X peut être utilisé sur un réseau local composé d'un ordinateur central, chargé du fonctionnement des applications comme des calculs, et de terminaux X de saisie et d'affichage, ce qui peut permettre à une université d'avoir plus de terminaux que d'ordinateurs. Il peut aussi fonctionner au travers d'une liaison internet (TCP/IP). Cette capacité lui permet aussi de fonctionner sur un seul ordinateur qui prend en même temps le rôle de serveur et la capacité d'affichage.

Utilisation locale vignette|droite|Le système de fenêtrage X est compatible avec la transparence Lorsque le système de fenêtrage X est utilisé sur un ordinateur autonome, il n'est pas spécifiquement visible à l'écran. Toutefois, les applications font appel au système de fenêtrage X pour afficher et rafraîchir les écrans et pour être notifiées des entrées souris et clavier.

Pour l'utilisateur le fonctionnement est assez similaire à celui qui serait celui d'un autre ordinateur.

Toutefois, l'utilisation d'un système comme Linux ou la présence d'un gestionnaire de fenêtre unix sur un écran suggèrent l'utilisation du système de fenêtrage X.

Fonctionnement réseau vignette|droite|Le terminal NCD-88k est un terminal X ce qui permet l'affichage d'un écran X sans avoir le cout d'un ordinateur vignette|droite|Un serveur X tourne sur le terminal X, connecté à un ordinateur central exécutant un X display manager. Dans cet exemple, les programmes clients (xterm ou xedit) tournent sur la même machine.

X fonctionne suivant le modèle client–serveur : le serveur X fonctionne sur un terminal intelligent (client léger) doté d'un écran, d'un clavier et d'une souris ; à travers le réseau : il reçoit des requêtes d'affichage ; il renvoie la position de la souris, la liste des fontes ; il envoie des notifications en cas d'événements comme une touche de clavier actionnée, un déplacement de fenêtre, un message inter-application ; un ou plusieurs logiciels client X, soit sur le même ordinateur que le serveur, soit sur des ordinateurs distants, se connectent au serveur X et lui envoient leurs requêtes d'affichage en utilisant le protocole X au travers de la bibliothèque X (Xlib). Le client est simplement l'application logicielle (jeu, traitement de texte, calculatrice…) qui utilise alors le protocole X pour déléguer au serveur X les tâches d'interactions homme-machine (ou IHM).

Cette terminologie client–serveur avec le serveur côté utilisateur et le client côté application peut sembler étrange pour les nouveaux utilisateurs de X, les termes semblant inversés : on a davantage l'habitude de voir un serveur sur l'ordinateur principal que sur un terminal. Cependant X se place du point de vue de l'application plutôt que de l'utilisateur : X fournit des services d'entrée-sortie aux applications, c'est donc un serveur ; les applications consomment ces services, ce sont donc des clients.

Avant l'arrivée du modèle client-serveur, les applications s'exécutaient sur une machine centralisée s'occupant à la fois du traitement des données et de la mise en forme de l'affichage. Le poste de l'utilisateur possédait essentiellement un clavier et un écran, parfois une souris.

Le poste d'affichage ne possédait pas de réelle intelligence locale, les programmes s'exécutant sur la machine centralisée. On lui adjoignait cependant un boîtier contrôleur d'écran et de clavier qui exécutait un serveur X. L'ensemble se nommait un terminal X. Les programmes s'exécutaient sur la machine centralisée (serveur d'applications commun à plusieurs terminaux X) et les interactions homme-machine de ces programmes étaient gérées par le terminal X (client applicatif). Le terminal X est un exemple de ce que l'on appelle un client léger.

X fonctionne en IPv4 depuis des années, mais il peut également fonctionner en IPv6.

Ce modèle de communication permet notamment l'affichage de fenêtres et autres éléments d'interfaces graphiques, en local (logiciel client et serveur sur la même machine) ou déporté sur un autre ordinateur à travers le réseau (un logiciel graphique tourne sur une machine distante et est affiché sur une station de bureau ou portable).

L'affichage graphique se fait par (image matricielle), par opposition à l'affichage par image vectorielle.

Parmi les clients X, on en distingue généralement un en particulier : le gestionnaire de fenêtres dont le rôle est de gérer l'affichage, la sélection, le déplacement, le redimensionnement et les décorations des fenêtres (une fenêtre particulière étant la c'est-à-dire la fenêtre-racine). Ce gestionnaire de fenêtre peut s'exécuter sur une machine distincte de celle qui héberge l'application graphiqueLors des débuts de l'OSF, Hewlett Packard possédait un gestionnaire de fenêtre agréable, et que des postes X utilisant des programmes hébergés sur Sun ou IBM utilisent le gestionnaire d'une machine HP du réseau..

Tout client préalablement autorisé à accéder à un poste X peut y ouvrir une fenêtre à tout moment. Une attention particulière doit être apportée à la sécurité du poste afin d'éviter, par exemple, qu'un ordinateur autorisé à afficher des informations administratives puisse également réaliser à distance des captures d'écran non autorisées de l'ensemble du poste.

La programmation X permet de séparer la création des widgets (en mémoire) de leur réalisation (affichage) pour une bonne ergonomie : l'utilisateur apprécierait peu que, dans une fenêtre comportant quarante éléments graphiques distincts, chacun soit affiché au fur et à mesure que l'application le crée. Tout peut donc être créé d'abord, et ensuite seulement l'ensemble affiché en une seule fois, pour éviter des clignotements fatiguant l’œil.

Connexion avec Windows

vignette|droite|Fenêtre de l'application xclock d'un ordinateur sous Unix affichée par un serveur Cygwin/X

La technologie a été portée de manière à pouvoir afficher sous Windows des fenêtres d'applications qui fonctionnent sur un système Unix. Ceci se fait au travers de logiciels comme Cygwin/X ou comme Xming ou x11vnc.

A l'inverse, le déport de l'affichage de Windows vers un environnement Unix n'utilise pas le système de fenêtres X. Des technologies comme VNC ou RDP peuvent être utilisés. Contrairement au système de fenêtres X, les choix techniques n'ayant pas été les mêmes, elles ne permettent pas le déport d'une seule fenêtre: l'ensemble du terminal est déporté: écran, clavier et souris.

Programmation X thumb|upright=1.8|Bibliothèques pour la programmation X. La programmation pour X peut se faire à différents niveaux. Le plus bas est celui du protocole X, ou comment le client et le serveur échangent des données. On ne programme pour ainsi dire jamais directement au niveau du protocole, mais il peut être utile de le connaître, de façon par exemple à décoder les informations qui circulent.

Le niveau au-dessus est celui de la bibliothèque X ou Xlib. La Xlib propose une traduction assez directe des requêtes du protocole X en appels de fonctions. Elle permet notamment de créer et de manipuler des fenêtres, de dessiner à l'intérieur par l'intermédiaire d'un contexte graphique et de recevoir des événements (clavier, souris, exposition des fenêtres, messages inter-clients, etc.) Pour la Xlib, une fenêtre est un rectangle dans lequel on peut dessiner, et qu'on peut soulever ou baisser par rapport aux autres (on peut aussi imbriquer des fenêtres) ; la décoration des fenêtres de plus haut niveau est apportée par le gestionnaire de fenêtres. La programmation directe en Xlib n'est guère adaptée que pour des environnements graphiques très limités ou pour le développement de boîtes à outils.

Le niveau suivant est celui de la boîte à outils X ou X Toolkit, Xt en abrégé, un système orienté objets (mais entièrement en C) qui permet de manipuler des , qui sont des fenêtres munies de ressources et de méthodes, leur permettant de réagir « toutes seules » à certains événements. Ce niveau est composé de deux parties : les intrinsics et un jeu de widgets. Les intrinsics sont le cadre dans lequel on peut communiquer avec les widgets, et proposent quelques widgets tout à fait rudimentaires (dont le widget Core, une fenêtre qui ne réagit à rien). Il y a plusieurs jeux de widgets disponibles pour Xt. Le jeu Athena (Xaw en abrégé), développé au MIT, est petit et peu complet, mais il a l'avantage d'être léger, standard et gratuit. Deux autres exemples importants sont le jeu Motif de l'OSF, très commun pour les applications commerciales jusque vers 2000, et OpenLook, qui imite l'apparence de SunView, dont il est le remplaçant.

Ces différentes bibliothèques sont de moins en moins utilisées, au profit d'autres surcouches de la Xlib, qui remplissent les mêmes fonctions qu'Xt. Les deux principales sont GTK+ et Qt.

Historique

Prédécesseurs Différents systèmes d'affichage graphique par point ont précédé X. Notamment Alto (1973) et Star (1981) de Xerox, Display Manager (1981) d'Apollo Computer, Lisa (1983) et Macintosh (1984) d'Apple. Dans l'univers Unix l'Andrew Project (1982) et le terminal Blit (1982) de Rob Pike.

L'université Carnegie-Mellon a produit une application d'accès à distance appelée Alto Terminal, permettant l'affichage dans des fenêtres d'un Xerox Alto d'applications tournant sur des systèmes distants (généralement des systèmes Unix DEC VAX).

Initié à l'été 1984, X Window System se place en successeur du W Window System, fonctionnant sur le système V. Le choix des lettres X et W provient de l'ordre alphabétique : la lettre X suit la lettre W, qui suit elle-même la lettre V. Quant au V de Système V, il provient de la numération romaine dans laquelle le 5 s'écrit V. Le W Window System utilisait un protocole réseau, supportait des terminaux et des fenêtres graphiques, en gérant la superposition des fenêtres la maintenance d'une liste de commandes graphiques.

Origine et premiers développements vignette|droite|250px|X Window : exemple historique d’interface graphique utilisateur communément distribuée avec la distribution du Consortium X, et ses applications : X Terminal, Xbiff, xload et un navigateur graphique de pages de manuel, Manpage.

L'idée originale de X a émergé au MIT en 1984 fruit d'une collaboration entre Jim Gettys (projet Athena) et Bob Scheifler (MIT). Scheifler avait besoin d'un environnement d'affichage utilisable pour déboguer le système Argus. Le projet Athena (projet conjoint entre DEC, MIT et IBM devant fournir un accès facilité aux ressources informatiques pour tous les étudiants) avait besoin d'un système graphique indépendant de la plate-forme fonctionnant sur des systèmes hétérogènes provenant de différents fournisseurs. Le système de fenêtres alors en cours de développement dans le projet Andrew de l'université Carnegie-Mellon ne rendait pas les licences disponibles et aucune alternative n'existait.