106.1 Lezione 1
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
106 Interfacce Utente e Desktop |
Obiettivo: |
106.1 Installare e configurare X11 |
Lezione: |
1 di 1 |
Introduzione
Il sistema X Window è uno stack software utilizzato per visualizzare testo e grafica su uno schermo. L’aspetto e il design complessivi di un client X non sono dettati dal sistema X Window, ma sono invece gestiti da ogni singolo client X, da un window manager (per esempio Window Maker, Tab Window Manager) o da un desktop environment completo come KDE, GNOME o Xfce. Gli ambienti desktop verranno trattati in una lezione successiva. Questa lezione si concentrerà sull’architettura sottostante e sugli strumenti comuni per il sistema X Window che un amministratore utilizzerebbe per configurare X.
Il sistema X Window è multipiattaforma e funziona su vari sistemi operativi come Linux, BSD, Solaris e altri sistemi Unix-like. Sono disponibili anche implementazioni per macOS di Apple e Microsoft Windows.
La versione principale del protocollo X utilizzato nelle moderne distribuzioni Linux è X.org versione 11, comunemente scritta come X11. Il protocollo X è il meccanismo di comunicazione tra il client X e il server X. Le differenze tra il client X e il server X verranno discusse di seguito.
Note
|
Il predecessore di X Window System era un sistema a finestre chiamato W e fu uno sforzo di sviluppo congiunto tra IBM, DEC e MIT. Questo software nacque da Project Athena nel 1984. Quando gli sviluppatori hanno iniziato a lavorare su un nuovo server di visualizzazione, hanno scelto la lettera successiva dell’alfabeto inglese: “X”. L’evoluzione del sistema X Window è attualmente controllata dal MIT X Consortium. |
Architettura di Sistema X Window
Il sistema X Window fornisce i meccanismi per disegnare forme bidimensionali di base (e forme tridimensionali tramite estensioni) su un display. È diviso in un client e un server e nella maggior parte delle installazioni in cui è necessario un desktop grafico, entrambi questi componenti si trovano sullo stesso computer. Il componente client assume la forma di un’applicazione, quali un emulatore di terminale, un gioco o un browser web. Ogni applicazione client informa il server X sulla posizione e le dimensioni della finestra sullo schermo di un computer. Il client gestisce anche ciò che entra in quella finestra e il server X mette sullo schermo il disegno richiesto. Il sistema X Window gestisce anche l’input da dispositivi come mouse, tastiere, trackpad e altro.
Il sistema X Window è compatibile con la rete e più client X da diversi computer su una rete possono effettuare richieste di disegno a un singolo server X remoto. Il ragionamento alla base di ciò è che un amministratore o un utente può avere accesso a un’applicazione grafica su un sistema remoto che potrebbe non essere disponibile sul proprio sistema locale.
Una caratteristica fondamentale del sistema X Window è che è modulare. Nel corso dell’esistenza di X Window System sono state sviluppate e aggiunte al suo framework nuove funzionalità. Questi nuovi componenti sono stati aggiunti solo come estensioni al server X, lasciando intatto il protocollo X11 di base. Queste estensioni sono contenute nei file di libreria Xorg. Esempi di librerie Xorg includono: libXrandr
, libXcursor
, libX11
, libxkbfile
e molte altre, ognuna delle quali fornisce funzionalità estese al server X.
Un display manager fornisce un login grafico a un sistema. Questo sistema può essere un computer locale o un computer in rete. Il display manager viene avviato dopo l’avvio del computer e avvia una sessione del server X per l’utente autenticato. Il display manager è anche responsabile di mantenere il server X attivo e funzionante. I display manager di esempio includono GDM, SDDM e LightDM.
Ogni istanza di un server X in esecuzione ha un display name per identificarla. Il nome visualizzato contiene quanto segue:
hostname:displaynumber.screennumber
Il display name indica anche a un’applicazione grafica dove l’output debba essere visualizzato e su quale host (se si utilizza una connessione X remota).
L'`hostname` si riferisce al nome del sistema che visualizzerà l’applicazione. Se un nome host manca dal nome visualizzato, viene assunto l’host locale.
Il displaynumber
fa riferimento alla raccolta di “schermi” che sono in uso, sia che si tratti di un singolo schermo di laptop o di più schermi su una workstation. A ogni sessione del server X in esecuzione viene assegnato un numero di visualizzazione a partire da 0
.
Lo screennumber
predefinito è 0
. Questo può essere il caso se solo uno schermo fisico o più schermi fisici sono configurati per funzionare come uno schermo. Quando tutte le schermate in una configurazione multi-monitor sono combinate in un’unica schermata logica, le finestre dell’applicazione possono essere spostate liberamente tra le schermate. In situazioni in cui ogni schermata è configurata per funzionare indipendentemente l’una dall’altra, ogni schermata ospiterà le finestre dell’applicazione che si aprono al loro interno e le finestre non possono essere spostate da una schermata all’altra. Ogni schermo indipendente avrà il proprio numero assegnato. Se è in uso un solo schermo logico, il punto e il numero dello schermo vengono omessi.
Il nome visualizzato di una sessione X in esecuzione è memorizzato nella variabile d’ambiente DISPLAY
:
$ echo $DISPLAY :0
L’output descrive in dettaglio quanto segue:
-
Il server X in uso è sul sistema locale, quindi non c’è nulla stampato a sinistra dei due punti.
-
L’attuale sessione del server X è la prima come indicato dallo
0
subito dopo i due punti. -
È in uso una sola schermata logica, quindi il numero di schermata non è visibile.
Per illustrare ulteriormente questo concetto, fare riferimento al diagramma seguente:
- (A)
-
Un unico monitor, con un’unica configurazione del display e un solo schermo.
- (B)
-
Configurato come un unico display, con due monitor fisici configurati come uno schermo. Le finestre dell’applicazione possono essere spostate liberamente tra i due monitor.
- (C)
-
Una singola configurazione del display (come indicato da
:0
) tuttavia ogni monitor è uno schermo indipendente. Entrambi gli schermi condivideranno ancora gli stessi dispositivi di input come tastiera e mouse, tuttavia un’applicazione aperta sullo schermo:0.0
non può essere spostata sullo schermo:0.1
e viceversa.
Per avviare un’applicazione su uno schermo specifico, assegna il numero dello schermo alla variabile d’ambiente DISPLAY
prima di avviare l’applicazione:
$ DISPLAY=:0.1 firefox &
Questo comando avvierà il browser Web Firefox sullo schermo a destra nel diagramma sopra. Alcuni toolkit forniscono anche opzioni della riga di comando per istruire un’applicazione da eseguire su una schermata specificata. Vedere --screen
e --display
nella pagina man gtk-options (7)
per un esempio.
=== Configurazione X Server
Tradizionalmente, il file di configurazione principale utilizzato per configurare un server X è il file /etc/X11/xorg.conf
. Sulle moderne distribuzioni Linux, il server X si configurerà in fase di esecuzione quando il server X viene avviato e quindi non può esistere alcun file xorg.conf
.
Il file xorg.conf
è diviso in parti separate chiamate sections. Ogni sezione inizia con il termine Section
e dopo questo termine c’è il nome della sezione che si riferisce alla configurazione di un componente. Ogni Section
viene terminata da una EndSection
corrispondente. Il tipico file xorg.conf
contiene le seguenti sezioni:
InputDevice
-
Per configurare un modello specifico di tastiera o mouse.
InputClass
-
Nelle moderne distribuzioni Linux questa sezione si trova in genere in un file di configurazione separato situato in
/etc/X11/xorg.conf.d/
. LaInputClass
è usata per configurare una classe di dispositivi hardware come tastiere e mouse piuttosto che un a parte hardware specifica. Di seguito è riportato un file di esempio/etc/X11/xorg.conf.d/00-keyboard.conf
:Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "us" Option "XkbModel" "pc105" EndSection
L’opzione per
XkbLayout
determina il layout dei tasti su una tastiera, come Dvorak, mano sinistra o destra, QWERTY e lingua. L’opzione perXkbModel
è usata per definire il tipo di tastiera in uso. Una tabella di modelli, layout e le loro descrizioni può essere trovata inxkeyboard-config(7)
. I file associati ai layout di tastiera possono essere trovati in/usr/share/X11/xkb
. Un esempio di layout di tastiera greca Polytonic su un computer Chromebook sarebbe simile al seguente:Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "gr(polytonic)" Option "XkbModel" "chromebook" EndSection
In alternativa, il layout di una tastiera può essere modificato durante una sessione X in esecuzione con il comando
setxkbmap
. Ecco un esempio di questo comando che imposta il layout Greek Polytonic su un computer Chromebook:$ setxkbmap -model chromebook -layout "gr(polytonic)"
Questa impostazione permane solo fino a quando la sessione X rimane in uso. Per rendere permanenti tali modifiche, modificare il file
/etc/X11/xorg.conf.d/00-keyboard.conf
per includere le impostazioni richieste.NoteIl comando
setxkbmap
utilizza la X Keyboard Extension (XKB). Questo è un esempio della funzionalità aggiuntiva del sistema X Window attraverso l’uso di estensioni.Le moderne distribuzioni Linux forniscono il comando
localectl
tramitesystemd
che può essere utilizzato anche per modificare un layout di tastiera e creerà automaticamente il file di configurazione/etc/X11/xorg.conf.d/00-keyboard.conf
. Ancora una volta, ecco un esempio di configurazione di una tastiera greca Polytonic su un Chromebook, questa volta utilizzando il comandolocalectl
:$ localectl --no-convert set-x11-keymap "gr(polytonic)" chromebook
L’opzione
--no-convert
è usata qui per impedire alocalectl
di modificare la mappa dei tasti della console dell’host. Monitor
-
La sezione
Monitor
descrive il monitor fisico utilizzato e dove è collegato. Di seguito è riportato un esempio di configurazione che mostra un monitor hardware collegato alla seconda porta del display e utilizzato come monitor principale.Section "Monitor" Identifier "DP2" Option "Primary" "true" EndSection
Device
-
La sezione
Device
descrive la scheda video fisica utilizzata. La sezione conterrà anche il modulo del kernel utilizzato come driver per la scheda video, insieme alla sua posizione fisica sulla scheda madre.Section "Device" Identifier "Device0" Driver "i915" BusID "PCI:0:2:0" EndSection
Screen
-
La sezione
Screen
unisce le sezioniMonitor
eDevice
. Un esempio di sezioneScreen
potrebbe essere simile alla seguente:Section "Screen" Identifier "Screen0" Device "Device0" Monitor "DP2" EndSection
ServerLayout
-
La sezione
ServerLayout
raggruppa tutte le sezioni come mouse, tastiera e schermi in un’unica interfaccia del sistema X Window.Section "ServerLayout" Identifier "Layout-1" Screen "Screen0" 0 0 InputDevice "mouse1" "CorePointer" InputDevice "system-keyboard" "CoreKeyboard" EndSection
Note
|
Non tutte le sezioni possono essere trovate all’interno di un file di configurazione. Nei casi in cui manca una sezione, i valori predefiniti sono invece forniti dall’istanza del server X in esecuzione. |
I file di configurazione specificati dall’utente risiedono anche in /etc/X11/xorg.conf.d/
. I file di configurazione forniti dalla distribuzione si trovano in /usr/share/X11/xorg.conf.d/
. I file di configurazione che si trovano all’interno di /etc/X11/xorg.conf.d/
vengono analizzati prima del file /etc/X11/xorg.conf
se quest’ultimo esiste nel sistema.
Il comando xdpyinfo
viene utilizzato su un computer per visualizzare le informazioni su un’istanza del server X in esecuzione. Di seguito è riportato un esempio di output del comando:
$ xdpyinfo name of display: :0 version number: 11.0 vendor string: The X.Org Foundation vendor release number: 12004000 X.Org version: 1.20.4 maximum request size: 16777212 bytes motion buffer size: 256 bitmap unit, bit order, padding: 32, LSBFirst, 32 image byte order: LSBFirst number of supported pixmap formats: 7 supported pixmap formats: depth 1, bits_per_pixel 1, scanline_pad 32 depth 4, bits_per_pixel 8, scanline_pad 32 depth 8, bits_per_pixel 8, scanline_pad 32 depth 15, bits_per_pixel 16, scanline_pad 32 depth 16, bits_per_pixel 16, scanline_pad 32 depth 24, bits_per_pixel 32, scanline_pad 32 depth 32, bits_per_pixel 32, scanline_pad 32 keycode range: minimum 8, maximum 255 focus: None number of extensions: 25 BIG-REQUESTS Composite DAMAGE DOUBLE-BUFFER DRI3 GLX Generic Event Extension MIT-SCREEN-SAVER MIT-SHM Present RANDR RECORD RENDER SECURITY SHAPE SYNC X-Resource XC-MISC XFIXES XFree86-VidModeExtension XINERAMA XInputExtension XKEYBOARD XTEST XVideo default screen number: 0 number of screens: 1 screen #0: dimensions: 3840x1080 pixels (1016x286 millimeters) resolution: 96x96 dots per inch depths (7): 24, 1, 4, 8, 15, 16, 32 root window id: 0x39e depth of root window: 24 planes number of colormaps: minimum 1, maximum 1 default colormap: 0x25 default number of colormap cells: 256 preallocated pixels: black 0, white 16777215 options: backing-store WHEN MAPPED, save-unders NO largest cursor: 3840x1080 current input event mask: 0xda0033 KeyPressMask KeyReleaseMask EnterWindowMask LeaveWindowMask StructureNotifyMask SubstructureNotifyMask SubstructureRedirectMask PropertyChangeMask ColormapChangeMask number of visuals: 270 ...
Le parti più rilevanti dell’output sono in grassetto, come il nome del display (che è lo stesso del contenuto della variabile d’ambiente DISPLAY
), le informazioni sulla versione del server X in uso, il numero e l’elenco di Estensioni Xorg in uso e ulteriori informazioni sullo schermo stesso.
Creazione di un File di Configurazione Base di Xorg
Anche se X creerà la sua configurazione dopo l’avvio del sistema sulle moderne installazioni Linux, può ancora essere usato un file xorg.conf
. Per generare un file permanente /etc/X11/xorg.conf
, esegui il seguente comando:
$ sudo Xorg -configure
Note
|
Se è già in esecuzione una sessione X, dovrai specificare un diverso $ sudo Xorg :1 -configure |
Su alcune distribuzioni Linux, il comando X
può essere usato al posto di Xorg
, poiché X
è un collegamento simbolico a Xorg
.
Verrà creato un file xorg.conf.new
nella directory di lavoro corrente. I contenuti di questo file derivano da ciò che il server X ha trovato disponibile nell’hardware e nei driver del sistema locale. Per usare questo file, dovrà essere spostato nella directory /etc/X11/
e rinominato in xorg.conf
:
$ sudo mv xorg.conf.new /etc/X11/xorg.conf
Note
|
Le seguenti pagine di manuale forniscono ulteriori informazioni sui componenti del sistema X Window: |
Wayland
Wayland è il nuovo protocollo di visualizzazione progettato per sostituire il sistema X Window. Molte moderne distribuzioni Linux lo utilizzano come server di visualizzazione predefinito. È pensato per essere più leggero sulle risorse di sistema e avere un ingombro di installazione inferiore rispetto a X. Il progetto è iniziato nel 2010 ed è ancora in fase di sviluppo attivo, compreso il lavoro di sviluppatori attivi ed ex. di X.org
A differenza del sistema X Window, non esiste alcuna istanza del server che gira tra il client e il kernel. Invece, una finestra client funziona con il proprio codice o con quello di un toolkit (come Gtk+ o Qt) per fornire il rendering. Per eseguire il rendering, viene effettuata una richiesta al kernel Linux tramite il protocollo Wayland. Il kernel inoltra la richiesta tramite il protocollo Wayland al Wayland compositor, che gestisce l’input del dispositivo, la gestione delle finestre e la composizione. Il compositore è la parte del sistema che combina gli elementi renderizzati nell’output visivo sullo schermo.
La maggior parte dei toolkit moderni come Gtk+ 3 e Qt 5 sono stati aggiornati per consentire il rendering su un sistema X Window o su un computer con Wayland. Non tutte le applicazioni autonome sono state ancora scritte per supportare il rendering in Wayland. Per l’esecuzione di applicazioni e framework ancora destinati al sistema X Window, l’applicazione può essere eseguita all’interno di XWayland. Il sistema XWayland è un server X separato che viene eseguito all’interno di un client Wayland e quindi esegue il rendering dei contenuti di una finestra client all’interno di un’istanza di server X autonoma.
Proprio come il sistema X Window usa una variabile d’ambiente DISPLAY
per tenere traccia degli schermi in uso, il protocollo Wayland usa una variabile d’ambiente WAYLAND_DISPLAY
. Di seguito è riportato un esempio di output da un sistema che esegue un display Wayland:
$ echo $WAYLAND_DISPLAY wayland-0
Questa variabile di ambiente non è disponibile sui sistemi che eseguono X.
Esercizi Guidati
-
Quale comando usereste per determinare quali estensioni Xorg sono disponibili su un sistema?
-
Hai appena ricevuto un nuovissimo mouse a 10 pulsanti per il tuo computer, tuttavia è richiesta una configurazione aggiuntiva per far funzionare correttamente tutti i pulsanti. Senza modificare il resto della configurazione del server X, quale directory useresti per creare un nuovo file di configurazione per questo mouse e quale specifica sezione di configurazione verrebbe usata in questo file?
-
Quale componente di un’installazione Linux è responsabile del mantenimento in esecuzione di un server X?
-
Quale opzione della riga di comando viene utilizzata con il comando
X
per creare un nuovo file di configurazionexorg.conf
?
Esercizi Esplorativi
-
Quale sarebbe il contenuto della variabile d’ambiente
DISPLAY
su un sistema chiamatolab01
usando una configurazione di visualizzazione singola? Supponiamo che la variabile d’ambienteDISPLAY
venga visualizzata in un emulatore di terminale sulla terza schermata indipendente. -
Quale comando può essere utilizzato per creare un file di configurazione della tastiera per l’utilizzo da parte del sistema X Window?
-
In una tipica installazione Linux un utente può passare da un terminale virtuale all’altro premendo i tasti kbd:[Ctrl+Alt+F1] - kbd:[F6] su una tastiera. Ti è stato chiesto di configurare un sistema kiosk con un’interfaccia grafica e devi disabilitare questa funzione per evitare manomissioni non autorizzate del sistema. Decidi di creare un file di configurazione
/etc/X11/xorg.conf.d/10-kiosk.conf
. Utilizzando una sezioneServerFlags
(utilizzata per impostare le opzioni Xorg globali sul server), quale opzione dovrebbe essere specificata? Riguarda la paginaman
xorg (1)
per individuare l’opzione.
Sommario
Questa lezione ha riguardato il sistema X Window utilizzato su Linux. Il sistema X Window viene utilizzato per disegnare immagini e testo sugli schermi, così come sono definiti in vari file di configurazione. Il sistema X Window viene spesso utilizzato per configurare dispositivi di input come mouse e tastiere. Questa lezione ha discusso i seguenti punti:
-
L’architettura del sistema X Window ad alto livello.
-
Quali file di configurazione sono usati per configurare un X Window System e la loro posizione nel filesystem.
-
Come usare la variabile d’ambiente
DISPLAY
su un sistema che esegue X. -
Una breve introduzione al protocollo di visualizzazione Wayland.
I comandi e i file di configurazione trattati sono stati:
-
Modifica del layout di una tastiera all’interno di un’installazione Xorg con
setxkbmap
elocalectl
. -
Il comando
Xorg
per creare un nuovo file di configurazione/etc/X11/xorg.conf
. -
Il contenuto dei file di configurazione di Xorg in:
/etc/X11/xorg.conf
,/etc/X11/xorg.conf.d/
e/usr/share/X11/xorg.conf.d/
. -
Il comando
xdpyinfo
per visualizzare informazioni generali su una sessione del server X in esecuzione.
Risposte agli Esercizi Guidati
-
Quale comando usereste per determinare quali estensioni Xorg sono disponibili su un sistema?
$ xdpyinfo
-
Hai appena ricevuto un nuovissimo mouse a 10 pulsanti per il tuo computer, tuttavia richiederà una configurazione aggiuntiva per far funzionare correttamente tutti i pulsanti. Senza modificare il resto della configurazione del server X, quale directory useresti per creare un nuovo file di configurazione per questo mouse e quale specifica sezione di configurazione verrebbe usata in questo file?
Le configurazioni definite dall’utente dovrebbero trovarsi in
/etc/X11/xorg.conf.d/
e la sezione specifica necessaria per questa configurazione del mouse sarebbeInputDevice
. -
Quale componente di un’installazione Linux è responsabile del mantenimento in esecuzione di un server X?
Il display manager.
-
Quale opzione della riga di comando viene utilizzata con il comando
X
per creare un nuovo file di configurazionexorg.conf
?-configure
Ricorda che il comando
X
è un collegamento simbolico al comandoXorg
.
Risposte agli Esercizi Esplorativi
-
Quale sarebbe il contenuto della variabile d’ambiente
DISPLAY
su un sistema chiamatolab01
usando una configurazione di visualizzazione singola? Supponiamo che la variabile d’ambienteDISPLAY
venga visualizzata in un emulatore di terminale sulla terza schermata indipendente.$ echo $DISPLAY lab01:0.2
-
Quale comando può essere utilizzato per creare un file di configurazione della tastiera per l’utilizzo da parte del sistema X Window?
$ localectl
-
In una tipica installazione Linux un utente può passare da un terminale virtuale all’altro premendo i tasti kbd:[Ctrl+Alt+F1] - kbd:[F6] su una tastiera. Ti è stato chiesto di configurare un sistema kiosk con un’interfaccia grafica e devi disabilitare questa funzione per evitare manomissioni non autorizzate del sistema. Decidi di creare un file di configurazione
/etc/X11/xorg.conf.d/10-kiosk.conf
. Utilizzando una sezioneServerFlags
(utilizzata per impostare le opzioni Xorg globali sul server), quale opzione dovrebbe essere specificata? Riguarda la paginaman
xorg (1)
per individuare l’opzione.Section "ServerFlags" Option "DontVTSwitch" "True" EndSection