Come far girare applicazioni grafiche nel sottosistema di Windows 10 per Linux (WSL2)

Come far girare applicazioni grafiche nel sottosistema di Windows 10 per Linux (WSL2)

Premessa

Il web è pieno di informazioni, di guide e di tutorial su come installare e far funzionare il sottosistema per Linux in Windows 10 (WSL2), e su come eseguire con esso anche programmi con interfaccia grafica (GUI). Io non sono un esperto nel campo e, quindi, ho poco da aggiungere a quanto si può già facilmente reperire tramite i comuni motori di ricerca.

D’altra parte, leggendo e seguendo alcune delle guide trovate, sono riuscito (con qualche difficoltà) a fare quasi tutto ciò che mi serviva, tranne eseguire programmi con interfaccia grafica: non c’era verso di far funzionare le cose.

Avere a disposizione la bash di Linux in Windows mi era già utile per alcune cose, ad esempio fare rapide operazioni su file dati in csv (comma-separated values) di prove sperimentali. Però volevo anche la possibilità di eseguire alcuni programmi con interfaccia grafica.

In particolare, anni fa usavo molto Gnumeric, che per molti aspetti mi risultava più vantaggioso rispetto ad Excel (almeno prima di riuscire a maneggiare i fondamenti di VBA e prima che uscisse la versione 2013). Purtroppo il rilascio di versioni compilate per Windows è stato abbandonato da anni, quindi mi sono trovato con numerosi file che non potevo più manipolare agevolmente.

Alla fine comunque ce l’ho fatta a far girare applicazioni grafiche su WSL2, e pertanto riporto passo-passo la sequenza di passaggi che mi hanno consentito di ottenere questo risultato, più che altro come promemoria per riassumere tutte le cose che ho letto in giro e i vari tentativi fatti.

1) Installare WSL2

Non è particolarmente difficile, le guide disponibili sono molte. Ad esempio, a questo link c’è quella dal sito ufficiale di Microsoft. I passaggi sono abbastanza chiari, bisogna prima abilitare due funzionalità aggiuntive, ossia Piattaforma Macchina Virtuale (non Hyper-V) e Sottosistema Windows per Linux (Fig. 1). Per fare ciò, si può digitare “funzionalità” sulla barra di ricerca, scegliendo poi la voce “Attiva o disattiva funzionalità di Windows“, oppure digitare direttamente “optionalfeatures” ed eseguire il comando che appare.

WSL2 Funzionalità aggiuntive per il sottosistema Windows per Linux | Additional features for the Windows subsystem for Linux
Figura 1. Attivazione delle funzionalità aggiuntive per il sottosistema Windows per Linux

Fatto ciò, il PC va riavviato (anche più volte) secondo le indicazioni, poi si va sul Microsoft Store e si cerca una distribuzione Linux (per es. Ubuntu, Fig. 2), si sceglie e si clicca su “Ottieni”. Completata l’installazione, si può avviarla dal menu di Windows, aprendo così il terminale di Linux in una nuova finestra.

WSL2 - Ricerca di Ubuntu in Windows Store | Search Ubuntu in Windows Store
Figura 2. Ricerca di Ubuntu in Windows Store

2) Installare, configurare e avviare un server X in Windows

Io personalmente ho provato Xming e VcXsrv, ho tenuto il secondo ma la procedura è praticamente identica. Scaricato ed eseguito il file di installazione, si deve lanciare XLaunch (si trova fra le applicazioni o compare digitandolo sulla barra di ricerca, vedi Fig. 3). Poi io ho lasciato l’impostazione di default nella prima schermata (“Select display setting“), ossia “Multiple windows” con display number –1, e nella seconda (“Select how to start clients“), ossia “Start no client“. Nella terza schermata (“Extra settings“) ho messo la spunta su tutte e tre le opzioni, ossia “Clipboard“, “Native openGL” e “Disable access control“. La disattivazione del controllo di accesso, alternativamente alla terza spunta, può essere ottenuta anche digitando “-ac” nella cella dei parametri aggiuntivi. Nella successiva e ultima schermata è possibile salvare su file la configurazione, o semplicemente cliccare su “Fine” per avviare il server X. La sequenza è mostrata nelle Figure 4a–4d.

WSL2 - Configurazione dell'Xserver via XLaunch 1 | X server configuration via XLaunch 1
Figura 3. Avviare XLaunch
WSL2 - Configurazione dell'Xserver via XLaunch 2 | X server configuration via XLaunch 2
Figura 4a. Prima schermata di configurazione del server X (impostazioni di default)
WSL2 - Configurazione dell'Xserver via XLaunch 3 | X server configuration via XLaunch 3
Figura 4b. Seconda schermata di configurazione del server X (impostazioni di default)
WSL2 - Configurazione dell'Xserver via XLaunch 4 | X server configuration via XLaunch 4
Figura 4c. Terza schermata di configurazione del server X: mettere la spunta su tutte le opzioni
WSL2 - Configurazione dell'Xserver via XLaunch 5 | X server configuration via XLaunch 5
Figura 4d. Ultima schermata di configurazione del server X: salvare su file, se lo si desidera, o cliccare direttamente su “Fine” per avviare il server

3) Verificare che il Firewall non stia bloccando l’applicazione

Per il corretto funzionamento, bisogna fare attenzione al fatto che, al primo avvio del server X, il Firewall di Windows chiede se bloccare o consentire l’applicazione. Il consenso, però, mi sembra venga applicato di default solo sul profilo relativo alle reti private, risultando bloccato nel profilo di rete pubblico. Invece, è necessario verificare le impostazioni e assicurarsi che, tra le regole delle connessioni in entrata, VcXsrv risulti consentito anche sul profilo pubblico, in particolare il protocollo TCP (Fig. 5).

WSL2 - Controllo dei permessi dei Firewall | Check of Firewall permissions
Figura 5. Controllo dei permessi dei Firewall: consentire VcXsrv anche sul profilo pubblico

4) Verificare l’indirizzo IP assegnato alla scheda WSL

Questo si può fare in vari modi, ad esempio via PowerShell oppure, come in Figura 6, tramite il prompt dei comandi di Windows dal quale digitare “ipconfig” e annotarsi l’indirizzo IPv4 relativo alla scheda che contiene “WSL” nella descrizione.

WSL2 - Recupero dell'indirizzo IP relativo a WSL | Retrieval of the IP address related to WSL
Figura 6. Recupero dell’indirizzo IP relativo a WSL

5) Avviare Linux ed esportare i correttamente i parametri

A questo punto, dalla riga di comando di Linux (Ubuntu nel mio caso) bisogna esportare il parametro LIBGL_ALWAYS_INDIRECT (solo se è stata messa la spunta su “Native opengl” nella configurazione del server X, vedi Fig. 4, altrimenti si può saltare) e il parametro DISPLAY, che deve corrispondere all’indirizzo IP identificato al passo precedente. Per fare ciò, basta digitare i comandi seguenti, premendo “invio” al termine di ciascuno. Ovviamente “NNN.NNN.NNN.NNN” va sostituito con l’IP corretto per la vostra macchina (vedi esempio in Fig. 7). Attenzione a maiuscole e minuscole perché, a differenza di Windows, il terminale di Linux è “case-sensitive“.

export LIBGL_ALWAYS_INDIRECT=1 [INVIO]
export DISPLAY=NNN.NNN.NNN.NNN:0 [INVIO]
WSL2 - esportazione dei parametri per il server X | export of parameters for the X server
Figura 7. Esportazione dei parametri per il server X

6) Verifica finale delle impostazioni

Se non ci sono problemi, si può verificare che tutto funzioni semplicemente eseguendo un’applicazione con finestra grafica precedentemente installata. Ad esempio, ho provato a lanciare il file manager precedentemente noto come Nautilus (Fig. 8).

WSL2 - Lancio di una applicazione grafica (Nautilus) | Launch of a graphical application (Nautilus)
Figura 8. Lancio di una applicazione grafica (Nautilus)

7) Aprire finestre multiple

Lanciando un programma con interfaccia grafica, questo apre una finestra ma tiene impegnato il terminale. Per avere programmi diversi su finestre multiple, una possibile soluzione consiste nell’eseguire i programmi in background, semplicemente aggiungendo una spazio e una “e commerciale” (&) al termine dell’istruzione di lancio.

8) Riferimenti

Qui sotto riporto i collegamenti ad alcune fra le varie guide e pagine web che ho consultato per capire come come fare.

Prima pubblicazione: 11 dicembre 2020 | Ultima modifica: 3 aprile 2021

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *