Passer de Windows à Linux: Comprendre - X Window System, X Server, Xorg, Xfree86

10

Je suis un développeur Windows (Win32api) passant de Windows à Linux. Lors de l'installation de Linux, il y a beaucoup de choses à savoir sur X11, X Window System, X Server, Xorg, Xfree86 et ce qui ne l'est pas.

Comment se fait-il que nous ne soyons pas conscients de telles choses dans les fenêtres? Un article sur le wiki me fait peur. Quelqu'un peut-il expliquer ces choses? Comment ils travaillent? Pourquoi est-ce si compliqué sous Linux et pas dans Windows?

Toutes les bonnes références sont également appréciées.

PS: J'adore connaître les internes, n'hésitez pas à approfondir.

les griffes
la source
1
Après avoir lu les réponses lire cet article "Réflexions et randonnées sur le protocole X" julien.danjou.info/blog/…
griffes
1
Liens modifiés julien.danjou.info/blog/2010/…
fstamour

Réponses:

13

Windows vous offre une seule implémentation d'un seul bureau en plus d'une seule implémentation d'une seule API / infrastructure, le tout fait par Microsoft.

Sur les systèmes Unix, vous obtenez une API / framework (X11 / X Window System) pour lequel existent plusieurs implémentations (Xorg, Xfree86), en plus desquelles vous obtenez diverses API / frameworks "de plus haut niveau" (GTK +, Qt, ... ) parce que le X11 brut est si primitif, au-dessus duquel vous disposez de divers bureaux (Gnome, KDE, ...), tous réalisés par des personnes différentes.

De plus, le système X11 a été conçu dès le départ avec des interfaces graphiques distantes à l'esprit - c'est-à-dire une machine lokal affichant l'interface graphique d'une application exécutée à distance - qui introduit les concepts de "X Server" et "X Client".

Ensuite, il existe une nomenclature qui "se sent" dans le mauvais sens pour les nouveaux arrivants: votre machine locale exécute le "X Server" fournissant le service "afficher une interface graphique", tandis que la machine distante est le "client X" faisant usage des services sur votre machine pour afficher l'interface graphique.

Eh bien, c'est un bref aperçu; une fois que vous avez trié cela, la compréhension des articles / messages du forum sur le sujet devrait devenir beaucoup plus facile.

Edit: Répondre aux deux premiers commentaires du PO.

Oui, "X11" n'est qu'un protocole, et Xorg / XFree86 sont deux implémentations. À son niveau de base, X11 ne concerne que le dessin de lignes et de points, ce qui n'est pas très utile si vous voulez faire une interface graphique.

En plus du protocole X11, les gens ont implémenté beaucoup de choses, et il est assez difficile de faire une comparaison 1: 1 avec Windows car Microsoft n'a jamais pris la peine de vraiment séparer les choses. De plus, je ne suis pas un développeur de type GUI, c'est-à-dire que mon expérience réelle avec l'un ou l'autre système est minime.

En bas, un "gestionnaire de fenêtres" fournit une fenêtre (gestion des bordures, fermeture / minimisation / maximisation des boutons, redimensionnement, etc.), et offre "l'immobilier" dans la fenêtre au jeu d'outils de widget. Il existe de nombreux gestionnaires de fenêtres, certains imitant d'autres systèmes (Windows, MacOS, AmigaOS, peu importe), et ils sont généralement interchangeables et transparents avec le système restant.

Le "widget toolset" vous propose des boutons, des curseurs, des champs de texte, etc. sur lesquels construire votre interface graphique. C'est ce que vous (en tant que développeur d'applications) pouvez réellement "voir", en termes d'API, et ce qui décide de la plupart du "look & feel" de votre application.

Un «bureau» construit un certain nombre d'applications au-dessus d'une certaine combinaison d'outils de widget / gestionnaire de fenêtres, afin de fournir une apparence cohérente. Vous n'avez pas à vous en préoccuper, sauf si vous souhaitez réellement développer le bureau lui-même.

Le bureau "Gnome" utilise le jeu d'outils de widget "GTK +" en haut du gestionnaire de fenêtres "Metacity".

Le bureau "KDE" utilise le jeu d'outils de widget "Qt" en haut du gestionnaire de fenêtres "KWin".

Notez que ces deux derniers, GTK + et Qt, ont évolué bien au-delà des simples "jeux d'outils de widgets" en "cadres de développement d'applications". Si vous souhaitez développer des applications GUI pour Linux, vous devez effectivement choisir laquelle de ces deux vous souhaitez utiliser. Il y a plus de choix, si vous voulez une application plus "légère" (ne nécessitant pas les grandes dépendances de bibliothèque), mais aujourd'hui la plupart des systèmes ont des bibliothèques GTK + et Qt déjà installées de toute façon.

Il est parfaitement possible d'utiliser des applications Qt sur un bureau Gnome ou des applications GTK + sur un bureau KDE (ce n'était pas toujours comme ça), vous n'avez donc pas à vous soucier de la compatibilité. Étant donné le choix entre deux applications de fonctionnalités comparables, les gens préfèrent généralement l'application en utilisant les widgets "natifs" de leur bureau de choix, mais je ne m'en inquiéterais pas.

Autres puces plus importantes dans le choix du "jeu d'outils de widgets": conditions de licence, prise en charge de la langue de votre choix, compatibilité multiplateforme.


Post Scriptum : En revenant plusieurs années plus tard, j'ai acquis ma propre expérience de programmation GUI et je me rends compte qu'une chose manque dans l'explication ci-dessus si vous cherchez un conseil "dans quelle direction aller": wxWidgets . Il s'agit d'un cadre qui s'appuie sur tout ce que vous utilisez en mode natif et permet un développement graphique transparent et portable , sans sacrifier les performances ni avoir de chaînes de licence. API C ++. C'est le chemin que j'ai choisi pour mes besoins en GUI, et j'ai pensé qu'il devrait être mentionné pour être complet.

DevSolar
la source
+1 et notez que si vous parvenez à choisir un framework (par exemple Qt), vous n'aurez pas besoin de vous soucier autant de tous les trucs X (certains cependant).
Peter Jaric
+1 & So GUI portion of Windows API is equivalent to Qt & GTK +. Alors, quel est l'équivalent de X Window System dans Windows? pourquoi et comment existent-ils KDE & Gnome?
griffes
@DevSolar: vous êtes sur la bonne voie. veuillez être un peu plus descriptif. X11 est juste des spécifications comme POSIX? et xorg & xfree86 sont ses deux implémentations? S'il y a GTK + & Qt, quel était le besoin de Gnome & KDE? Veuillez comparer chaque étape / niveau aux fenêtres. C'est facile à comprendre pour moi.
griffes
At the bottom, a "window manager"Le gestionnaire de fenêtres s'appuie sur le système X Window? si oui, le système Windows serait en bas à droite? Vous me faites confondre avec le gestionnaire de fenêtres et le système de fenêtres.
griffes
"X11" / "X Window (System)", implémenté par "Xorg" / "XFree86", sont tout en bas et offrent des points et des lignes. Un "gestionnaire de fenêtres" ("Metacity" / "Kwin") propose des fenêtres (frame, glisser, redimensionner, fermer etc.).
DevSolar
3

Je ne comprends pas pourquoi vous trouvez si difficile de comprendre l'explication fournie par http://en.wikipedia.org/wiki/X_Window_System mais de toute façon:

Le système X Window se compose normalement de 2 parties:

  • Un serveur (appelé XServer)
  • Clients (appelés .. XClients :))

Le serveur se connecte au matériel (carte graphique, périphériques d'entrée) et permet aux clients d'utiliser ces ressources. Les clients se connectent au xserver et utilisent les ressources fournies.

Il existe des serveurs pour Unix (Xorg, les gens de mac ont leur propre etc) et pour Windows (Hummingbird, le port de Cygwin de Xorg, etc.).

Vous pouvez connecter des clients sur un système d'exploitation à des serveurs exécutés sur un autre système d'exploitation.

La communication entre le serveur et les clients se fait via l' API Xlib ou (plus moderne) l' API xcb .

Pour créer une application simple, vous procédez normalement comme suit:

  • se connecter au xserver
  • demander au xserver de créer une fenêtre (qui vous donnera un "handle")
  • dire au xserver d'ouvrir la fenêtre
  • traiter les événements (souris, clavier, exposition, mouvement, etc.)
  • dessiner des trucs dans la fenêtre (texte, grafics etc)
  • quittez l'application en disant au xserver de libérer toutes les ressources

Et.. Voila.

akira
la source