Passare da Windows a Linux: comprensione: X Window System, X Server, Xorg, Xfree86


10

Sono uno sviluppatore di Windows (Win32api) che si sposta da Windows a Linux. Durante l'installazione di Linux ci sono molte cose da sapere su X11, X Window System, X Server, Xorg, Xfree86 e cosa no.

Come mai non siamo a conoscenza di queste cose in Windows? L'articolo di Wiki su questi mi spaventa. Qualcuno può spiegare queste cose? Come funzionano? Perché è così complicato in Linux e non in Windows?

Sono apprezzate anche eventuali buone referenze.

PS: adoro conoscere gli interni, non esitare ad approfondire.


1
Dopo aver letto le risposte leggi questo articolo "Pensieri e divagazioni sul protocollo X" julien.danjou.info/blog/…
artigli

1
Collegamenti come modificati julien.danjou.info/blog/2010/…
fstamour

Risposte:


13

Windows offre un'unica implementazione di un singolo desktop in aggiunta a un'unica implementazione di una singola API / framework, il tutto fatto da Microsoft.

Sui sistemi Unix, ottieni un'API / framework (X11 / X Window System) per i quali esistono implementazioni multiple (Xorg, Xfree86), in cima alle quali ottieni varie API / framework "di livello superiore" (GTK +, Qt, ... ) perché l'X11 grezzo è così primitivo, oltre al quale si ottengono vari desktop (Gnome, KDE, ...), tutti realizzati da persone diverse.

Inoltre, il sistema X11 è stato progettato da zero pensando a GUI remote, ovvero una macchina lokal che mostra la GUI di un'applicazione in esecuzione in remoto, che introduce i concetti di "X Server" e "X Client".

Poi c'è una nomenclatura che "sente" la strada sbagliata per i nuovi arrivati: il tuo computer locale esegue "X Server" fornendo il servizio "display a GUI", mentre il computer remoto è "X Client" che utilizza i servizi sul tuo computer per visualizzare la GUI.

Bene, questa è la rapida panoramica; una volta risolto il problema, la comprensione di eventuali articoli / post sul forum sull'argomento dovrebbe diventare molto più semplice.

Modifica: per rispondere ai primi due commenti del PO.

Sì, "X11" è semplicemente un protocollo e Xorg / XFree86 sono due implementazioni. Al suo livello base, X11 riguarda solo il disegno di linee e punti, il che non è estremamente utile se si desidera eseguire una GUI.

Oltre al protocollo X11, le persone hanno implementato molte cose ed è abbastanza difficile fare un confronto 1: 1 con Windows perché Microsoft non si è mai preoccupata di tenere davvero le cose separate. Inoltre non sono uno sviluppatore di tipo GUI, ovvero la mia esperienza effettiva con entrambi i sistemi è minima.

Nella parte inferiore, un "gestore di finestre" fornisce una finestra (gestione dei bordi, chiusura / riduzione / ingrandimento dei pulsanti, ridimensionamento ecc.) E offre la "proprietà" all'interno della finestra al set di strumenti del widget. Ci sono molti gestori di finestre, alcuni che imitano altri sistemi (Windows, MacOS, AmigaOS, qualunque cosa) e sono per lo più intercambiabili trasparenti al sistema rimanente.

Il "set di strumenti del widget" offre pulsanti, cursori, campi di testo ecc. Su cui costruire la tua GUI. Questo è ciò che tu (in qualità di sviluppatore di applicazioni) effettivamente riesci a "vedere", per quanto riguarda le API, e ciò che decide maggiormente del "look and feel" della tua applicazione.

Un "desktop" crea una serie di applicazioni su una determinata combinazione di set di strumenti widget / gestore finestre, al fine di fornire un aspetto coerente. Non devi preoccuparti di questi a meno che tu non voglia davvero sviluppare il desktop stesso.

Il desktop "Gnome" utilizza il set di strumenti del widget "GTK +" nella parte superiore del gestore di finestre "Metacity".

Il desktop "KDE" utilizza il set di strumenti del widget "Qt" nella parte superiore del gestore finestre "KWin".

Si noti che soprattutto quei due, GTK + e Qt, si sono evoluti ben oltre i semplici "set di strumenti widget" in "framework di sviluppo di applicazioni". Se vuoi sviluppare app GUI per Linux, devi effettivamente scegliere quale di quelle due vuoi usare. Ci sono più scelte, se vuoi un'app più "leggera" (che non necessita delle grandi dipendenze delle librerie), ma oggi la maggior parte dei sistemi ha già installato le librerie GTK + e Qt.

È perfettamente possibile usare le app Qt su un desktop Gnome o le app GTK + su un desktop KDE (non è sempre stato così), quindi devi preoccuparti poco della compatibilità. Data la scelta tra due app con funzionalità comparabili, le persone preferiranno di solito l'app utilizzando i widget "nativi" del desktop preferito, ma non me ne preoccuperei.

Altri, più importanti punti elenco nella scelta del "set di strumenti widget": termini di licenza, supporto per la lingua scelta, compatibilità multipiattaforma.


Post Scriptum : Tornando diversi anni dopo, ho acquisito una mia esperienza di programmazione della GUI e mi rendo conto che manca una cosa nella spiegazione sopra se stai cercando un consiglio "da che parte andare": wxWidgets . Questo è un framework che si basa su tutto ciò che si sta utilizzando in modo nativo e consente lo sviluppo di GUI in modo trasparente portatile , senza sacrificare le prestazioni o senza stringhe di licenze associate. API C ++. È il percorso che ho scelto per le mie esigenze con la GUI e ho pensato che dovesse essere menzionato per completezza.


+1 e nota che se riesci a scegliere un framework (ad esempio Qt) non dovrai preoccuparti troppo di tutte le cose X (alcune però).
Peter Jaric,

+1 e quindi la parte della GUI dell'API di Windows è equivalente a Qt & GTK +. Allora, qual è l'equivalente di X Window System in Windows? perché e come esistono KDE e Gnome?
artigli

@DevSolar: sei sulla strada giusta. si prega di essere un po 'più descrittivo. X11 è solo specifiche come POSIX? e xorg e xfree86 sono le sue due implementazioni? Se ci sono GTK + e Qt qual era la necessità di Gnome e KDE? Si prega di confrontare ogni passaggio / livello con windows. È facile da capire per me.
artigli

At the bottom, a "window manager"Window Manager si basa su X Window System? in tal caso, il sistema Windows sarebbe in basso a destra? Mi stai facendo confondere con il gestore di finestre e il sistema di finestre.
artigli

"X11" / "X Window (System)", implementato da "Xorg" / "XFree86", sono in fondo e offrono punti e linee. Un "gestore di finestre" ("Metacity" / "Kwin") offre finestre (frame, trascinamento, ridimensionamento, chiusura ecc.).
DevSolar,

3

Non capisco perché trovi così difficile comprendere la spiegazione fornita da http://en.wikipedia.org/wiki/X_Window_System ma comunque:

Il sistema X Window normalmente consiste di 2 parti:

  • Un server (chiamato XServer)
  • Clienti (chiamato .. XClients :))

Il server si collega all'hardware (scheda grafica, dispositivi di input) e consente ai client di utilizzare queste risorse. I client si connettono a xserver e utilizzano le risorse fornite.

Esistono server per Unix (Xorg, i Mac hanno i propri, ecc.) E Windows (Hummingbird, la porta di Xorg di Cygwin, ecc.).

È possibile connettere i client su un sistema operativo ai server in esecuzione su un altro sistema operativo.

La comunicazione tra il server e i client avviene tramite l' API Xlib o (più moderna) l' API xcb .

Per creare una semplice applicazione di solito basta fare questo:

  • connettersi a xserver
  • richiedi a xserver di creare una finestra (che ti darà un "handle")
  • dì a xserver di aprire la finestra
  • eventi di processo (mouse, tastiera, esposizione, movimento, ecc.)
  • disegna roba alla finestra (testo, grafica ecc.)
  • chiudere l'app dicendo a xserver di rilasciare tutte le risorse

e ... fatto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.