GNU/Linux >> Linux Esercitazione >  >> Linux

Come funziona il display di Linux?

Display Linux

Il sistema di visualizzazione di Linux utilizza più tecnologie, protocolli, estensioni, applicazioni, server (daemon), driver e concetti per ottenere il sistema a finestre, ad esempio:Xorg, Wayland, X11, OpenGL, RandR, XrandR, risoluzione dello schermo, DPI, server di visualizzazione , ecc. Questo può essere opprimente da comprendere appieno, ma ogni lato è pensato per uno scopo specifico e non vengono utilizzati tutti insieme allo stesso tempo.

Protocollo X

Il sistema X Window, X11 (X versione 11) è un sistema a finestre per display bitmap, comune su sistemi operativi simili a Unix, X fornisce la struttura di base per un ambiente GUI:disegno e spostamento di finestre sul dispositivo di visualizzazione e interazione con mouse e tastiera. X non impone l'interfaccia utente, questa è gestita dai singoli programmi. Pertanto, lo stile visivo degli ambienti basati su X varia notevolmente; diversi programmi possono presentare interfacce radicalmente differenti. X ha avuto origine al Project Athena presso il Massachusetts Institute of Technology (MIT) nel 1984. Il protocollo X è alla versione 11 (da cui "X11") dal settembre 1987. La X.Org Foundation guida il progetto X, con l'attuale implementazione di riferimento , X.Org Server, disponibile come software gratuito e open source con licenza MIT e licenze permissive simili.

Implementazione X

La maggior parte delle distribuzioni Linux utilizza X.Org Server che è l'implementazione gratuita e open source del server di visualizzazione per il sistema X Window (X11) gestito dalla X.Org Foundation. Xorg/X da solo non supporta più funzionalità fornite come il ridimensionamento o il rendering, per quel Xorg utilizza le estensioni come XFixes, RandR (RandR è gestito da xrandr può ad esempio impostare panning, risoluzione o ridimensionamento), GLX (estensione OpenGL), Render o Composite che provoca il rendering di un intero sottoalbero della gerarchia delle finestre in un buffer fuori schermo, le applicazioni possono quindi prendere il contenuto di quel buffer e fare quello che vogliono, il buffer off-screen può essere unito automaticamente alla finestra principale oppure uniti da programmi esterni, chiamati gestori di compositing per eseguire la composizione da soli come alcuni gestori di finestre fare; Per esempio. Compiz, Enlightenment, KWin, Marco, Metacity, Muffin, Mutter e Xfwm. Per altri file "non compositi " gestori di finestre, è possibile utilizzare un gestore composito autonomo, ad esempio:Picom, Xcompmgr o Unagi. Estensioni supportate da Xorg può essere elencato con:xdpyinfo -display :0 -queryExtensions | awk '/^number of extensions:/,/^default screen number/' .

D'altra parte Wayland è inteso come un sostituto più semplice di Xorg/X11, più facile da sviluppare e mantenere ma a partire dal 2020 il supporto desktop per Wayland non è ancora completamente pronto oltre a Gnome (ad es. KDE Kwin e supporto Wayland); dal lato delle distribuzioni, Fedora utilizza Wayland per impostazione predefinita. Nota che Wayland e Xorg possono funzionare contemporaneamente, questo può essere il caso a seconda della configurazione utilizzata. XWayland è una serie di patch sulla base di codice del server X.Org che implementa un server X in esecuzione sul protocollo Wayland. Le patch sono sviluppate e mantenute dagli sviluppatori di Wayland per la compatibilità con le applicazioni X11 durante la transizione a Wayland, e sono state inserite nella versione 1.16 del server X.Org nel 2014. Quando un utente esegue un'applicazione X da Weston, fa appello a XWayland per soddisfare la richiesta.

L'intero ambito

Un server di visualizzazione o window server è un programma (come Xorg o Wayland) il cui compito principale è coordinare l'input e l'output dei suoi client da e verso il resto del sistema operativo, l'hardware e tra loro. Il server di visualizzazione comunica con i propri client tramite il protocollo del server di visualizzazione, un protocollo di comunicazione che può essere trasparente in rete o semplicemente compatibile con la rete. Ad esempio X11 e Wayland sono protocolli di comunicazione del server di visualizzazione.

Come mostrato nel diagramma un window manager è un altro elemento importante dell'ambiente desktop che è un software di sistema che controlla il posizionamento e l'aspetto delle finestre all'interno di un sistema a finestre in un'interfaccia utente grafica. La maggior parte dei gestori di finestre sono progettati per aiutare a fornire un ambiente desktop. Funzionano in combinazione con il sistema grafico sottostante che fornisce il supporto delle funzionalità richieste per l'hardware grafico, i dispositivi di puntamento e una tastiera e sono spesso scritti e creati utilizzando un toolkit widget. KDE utilizza KWin come gestore di finestre (ha un supporto limitato per Wayland a partire dal 2020), allo stesso modo Gnome 2 utilizza Metacity e Gnome 3 utilizza Mutter come gestore di finestre.

Un altro aspetto importante di un gestore di finestre è il compositor o gestore di finestre di composizione , che è un gestore di finestre che fornisce alle applicazioni un buffer fuori schermo per ogni finestra. Il window manager compone i buffer delle finestre in un'immagine che rappresenta lo schermo e scrive il risultato nella memoria del display. I gestori di finestre di composizione possono eseguire ulteriori elaborazioni su finestre bufferizzate, applicando effetti animati 2D e 3D come fusione, dissolvenza, ridimensionamento, rotazione, duplicazione, piegatura e contorsione, mescolamento, sfocatura, reindirizzamento di applicazioni e traduzione di finestre in uno dei numerosi display e desktop virtuali. La tecnologia della computer grafica consente il rendering in tempo reale di effetti visivi come ombre esterne, anteprime dal vivo e animazioni complesse. Poiché lo schermo è dotato di doppio buffer, non sfarfalla durante gli aggiornamenti. I gestori di finestre di composizione più comunemente usati includono:Linux, BSD, Hurd e OpenSolaris-Compiz, KWin, Xfwm, Enlightenment e Mutter. ognuno ha la propria implementazione, ad esempio il compositore di KWin di KDE hanno molte funzioni/impostazioni come la velocità dell'animazione, la prevenzione del tearing (vsync), le miniature delle finestre, il metodo di ridimensionamento e possono utilizzare OpenGLv2/OpenGLv3 o XRender come backend di rendering insieme a Xorg. (XRender/Render da non confondere con XRandR/RandR).

OpenGL (libreria grafica aperta) è un'API (Application Programming Interface) multilingua e multipiattaforma per il rendering di grafica vettoriale 2D e 3D. L'API viene in genere utilizzata per interagire con un'unità di elaborazione grafica (GPU), per ottenere il rendering con accelerazione hardware. OpenGL è una libreria di rendering che può essere utilizzata con Xorg, Wayland o qualsiasi applicazione che la implementa. L'installazione di OpenGL può essere verificata con glxinfo | grep OpenGL .

La risoluzione del display o modalità di visualizzazione di un monitor di computer o dispositivo di visualizzazione è il numero di pixel distinti in ogni dimensione che possono essere visualizzati. Di solito è indicato come larghezza × altezza, con le unità in pixel:ad esempio, 1024 × 768 significa che la larghezza è 1024 pixel e l'altezza è 768 pixel. xrandr può essere utilizzato per aggiungere o eseguire il rendering/simulare una nuova risoluzione del display.

Il DPI sta per punti per pollice ed è una misura della stampa/visualizzazione spaziale , in particolare il numero di singoli punti che possono essere posizionati in una linea all'interno dell'intervallo di 1 pollice (2,54 cm). Gli schermi dei computer non hanno punti, ma hanno pixel, il concetto strettamente correlato è pixel per pollice o PPI e quindi DPI è implementato con il concetto PPI. Il 96 predefinito Misura DPI media 96x96 verticalmente e orizzontalmente. Inoltre, l'impostazione X DPI (punto per pollice) è pensata solo per il ridimensionamento del testo? Il QA è molto istruttivo.

Note

Alcuni strumenti gui di KDE: systemsettings5> display, kcmshell5 xserver e kinfocenter .

Riferimenti

Link e fonti: 1,2,3,4,5,6,7,8,9,10,11 e 12.


La domanda è piuttosto ampia e si potrebbe scrivere molto di più sull'argomento rispetto a questa risposta. Ho cercato di fornire una prospettiva storica sull'evoluzione della grafica di Linux. La grafica, i sistemi a finestre e le interfacce utente grafiche (GUI) su Linux hanno subito molti cambiamenti dall'inizio degli anni '90, quando X Window System (X11) è stato portato su Linux.

Il sistema X Window

Il sistema X Window è stato sviluppato al MIT negli anni '80. Il nome X11 si riferisce alla versione 11 del protocollo X, ma X10 è stato utilizzato anche al di fuori del MIT prima di essere sostituito dalla versione 11 nel 1987.

Il sistema X Window è stato progettato per funzionare su sistemi grafici che erano lo stato dell'arte negli anni '80. Una tipica workstation aveva un singolo frame buffer collegato a un semplice controller CRT che visualizzava il contenuto del frame buffer su un monitor. L'informatica prima dell'era dei PC e delle workstation veniva eseguita tramite terminali di linea seriale ("stupidi") collegati a computer centrali situati nelle sale macchine dei computer. Questo contesto storico ha influenzato il design di X11:le applicazioni grafiche potevano essere eseguite su computer remoti con l'utente che interagiva con il programma utilizzando terminali con capacità grafiche. Il "terminale" potrebbe essere una workstation o un terminale X dedicato.

X11 è stato progettato come un sistema client-server. Il server X era l'unica parte che comunicava direttamente con l'hardware grafico. I client X sono programmi applicativi che comunicano con il server utilizzando il protocollo X, utilizzando un socket di dominio Unix locale o una connessione TCP/IP. Il protocollo X viene utilizzato dal client sia per inviare richieste al server sia per ricevere messaggi di evento dal server.

Le richieste includono messaggi per:

  • creazione di finestre
  • mappare/annullare la mappatura di una finestra:rendere la finestra visibile/invisibile
  • disegnare sulla finestra:disegna pixel, linee, archi, ovali, pixmap, ecc.
  • visualizzare il testo utilizzando un carattere, una dimensione e uno stile specificati
  • spostamento e ridimensionamento delle finestre, modifica dell'ordine di sovrapposizione delle finestre, ecc.

I client ricevono messaggi (elenco non esaustivo):

  • risponde alle richieste
  • eventi di pressione di tasti e clic del mouse
  • esporre eventi (è necessario ridisegnare un'area di una finestra)
  • concentrati sugli eventi di guadagno/perdita

Per consentire all'utente di gestire le finestre sullo schermo, ad esempio spostare, ridimensionare, chiudere, alzare e abbassare una finestra, viene fornita una particolare applicazione chiamata window manager. Il gestore di finestre può anche visualizzare decorazioni di finestre come bordi, barre del titolo e menu globali.

Si potrebbe dire che il server X11 è piuttosto "di alto livello", poiché gestisce (o almeno tradizionalmente gestisce) tutti i tipi di risorse:finestre, font, pixmap, colormap, contesti grafici (cose come colore di primo piano/sfondo, larghezza della linea, ecc. ). Oltre a questo, il server si occupa di cose come le relazioni genitore-figlio delle finestre e l'ordine di sovrapposizione delle finestre.

Il protocollo X è progettato per essere estensibile. Al server X può essere insegnato a fare nuovi trucchi e nuovi codici operativi vengono aggiunti al protocollo per fare in modo che il server esegua quei trucchi. Ad esempio, l'estensione XRender introduce un modo per gestire la trasparenza ("fusione alfa"). Questa estensione è stata introdotta principalmente per supportare i caratteri anti-alias, ma è stata utilizzata anche per gli effetti del desktop come le ombre esterne sulle finestre. L'estensione RandR ("Resize and Rotate") consente di ridimensionare, ruotare e riflettere la finestra principale sullo schermo. Ciò consente di proiettare lo schermo utilizzando un proiettore capovolto o di utilizzare un monitor inclinato.

L'estensione GLX (OpenGL Extension to the X Window System) consente di utilizzare OpenGL in una finestra fornita dal server X. Le chiamate a OpenGL sono incorporate nelle richieste del protocollo X.

Ad un certo punto dell'evoluzione di X11, la gestione dei font è stata spostata per essere gestita dal client. Le ragioni alla base di questo cambiamento sono discusse in Nuove evoluzioni nel sistema X Window.

Rendering diretto

All'inizio degli anni 2000, l'hardware di visualizzazione aveva fatto molta strada dai semplici display bitmap in bianco e nero che esistevano quando iniziò lo sviluppo di X negli anni '80. L'overhead relativo di X11 del modello di comunicazione tra processi (IPC) era diventato troppo grande, anche quando si utilizzava un socket locale. La soluzione era abbandonare il principio secondo cui il server X è l'unica parte che comunica direttamente con l'hardware e lasciare che i client parlino direttamente con la scheda grafica. Nasce la Direct Rendering Infrastructure (DRI).

DRI consente a un'app client X di ignorare il server X e di eseguire il rendering direttamente sulla scheda grafica. Poiché diverse applicazioni di rendering diretto oltre al tradizionale server X possono essere attive contemporaneamente, è stato introdotto un componente del kernel chiamato Direct Rendering Manager per arbitrare l'accesso all'hardware. Esistono tre versioni dell'architettura DRI, l'originale DRI (obsoleto), DRI2 e DRI3.

Gestori di finestre di composizione

La successiva innovazione ad entrare nella scena grafica di Linux è stata il gestore di finestre di compositing. Tradizionalmente, ogni applicazione client X era responsabile del ridisegno delle proprie finestre (parzialmente o dell'intera finestra) su richiesta. Il server X ha inviato all'applicazione un evento Expose quando era necessario un repaint in seguito alla mappatura della finestra sullo schermo o se non è più oscurata da un'altra finestra. Quando una finestra sovrapposta viene rimossa, la finestra sottostante viene esposta. Se non si ridipinge quest'area, i vecchi contenuti vengono ancora visualizzati. https://en.wikipedia.org/wiki/Visual_artifact

Un gestore di finestre di composizione cambia questo. Le applicazioni eseguono il rendering nei propri buffer fuori schermo, ognuno dei quali è una specie di schermata separata con accesso esclusivo da parte dell'applicazione che possiede il buffer. È compito del gestore di finestre di composizione visualizzare questi buffer in finestre su uno schermo reale, ritagliando tutte le finestre che sono oscurate da altre finestre o parzialmente fuori dallo schermo. Il window manager visualizza una "composizione" delle finestre.

Un gestore di compositing in genere può anche visualizzare effetti animati, come ridimensionamento, deformazione, dissolvenza, rotazione, sfocatura delle finestre. Ad esempio, lo spostamento di una finestra può farla oscillare, oppure i desktop virtuali possono essere visualizzati sul lato di un cubo rotante.

Impostazione modalità kernel

Il server X tradizionalmente si occupava anche di impostare le modalità dell'adattatore grafico, come risoluzione e frequenza di aggiornamento. Da allora l'impostazione della modalità è stata spostata in un componente del kernel Linux chiamato Kernel Mode Setting (KMS). Questo ha risolto molti problemi con il passaggio tra le console virtuali di Linux.

Evdev

Il server X conosceva anche i dispositivi di input e, ad esempio, il tipo di mouse doveva essere specificato nella configurazione X. Il server X è stato sollevato da questo compito con l'introduzione del sottosistema evdev del kernel Linux, che fornisce un'interfaccia generica per gli eventi di input.

Terra di passaggio

Con tutti questi sviluppi, molte delle attività eseguite dal server X sono state spostate al di fuori del server X. Utilizzando il rendering diretto, i client non utilizzano più il protocollo X. Grazie a KMS, il server X non ha bisogno di confondere con la programmazione di basso livello degli adattatori grafici. Con evdev, la gestione dei dispositivi di input è stata semplificata nel server X. Quando si utilizza un gestore di finestre di compositing che riorganizza e deforma le finestre, il server X non ha più idea di cosa stia succedendo sullo schermo. "Il window manager è il nuovo server X".

Wayland è nato come risultato della consapevolezza che il processo del server X aveva poco da fare e, eliminando l'intermediario (il server X), si poteva ottenere un sistema grafico desktop molto più semplice. La compatibilità con le versioni precedenti viene fornita tramite Xwayland, un server Xorg modificato che visualizza le finestre X di primo livello utilizzando le superfici Wayland.

A rigor di termini, Wayland è solo un protocollo che definisce il modo in cui i client comunicano con il server di visualizzazione. Il protocollo Wayland è abbastanza diverso dal protocollo X:il protocollo Wayland non definisce i messaggi per disegnare grafica o testo, né gestisce i caratteri.

Nell'architettura Wayland, il window manager e il display server sono fusi in un unico componente software, il compositing window manager. I clienti possono richiedere, tramite una libreria software che utilizza il protocollo Wayland, una superficie su cui disegnare. Una "superficie è un oggetto che rappresenta un'area rettangolare sullo schermo, definita da posizione, dimensioni e contenuto in pixel".

I client eseguono il rendering in buffer fuori schermo, che vengono quindi collegati a una superficie, producendo l'output sullo schermo. Il client può utilizzare varie API per eseguire il rendering:OpenGL, OpenGL ES, ecc. ("Cos'è l'API di disegno? Qualunque cosa tu voglia che sia") Viene utilizzato il double buffering:un client aggiorna la sua immagine utilizzando un secondo buffer e quando quel buffer contiene un'immagine coerente, viene commutato per essere visualizzato al successivo intervallo di oscuramento verticale del monitor di visualizzazione. Il motto di Wayland è:"Ogni fotogramma è perfetto", ovvero le finestre non si strappano, non sfarfallano o lampeggiano.

La gestione dell'input in Wayland passa attraverso il compositore, che è l'unico componente a sapere quale finestra si trova sotto il cursore del mouse (ricorda, il compositore potrebbe anche aver deformato le finestre). Il compositore trasforma le coordinate dello schermo in coordinate locali della finestra della finestra appropriata e invia l'evento al client.

Se sei interessato alla storia che ha portato alla creazione di Wayland, ti consiglio di guardare l'esilarante presentazione di Daniel Stone La vera storia dietro Wayland e X.


Linux
  1. Cos'è NGINX? Come funziona?

  2. Come funziona Awk '!a[$0]++'?

  3. Linux:come funziona il carico medio con le moderne CPU?

  4. Ssh – Come funziona Tcp-keepalive in Ssh?

  5. Come funziona internamente copy_from_user dal kernel di Linux?

Linux:come funziona il display di Linux?

Che cos'è il comando sorgente in Linux e come funziona?

Come funziona la memoria di scambio in Linux?

Come funziona l'allocazione dello stack in Linux?

Come funziona il comando ps?

Come funziona una GUI Linux al livello più basso?