Impara Linux 101: installare e configurare X11

Il file di configurazione di X Window

Nei primi giorni di X, configurare uno schermo significava avere una vasta conoscenza delle capacità dello schermo e la capacità di esprimere informazioni non solo sulla risoluzione, ma anche sui valori di sincronizzazione orizzontale e verticale, sulla profondità di colore e così via. Dall’avvento della Video Electronics Standards Association (VESA) e dei protocolli Display Data Channel (DDC) che permettono a un display di comunicare queste capacità a una scheda grafica e quindi a un computer, la configurazione è diventata molto più automatica. Questo è una fortuna perché ora ci aspettiamo di poter portare il nostro notebook ovunque e semplicemente collegare un monitor o un proiettore esterno disponibile.

Anche la configurazione del mouse, della trackball o della tastiera è diventata più automatica. Generalmente, basta collegare il dispositivo, spesso attraverso una connessione USB e funziona.

Tuttavia, come per la maggior parte delle cose in Linux, c’è un meccanismo di configurazione sottostante che è possibile utilizzare. Infatti, l’implementazione Xorg di X ottiene informazioni di configurazione da diverse fonti. Il file di configurazione principale è xorg.conf, insieme ai file inclusi nella directory xorg.conf.d. Questi si trovano solitamente in /etc/X11. Ulteriori configurazioni possono provenire da opzioni a riga di comando, variabili d’ambiente, rilevamento automatico e fallback default.

Il file di configurazione xorg.conf e i file nella directory xorg.conf.d sono organizzati in sezioni che possono essere specificate in qualsiasi ordine. Il formato generale delle sezioni è mostrato nel listato 1.

Lista 1. Layout delle sezioni in xorg.conf

 Section "SectionName" SectionEntry ... EndSection

Mostra di piùMostra di più icona

Xorg con l’opzione -configure. Il comando Xorg è in realtà un collegamento simbolico dal comando X che di solito si trova in /usr/bin. È necessario eseguire il comando Xorg come root e assicurarsi che nessun server X sia in esecuzione. Un modo per farlo è quello di modificare la stanza di GRUB2 per avviare in modalità multi-utente senza X. Tradizionalmente, questo è il runlevel 3. Modifica semplicemente la voce del menu di avvio che desideri avviare e aggiungi un 3 alla fine della linea `linux boot/vmlinuz…’ come illustrato nella Figura 2.

Figura 2. Avvio in modalità multi-utente senza X

Se stai usando systemd, puoi usare systemd.unit=multi-user.target invece di 3.

Xorg -configure carica i driver di dispositivo disponibili e i probe per l’hardware. Funziona su molti sistemi, ma ha problemi su alcuni sistemi secondo la pagina man. La documentazione di Fedora raccomanda di usare la visualizzazione :1 invece di quella predefinita :0, quindi puoi provare Xorg :1 -configure se il semplice Xorg -configure non funziona.

Un file di esempio generato con questo metodo sul mio sistema openSUSE Tumbleweed è mostrato nel listato 2.

Lista 2. Esempio xorg.conf

Assumendo che il tuo display supporti il DDC, come la maggior parte dei display moderni, puoi usare il comando xrandr per interrogare le sue capacità. Il listato 4 mostra le informazioni drm per un notebook con un display collegato e l’output corrispondente di xrandr.

Lista 4. Utilizzo di xrandr per determinare le capacità del display

XkbVariant definisce quali varianti dei due layout dovrebbero essere usate. Nel caso del layout us viene usata la sua variante predefinita. Nel caso del layout sk viene usata la sua variante qwerty. L’opzione XkbOptions indica che gli utenti possono passare da un layout all’altro usando il tasto CapsLock.

Lista 5. Aggiornamento della configurazione della tastiera

localectl. Comunque, localectl status mostra che queste modifiche sono state prese quando il sistema è stato riavviato, come mostrato nel listato 6.

Lista 6. Mostrare lo stato della tastiera usando localectl

I display manager rientrano in tre categorie generali.

  1. I display manager dividono lo schermo in piastrelle e scrivono ogni piastrella separatamente dalle altre. Le prestazioni sono generalmente buone.
  2. I gestori di finestre impilano le singole finestre sullo schermo in una lista nota come ordine Z. Quando una nuova finestra viene messa a fuoco, viene posizionata in cima all’ordine Z e tutte le finestre inferiori vengono ridisegnate. Questo può essere lento, in particolare per i cambiamenti minori, ma sono state sviluppate diverse ottimizzazioni.
  3. I gestori di finestre in composizione sono di solito gestori di finestre in stack che mantengono un buffer per ogni finestra e poi le combinano in un unico buffer per la visualizzazione senza bisogno di ridisegnare ogni singola finestra e poi sovrascriverla con la successiva più alta nell’ordine Z. Questo permette anche effetti come la trasparenza.

La figura 3 mostra un esempio di I3 tiling window manager. Si inizia con un desktop vuoto e poi si crea una finestra come quella di un terminale. Questa occupa l’intero schermo. Si può poi aprire un’altra finestra che divide il tile originale in due. Se poi ne aprite un’altra, lo schermo viene diviso in tre piastrelle. Puoi scegliere di creare nuove mattonelle orizzontalmente o verticalmente. In questo esempio, ho scelto di dividere verticalmente il riquadro centrale originale contenente il gioco del sudoku, per creare un’altra piccola finestra del terminale. Poi l’ho divisa orizzontalmente per aggiungere una finestra xlcock.

Figura 3. Il window manager I3 tiling

Di solito puoi spostare le finestre tra i desktop virtuali, il che aiuta molto se hai più finestre grandi aperte.

Puoi aprire l’elenco delle applicazioni disponibili come un menu nella parte superiore dello schermo e selezionare le applicazioni con un lento scorrimento orizzontale o più rapidamente digitando parte o tutto un nome come ‘xclock’.

In contrasto con i gestori di finestre in tiling, i gestori di finestre in stacking vi permettono di avere finestre di qualsiasi dimensione supportata dal vostro display, incluse le finestre che possono sovrapporsi al bordo del display. La Figura 4 è un esempio del window manager Openbox che mostra quattro finestre sovrapposte e il menu che permette di aprire nuove applicazioni.

Figura 4. Il gestore di finestre sovrapposte Openbox

I gestori di finestre sovrapposte di base lavorano sul principio di ridisegnare tutte le finestre sul vostro schermo quando la finestra con il focus cambia o viene spostata, chiusa o ridimensionata. Questo può risultare in molteplici riscritture di varie aree dello schermo mentre l’intero ordine Z viene elaborato. Si possono usare algoritmi per minimizzare la quantità di riscritture non necessarie.

Un miglioramento dell’idea di base dell’impilamento è un gestore di finestre in compositing. Un tale gestore di finestre mantiene un buffer dei contenuti di ogni finestra e li fonde o li compone in una singola finestra. Solo le parti aggiornate devono poi essere scritte nel buffer della scheda video. Compiz è un esempio di window manager composito, mentre gli ambienti desktop come KDE e GNOME usano anch’essi window manager compositi.

Un ambiente desktop generalmente fornisce un’esperienza utente completa, includendo cose come un saluto di accesso grafico, menu di sistema grafici, un vassoio per visualizzare widget come l’ora del giorno, icone di applicazioni aperte, e così via. Una suite di applicazioni integrate di solito fornisce un’esperienza coerente per un utente. La maggior parte dei window manager sono molto più leggeri di un ambiente desktop completo.

La figura 5 illustra il concetto di trasparenza in un window manager o ambiente desktop composito. Tenete premuto il tasto sinistro del mouse (tasto 1) sulla barra del titolo della finestra del terminale quando vi preparate a spostarla. La visualizzazione cambia per mostrare quali finestre sono sotto quella particolare area. Questo potrebbe aiutarti a spostare una finestra dall’essere sopra un’altra quando vorresti che entrambe fossero visibili.

Figura 5. Trasparenza con il desktop KDE Plasma

La figura 6 illustra GNOME 3.28 su Fedora. Facendo clic sul pulsante Attività in alto a sinistra di questa schermata si apre un elenco iconizzato di preferiti sul lato sinistro dello schermo e mostra un insieme di applicazioni in esecuzione come piccole finestre. Puoi cliccare su un preferito, cliccare su una piccola finestra, o usare la casella di ricerca in cima allo schermo per cercare un programma. In questo particolare esempio, ho cliccato il giorno e l’ora nella barra superiore per aprire un widget che mostra alcuni messaggi, come gli aggiornamenti disponibili o l’ultimo comando completato, così come ulteriori informazioni su data e ora. Le icone in alto a destra permettono di accedere a funzioni come il volume dell’altoparlante, le impostazioni di rete, le opzioni di accessibilità e le opzioni di spegnimento, logout o riavvio.

Figura 6. Attività e widget di Fedora GNOME

Ho detto che gli ambienti desktop spesso contengono applicazioni integrate per aiutare a gestire vari aspetti del desktop o del sistema. La Figura 7 mostra il dialogo delle impostazioni di Fedora GNOME 3.28 aperto alle impostazioni di visualizzazione. Questo esempio è di un notebook con un monitor Viewsonic esterno. Le scelte comuni in questo caso sono di unire i due schermi come un unico display o di riflettere il contenuto di uno schermo sull’altro. In questo caso, abbiamo scelto di unire i due schermi con lo schermo integrato logicamente a destra del monitor esterno.

Figura 7. Finestra di dialogo delle impostazioni dello schermo di Fedora GNOME

Come si può cambiare la risoluzione dello schermo nel file xorg.conf, si può anche dire al compositore di scalare la finestra al 100% o al 200%. Il ridimensionamento disponibile può dipendere dalla dimensione del monitor e dal particolare desktop che si sta utilizzando. Ho anche un monitor UHD (4K) e occhi che non possono leggere la risoluzione nativa del testo molto piccola. Quindi su quel monitor, uso spesso un fattore di scala del 200%.

Nota che le modifiche fatte usando le impostazioni di GNOME non aggiornano xorg.conf. Invece queste impostazioni sono salvate nel file .config/monitors.xml nella tua directory home. GNOME mantiene anche altre impostazioni del display e della tastiera nel database dconf che si può anche trovare sotto la propria directory home. Avendo queste impostazioni nella tua directory home, esse si applicano solo a te. Altri utenti potrebbero avere impostazioni diverse.

Se hai installato più ambienti desktop o gestori di finestre potresti chiederti come scegliere tra questi. Puoi avviare in modalità multi-utente come descritto in precedenza in questo tutorial e poi eseguire un comando come startx per avviare X con il gestore appropriato. Se hai un ambiente desktop come GNOME che fornisce un pannello di benvenuto, probabilmente avrai una scelta di impostazioni nella schermata di benvenuto. La Figura 8 mostra le scelte installate sul mio sistema Fedora 28.

Figura 8. Fedora GNOME 3 greeter con selezione WM

Gestire l’accesso al server X e visualizzare le applicazioni in remoto

Finora, hai visto esempi di X in esecuzione su un computer desktop con uno o forse due monitor. Un server X tratta un singolo display come un insieme di monitor che condividono un insieme comune di dispositivi di input.

Così il notebook mostrato in Figura 7 ha un solo display, anche se ha il monitor integrato e un monitor esterno. In questo esempio, i due monitor lavorano come se fossero uniti. Questo crea un unico schermo logico che permette di spostare le finestre tra i monitor, o anche di dividerle. I sistemi multiutente di solito hanno schermi multipli, quindi hai bisogno di un modo per descriverli.

X usa un nome in tre parti per gli schermi della forma hostname:displaynumber.screennumber dove hostname è il nome host del computer, displaynumber è un numero che inizia con 0 che descrive lo schermo particolare, e screennumber si applica se due o più monitor sono trattati come schermi separati piuttosto che come un singolo schermo logico. Sia hostname che screennumber possono essere omessi, quindi la notazione di visualizzazione più comune che vedrete è :0. Puoi vedere l’impostazione corrente nella variabile d’ambiente DISPLAY come mostrato nel listato 7.

Lista 7. La variabile d’ambiente DISPLAY

ian@attic5-u18:~$ echo $DISPLAY:0

Mostra di piùMostra di più icona

DISPLAY permetta a qualsiasi utente di scrivere output sul vostro schermo, ma X ha alcune limitazioni nel controllo degli accessi. Ti mostrerò tre modi per connetterti a un server X.

  1. Usa ssh con X forwarding
  2. Usa Xauthority e xauth
  3. Usa il controllo di host o utente con xhost

Il modo più sicuro per usare X su un altro schermo è usare X forwarding (talvolta chiamato tunneling). Questo deve essere abilitato sul server SSH a cui ti connetti con la linea X11Forwarding yes nel file di configurazione, /etc/ssh/sshd_config. Devi anche abilitarlo sul client specificando l’opzione -X (la X maiuscola) nel tuo comando ssh. Il listato 8 confronta cosa succede se uso su - jane per passare all’utente jane sul mio sistema e poi uso ssh -X jane@localhost. In entrambi i casi, cerco di eseguire il comando xclock per visualizzare un piccolo orologio sul mio schermo.

Lista 8. X forwarding

DISPLAY è impostata su localhost:10.0. Il server sshd sta effettivamente creando un server X per te sul sistema di destinazione. Non vuoi che questo interferisca con qualsiasi server X reale sul sistema. Quindi il file di configurazione, /etc/ssh/sshd_config, contiene una linea X11DisplayOffset 10 per specificare l’offset iniziale (da 0) per i server X su ssh. Il valore predefinito è 10, che di solito è sufficiente per una workstation a singolo utente, ma potrebbe essere necessario aumentarlo in un sistema multiutente. Ad una seconda connessione ssh al server verrebbe assegnato il display 11 e così via.

Il secondo metodo per permettere ad altri di connettersi ad un server X è il metodo Xauthority. Il file Xauthority contiene informazioni di autorizzazione utilizzate quando ci si connette a un server X. La variabile d’ambiente XAUTHORITY specifica il nome del file attualmente in uso, sia un file generato dal sistema come /run/user/1000/gdm/Xauthority sul mio sistema Ubuntu 18, sia il proprio file .Xauthority.

Usa il comando xauth per elencare, estrarre o unire nuove autorità. usa l’opzione -f per specificare un file Xauthority diverso da quello nella tua variabile d’ambiente XAUTHORITY. Puoi specificare i comandi xauth sulla linea di comando, o avviarlo e usare i comandi dall’interno del programma. Il listato 9 mostra alcuni esempi ed estrae la mia autorizzazione per il display :0 in un file chiamato auth-ian.

Lista 9. Estrazione di informazioni di autorità usando xauth

XAUTHORITY. L’utente jane può quindi visualizzare le applicazioni sul mio display.

Lista 10. Unire le informazioni di autorità usando xauth

xhost. Su una stazione di lavoro, si può ben usare questo per consentire di aprire programmi grafici mentre si esegue come un altro utente. Il comando xhost senza opzioni visualizza la lista di controllo degli accessi corrente. Usa l’opzione + con un nome per permettere ulteriori sistemi o utenti. Il listato 11 mostra come aggiungere l’utente john sul mio sistema locale alla lista di controllo degli accessi e poi mostra l’utente john che apre il programma grafico xclock.

Listing 11. Usando xhost per abilitare un singolo utente locale

xhost +local: come mostrato nel listato 12. Notate i due punti (:) alla fine di local.

Listing 12. Usare xhost per abilitare tutti gli utenti locali non in rete

– invece di + per rimuovere le voci che hai abilitato. Vedi le pagine man o info di xhost per ulteriori opzioni.

Per la sicurezza dovresti usare il tunneling SSH o forse un’altra soluzione come Virtual Network Computing (VNC) piuttosto che xauth o xhost. VNC è al di fuori dello scopo di questo tutorial ma fornisce prestazioni migliori del tunneling SSH.

Quando le cose vanno male

Con così tante possibili fonti di informazioni sulla configurazione di X devi sapere dove cercare le informazioni di log. Gli errori relativi alla tua sessione X individuale possono essere localizzati in .xsession-errors o possibilmente in .xsession-errors-:0 nella tua home directory. Il suffisso :0 è per gli errori sul display :0.

Il log principale di X si trova in /var/log. Il nome è solitamente /var/log/Xorg.0.log, dove 0 è il tuo numero di visualizzazione. Il numero sarà diverso se non stai usando il display :0.

Wayland, un nuovo window manager composito

Di recente, è stato sviluppato un nuovo display server e protocollo di compositing chiamato Wayland. In questo modello le applicazioni creano da sole il contenuto delle loro finestre in un buffer fuori dallo schermo. Il compositore e il server sono integrati. L’intento di Wayland è quello di fornire una soluzione più semplice ed efficiente di X. Wayland per lo più riutilizza i driver esistenti e l’infrastruttura che rende il progetto possibile.

In contrasto con X, Wayland non ha un design trasparente alla rete. Altre soluzioni come VNC possono essere utilizzate se è necessaria la visualizzazione remota delle finestre.

Weston è un compositore di riferimento che implementa Wayland. GNOME, KDE, Enlightenment e molti altri gestori di finestre ora supportano Wayland. Anche i toolkit come Qt 5 e GTK+ supportano Wayland. Al momento della scrittura (dicembre 2018) sia Fedora che Ubuntu hanno Wayland come display server predefinito.

Il server Xorg ora include XWayland che permette alle applicazioni X esistenti di funzionare con un compositore Wayland.

La maggior parte delle implementazioni attuali hanno ancora una scelta di eseguire X o Wayland per ogni sessione. Vedi la Figura 7 per un esempio di come il GMS greeter ti permette di scegliere un tipo di sessione. Su Fedora l’impostazione predefinita è di eseguire GNOME su Wayland.

Si può anche controllare in fase di esecuzione senza dover fare il login. Se stai eseguendo Wayland, la variabile d’ambiente WAYLAND_DISPLAY sarà impostata. Sui sistemi che usano systemd, potete usare il comando loginctl per determinare il vostro numero di sessione di login e poi usarlo di nuovo per determinare il vostro tipo di sessione. Il listato 13 mostra questi strumenti, prima su un sistema Fedora 28 che usa Wayland e poi su un sistema Ubuntu 18 che usa Xorg.

Lista 13. Determinare se state usando X o Wayland

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.