Cos’è e come funziona WSL, seconda versione del Sottosistema Windows per Linux che permette di eseguire le principali distribuzioni Linux in Windows.
Per i professionisti che usano sia Windows che Linux, avviare una distribuzione come Ubuntu Linux in Windows è una grande comodità. Fortunatamente, Microsoft ha introdotto con Windows 10 il Windows Subsystem for Linux (WSL) , che consente di eseguire un ambiente GNU/Linux direttamente in Windows, con tutti i comandi da terminale che amiamo di Linux.
Per gli utenti di Windows, lavorare con Linux senza abbandonare il sistema operativo è un enorme passo in avanti. Nel corso del tempo Microsoft ha implementato questa funzione con il rilascio di WSL 2, la seconda versione di questo strumento sviluppato da Microsoft, rappresenta un cambiamento di paradigma in termini di prestazioni: è più veloce, versatile e utilizza un kernel Linux ufficiale. Inoltre, gli aggiornamenti del kernel possono essere eseguiti sia manualmente che tramite Windows Update!
WSL 2 è anche retrocompatibile e permette di utilizzare entrambe le versioni del Windows Subsystem per Linux in parallelo, senza creare conflitti. A differenza di un layer di compatibilità, WSL 2 si appoggia alla virtualizzazione Hyper-V e al suo hypervisor. Grazie a software come Microsoft Hyper-V, è possibile creare macchine virtuali in Windows e installare al loro interno qualunque sistema operativo, comprese le principali distribuzioni Linux.
Il vantaggio di usare la virtualizzazione è che si possono eseguire uno o più sistemi operativi caricandoli mediante le macchine virtuali (guest) accanto alla versione di Windows che si usa come sistema host (“ospitante”).
Nata sui sistemi Windows Server, Hyper-V è una soluzione che è utilizzabile senza alcuna difficoltà anche nelle versioni client del sistema operativo Microsoft.
Perché eseguire Linux in Windows?
Come abbiamo detto poco fa utillizzare Linux su Windows è diventato possibile grazie a WSL. Questo significa che si possono utilizzare tutti i comandi Linux e gli script che sono stati creati per questa piattaforma, anche su Windows. In questo modo, è possibile installare i componenti server Linux su una macchina Windows e testare il software in modo rapido ed efficace.
WSL utilizza solo una piccola quantità di risorse e consente di interagire con il file system di Windows 10 e Windows 11, oltre che con una o più distribuzioni Linux. Non è necessario cercare e installare pacchetti software in versione Windows, ma si possono eseguire server web, script Python, PHP, ottenere certificati digitali gratuiti Let’s Encrypt, e altro ancora, utilizzando i comandi Linux abituali attraverso la finestra del terminale.
In passato, ci sono state alcune preoccupazioni sulla sicurezza, ma queste erano relative alla prima versione di WSL, che era solo un layer di compatibilità per Windows. Con WSL 2, invece, Linux è eseguito all’interno di macchine virtuali basate sulla tecnologia Hyper-V, il che significa che i rischi sono notevolmente inferiori. Tuttavia, è importante assicurarsi di installare le patch mensili di Windows per garantire la sicurezza del sistema.
Let’s go! Portiamo il sottosistema di Linux su Windows. (Prequisiti per l’installazione)
Per prima cosa, dobbiamo verificare se la nostra installazione di Windows soddisfa i prerequisiti di sistema. Per esempio, se stiamo utilizzando Windows 10, è necessario avere installata la versione 2004 o successiva. Se invece stiamo utilizzando Windows 11, qualsiasi versione andrà bene. Se la versione di Windows che stiamo utilizzando è inferiore a quelle elencate sopra, possiamo seguire la guida di Microsoft per macchine datate.
Successivamente, abilitiamo la virtualizzazione hardware nel BIOS seguendo questi passaggi:
- Spegniamo il PC e accediamo all’interno del BIOS e andiamo alla voce configurazione.
- Nell’utilità di configurazione del BIOS, successivamente andiamo sulla voce “Tecnologia di virtualizzazione”e abilitamo questa opzione.
- Salviamo le modifiche e usciamo dal BIOS, riavviando il PC.
- Il PC si riavvierà e applicherà le modifiche. Questo potrebbe richiedere del tempo, quindi attendiamo che il sistema sia completamente riavviato.
Dopo il riavvio, abilitiamo la funzione Hyper-V su Windows seguendo uno dei due metodi seguenti:
Metodo 1: Abilitazione di Hyper-V utilizzando la finestra di dialogo Funzionalità di Windows
- Premiamo “Win + R” per apriamo “Esegui”.
- Digitiamo “control” e facciamo clic su “OK” per aprire il Pannello di controllo.
- Nel Pannello di controllo, andiamo su “Programmi > Programmi e funzionalità”.
- Nel riquadro di sinistra, facciamo clic su “Attiva o disattiva le funzionalità di Windows”.
- Nella finestra di dialogo “Funzionalità di Windows”, selezioniamo “Hyper-V”. Se espandiamo Hyper-V, vediamo “Hyper-Strumenti di gestione” e “Piattaforma Hyper-V” selezioniamo e abilitiamo le voci seguenti opzioni.
- Assicuriamoci che entrambe le opzioni siano selezionate e facciamo clic su “OK”. Windows inizierà a installare e attivare le funzionalità opzionali sul nostro PC. Questo processo potrebbe richiedere del tempo per essere completato.
- Dopo il completamento, facciamo clic su “Riavvia ora” per riavviare e applicare le modifiche.
Sui sistemi dove già si utilizzava WSL (la prima versione della piattaforma) bisogna scaricare e installare il pacchetto aggiuntivo disponibile a questo indirizzo (cliccare sul link per “Scaricare il pacchetto di aggiornamento più recente del kernel Linux di WSL 2“).
Dopo riavviato il sistema apriamo una finestra del prompt dei comandi o di PowerShell con i diritti di amministratore e digitare quanto segue:
wsl --set-default-version 2
Così facendo Windows 10 utilizza per impostazione predefinita WSL 2 anziché la prima versione del Sottosistema Windows per Linux.
N.B In Windows 11 non c’è invece da fare nulla perché il sistema operativo usa per default WSL 2.
Metodo 2: Abilitazione di Hyper-V utilizzando il prompt dei comandi
- Premiamo il tasto “Win” e digitiamo “cmd”. Quindi, facciamo clic con il pulsante destro del mouse su “Prompt dei comandi” e selezioniamo “Esegui come amministratore”.
- Nella finestra del prompt dei comandi, digitiamo il seguente comando e premiamo Invio per eseguire:
DISM /Online /Enable-Feature /All /FeatureName:Microsoft-Hyper-V
- Lo strumento di manutenzione e gestione delle immagini di distribuzione inizierà ad abilitare la funzionalità Hyper-V e mostrerà lo stato di avanzamento nel prompt dei comandi.
- Una volta completata l’operazione , Riavviamo il PC.
Dopo il riavvio del PC, possiamo aprire e utilizzare Hyper-V Manager per creare macchine virtuali .
Installare WSL e usare Linux in Windows 10 e Windows 11
Adesso che è tutto pronto , passiamo all’ installazione di Linux in Windows 10 e Windows 11 con WSL basta seguire alcuni semplici passaggi. Le ultime versioni di WSL 2 sono compatibili anche con le soluzioni per la virtualizzazione di terze parti (Virtualbox, VMware,…) che possono essere contemporaneamente utilizzate sulla stessa macchina.
La prima cosa da fare è aprire la powershell come amministratori. Clicchiamo con il tasto destro sul simbolo di Windows. Selezioniamo Terminale Windows (Admin)
su Windows 11
Una volta aperto, digitiamo il comando che segue e premiamo invio
wsl --install
Questo comando attiverà tutte le componenti opzionali di Windows necessarie e scaricherà l’ultima versione del kernel ed imposterà in automatico WSL 2
come versione. Infine installerà di deafult Ubuntu 20.04
come distribuzione Linux.
Come fare per non installare Ubuntu in automatico?
Come detto prima, la distribuzione installata di default con il comando wsl --install
sarà Ubuntu 20.04. Per evitare che questo accada, possiamo specificare quale distribuzione vogliamo installare modificando il comando iniziale con questo:
wsl --install -d <Nome della distribuzione>
Dove ovviamente dovremo sostituire <Nome della distribuzione>
con ciò che vogliamo installare. Per vedere tutte le opzioni disponibili, ci basterà lanciare il comando:
wsl --list --online
Se ad esempio abbiamo appena terminato di vedere l’ultima puntata di Mr. Robot e vogliamo installare Kali Linux
ci basterà lanciare il comando:
wsl --install -d kali-linux
O per Debian ad esempio:
wsl --install -d Debian
Prima installazione
Seguendo la procedura (semplice) per configurare Ubuntu durante il suo primo avvio (ma questa operazione è valida anche per le altre versione). Come prima cosa dopo aver lanciato il comando wsl --install
ci vorrano alcuni secondi (o minuti, dipende dalla connessione) prima il sistema finisca di scaricare tutti i file necessari.
Una volta terminato il download si aprirà una finestra con una console di Ubuntu che ci chiederà come prima cosa di inserire uno username: “Enter new UNIX name
“.
Scegliamone uno semplice, evitiamo caratteri speciali e maiuscole. Digitiamolo e premiamo invio.
Una volta scelto, dovremo inserire la password che vogliamo utilizzare (ci verrà chiesto di inserirla 2 volte). Ricordiamoci che siamo su Linux, è normale che quando digitiamo la password non si vedano gli asterischi comparire ad ogni tasto premuto. Inseriamola normalmente e premiamo invio una volta terminato, ed ecco che dopo qualche secondo sarà tutto pronto!
NOTA: Questa password e questo username saranno esclusivi del sottosistema Linux, non avranno nulla a che vedere con quelli di Windows. Questo account che setteremo durante la prima installazione avrà i privilegi di amministratore, sarà quindi possibile ad esempio utilizzare comandi sudo
Inoltre, se installiamo più distribuzioni, queste saranno separate ed ognuna avrà il proprio username e la propria password
Gestire la password
Se volessimo cambiare password, utilizziamo il comando passwd
dentro il WSL. Ci verrà chiesto di inserire la password attuale e successivamente di inserire (due volte) la nuova che desideriamo utilizzare.
Se invece ci fossimo scordati la nostra password, da PowerShell come amministratori digitiamo il comando wsl -u root
(nel caso di una distribuzione specifica, ad esempio Debian, usiamo wsl -d Debian -u root
). Una volta aperta la schell coi permessi di root, digitiamo passwd <username>
, sostituendo ovviamente <username>
con il nostro nome utente settato all’inizio. Per configurare la nuova password seguiamo le istruzioni a schermo.
Aggiorniamo i pacchetti (Ubuntu e Debian-based)
Come prima cosa controlliamo che tutto sia aggiornato. Dal terminale scriviamo questo comando e premiamo invio:
sudo apt update && sudo apt upgrade -y
Ci chiederà di inserire la passowrd che abbiamo scelto in precedenza (anche questa volta, scriviamo anche se non compaiono gli asterischi). Premiamo invio una volta fatto e lasciamolo aggiornare. L’operazione potrebbe richeidere diversi minuti
Una volta terminato, possiamo iniziare ad utilizzare come preferiamo il nostro sottosistema Linux!
Comandi WSL per gestire le distribuzioni Linux installate
Aprendo il prompt dei comandi di Windows (Windows+R, digitare cmd) oppure utilizzando una finestra PowerShell (Windows+X quindi selezionare Windows PowerShell in Windows 10 o Terminale in Windows 11) è possibile impartire alcuni comandi per gestire le distribuzioni Linux. Vediamo di seguito quelli principali.
– Elencare le distribuzioni installate in WSL: wsl -l -v
Il comando visualizza la lista delle distribuzioni installate insieme con i rispettivi nomi identificativi. Viene riportata anche la versione di WSL in uso.
Con il comando wsl -l –running viene restituito solo l’elenco delle distribuzioni Linux che risultano al momento in esecuzione tramite WSL.
– Impostare una distribuzione come predefinita: wsl -s
Il comando va utilizzato facendo seguire il nome di una distribuzione Linux installata con WSL. In questo modo è possibile impostarla come predefinita.
– Avviare una distribuzione: wsl -d
Facendo seguire al comando il nome della distribuzione Linux, è possibile avviarla con WSL. È un approccio alternativo rispetto all’utilizzo dell’icona visualizzata nel menu Start.
– Arrestare l’esecuzione di una distribuzione: wsl -t
Per interrompere l’esecuzione di una distribuzione Linux caricata con WSL basta eseguire questo comando seguito dal nome della distribuzione da arrestare.
– Creare un backup di una distribuzione: wsl –export
Quando si lavora con le distribuzioni Linux in WSL capita di voler salvare tutto il contenuto di una distribuzione per poi ripristinarlo successivamente. Si tratta di un’accortezza utile nel caso in cui si effettuassero modifiche e configurazioni importanti: creando un backup non si rischierà di perdere il lavoro svolto e si potrà eventualmente ripristinarlo nel caso in cui si svolgessero interventi inadeguati.
Al comando deve essere fatto seguire il nome di una distribuzione Linux installata e il nome del file .TAR all’interno del quale la configurazione deve essere salvata.
– Importare il backup di una distribuzione: wsl –import
Per ripristinare una distribuzione Linux della quale si era creato un backup in precedenza, basta usare il comando seguito dal nome da assegnare alla distribuzione e dal riferimento al file TAR.
– Disinstallare una distribuzione: wsl –unregister
La disinstallazione di una distribuzione Linux caricata in WSL può essere richiesta usando l’interfaccia di Windows, come abbiamo visto in precedenza, ma anche da riga di comando avendo ovviamente cura di specificare il nome della distribuzione da rimuovere.
Comandi utilizzabili in una distribuzione Debian, Ubuntu e derivate
Tutti i comandi Linux funzionano perfettamente con le distribuzioni caricate in WSL. Nel caso di Ubuntu, per esempio, si possono usare i seguenti per gestire i pacchetti software:
– sudo apt update per scaricare informazioni aggiornate sui pacchetti disponibili
– sudo apt upgrade per aggiornare tutti i pacchetti Linux all’ultima versione disponibile
Si possono anche combinare i comandi per eseguire in un colpo solo le due operazioni:
sudo apt update && sudo apt upgrade -y
– sudo apt install seguito dal nome del pacchetto per installare un’applicazione Linux (esempio sudo apt install python-minimal)
– sudo apt remove seguito dal nome del pacchetto per rimuovere un pacchetto Linux precedentemente installato
– sudo apt search seguito dal termine che si desidera cercare all’interno degli archivi dei pacchetti software (ad esempio per individuare il nome esatto del software che s’intende installare).
Installare e lanciare applicazioni grafiche (GUI)
Finalmente WSL supporta anche applicazioni Linux con GUI (sia Wayland che X11). Molti di noi già si staranno mettendo le mani nei capelli pensando che le prestazioni saranno scadendi, e invece non è affatto così. Microsoft ha fatto un lavoro di ottimizzazione perfetto, le performance sono praticamente native. Adesso è possibile
- Lanciare app Linux direttamente dal menù di Windows
- Fissare App Linux alla task bar
- Usare
Alt+Tab
per cambiare tra app Linux e Windows - Copia e incolla tra app Linux e Windows
Come attivarlo
Come prima cosa, controlliamo se funziona senza dover fare niente.
Vediamo un esempio con il famoso editor di testo gedit
. Per installarlo, digitiamo
sudo apt install gedit -y
Una volta che avrà terminato, ci basterà scrivere dal terminal il nome dell’applicazione e premere invio
gedit
Se si aprirà una finestra con un editor di testo, abbiamo questa funzione già attiva.
Se non dovesse funzionare, apriamo la PowerShell come amministratori e digitiamo
wsl --update
Una volta terminato digitiamo
wsl --shutdown
Microsoft consiglia anche di installare i driver per la vGPU. Abilitando la GPU virtuale (vGPU) possiamo beneficiare del render accellerato con OpenGL
NOTA: Il passaggio di installare i Driver è facoltativo. Facciamolo solo se abbiamo bisogno di render delle app molto responsivo, per programmi come gedit
e Nautilus
non è necessario. È anche possibile utilizzare l’accelerazione CUDA (nel caso di Nvidia) tramite WSL, ma lasciamo questi dettagli a quella piccola fetta di utenti che ne necessitano.
Ma in realtà, serve davvero questa feature? La risposta è si, ma non per tutti. La maggior parte degli utenti che utilizza Linux, lo fa come sistema secondario. Quindi spesso cercando di usare su Linux app che conoscono su Windows. Questi non andranno di certo a voler utilizzare programmi tramite GUI per Linux, quando già si trovano su Windows e hanno tutto quello di cui hanno bisogno.
La realtà è che ci sono alcuni programmi per Linux, essenziali per molti utenti, che non esistono per Windows. L’esempio più eclatante è virt-manager
, un programma potentissimo sviluppato da RedHat per gestire più macchine virtuali con molta semplcità. Tramite WSL ci basterà installarlo con il comando
sudo apt install virt-manager -y
e lanciarlo con
virt-manager
Consigli utili: come usarlo al meglio
Se siamo utenti Linux attivi, sappiamo già di cosa abbiamo bisogno. Se invece la nostra esperienza con Linux è stata molto sporadica o anche nulla, in questa sezione impareremo a prendere la mano con bash
, il linguaggio con cui interagiamo con il terminale.
Comandi base UNIX
Iniziamo con una delle funzioni che ci sarà sempre utile in Bash
: l’autocompletamento. premendo TAB
sulla tastiera, il comando che stiamo digitando verrà completato nel modo suggerito. Nel caso in cui avessimo più opzioni disponbili, clicchiamo due volte TAB
per vedere tutte le opzioni disponibili
Files e directory
ls
ci mostra in modo alfabetico tutti i file presenti nella directory in cui ci troviamo
Tutti questi comandi che vedremo hanno un loro manuale! Se vogliamo avere informazioni dettagliate sul loro funzionamento e sulla sintassi, digitiamo <nome comando> --help
(o per una spiegazione più nel dettaglio, man <nome comando>
). Ad esempio ls --help
ci farà scoprire che possiamo utilizzare svariati flag, ovvero aggiunte al comando ls
che richiamiamo con il -
immeditamente dopo. Ad esempio utilizzando il comando ls -lah
al posto di ls
vedremo delle informazioni in più. Il flag l
dice al terminale di mostrare i file in lista, il flag a
sta per all, mostra anche i files nascosti (quelli che inzianiano con un .
), infine h
sta per human readable.
cd
ci permette di spostarci da una directory all’altra
Se per esempio ci troviamo nella home
e vogliamo spostarci all’interno della cartella Downloads
, dovremo scrivere cd Donwloads
, e così via per qualsiasi altra sotto cartella presente. Per tornare indietro di una cartella, utilizziamo il comando cd ..
o direttamente cd
se vogliamo tornare alla home
rm
ci permette di cancellare files (per i precisini: rimuove l’etichetta di un determinato inode; non useremo questi tecnicismi) e directory, ma attenti alla sintassi!
Ad esempio il comando rm mtt.txt
rimuvoverà il file mtt.txt
(ovviamente se esiste e se siamo nella directory corretta). Facciamo un esempio più pratico, ci troviamo nella home e vogliamo cancellare la cartella compiti
. Il comando rm
da solo non funzionerà, dovremo usare il flag rm -rf compiti
, dove r
sta per recoursive e f
per force.
cp
di permette di copiare file e cartelle da una directory all’altra.
La sintassi è semplice: cp sorgente destinazione
. Se ad esempio avessimo il file starwars8.mp4
nella home e volessimo spostarlo dentro /video/orrendi
allora dovremo dare il comando cp starwars8.mp4 /video/orrendi
. Ma attenzione! Questo comando ha bisogno del flag -r
subito dopo cp
per spostare cartelle.
mkdir <nome>
ci permette di creare cartelle.mv
ci permette di rinominare file e cartelle all’interno della stessa directory o di spostarli da una directory all’altra. La sintassi è come quella dicp
vista prima:mv vecchio nuovo
touch
ci permette di creare file. Scrivendotouch mtt.txt
avremo creato un file di testo chiamato mtt nella directory in cui ci troviamo
Altri comandi utili che non tratteremo ma che è consigliato approfondire sono wget
, cat
, grep
, echo
, find
Installare, aggiornare e rimuovere i pacchetti
Su Linux le applicazioni vengono installate tramite un gestore di pacchetti, nel caso di Ubuntu viene utilizzato il package manager di Debian, apt
(Advanced Packaging Tool).
- Installare un pacchetto
Tramite apt possiamo installare quasi tutti i programmi che ci vengono in mente, sicuramente i più comuni. La sintassi è semplice
sudo apt install nomepacchetto
Per installare ad esempio il pacchetto wget
(utile per scaricare file da link web) ci basterà scrivere sudo apt install wget
e premere invio. Dopo qualche secondo ci verrà chiesto di confermare se vogliamo installarlo, per procedere premiamo invio o in alternativa digitiamo Y
e poi premiamo invio
- Aggiornare tutti i pacchetti
Questo è il comando che abbiamo visto precedentemente, non entriamo nel dettaglio del suo funzionamento. Ci basterà dare
sudo apt update && sudo apt upgrade
O in alternativa eseguiamo prima sudo apt update
ed una volta terminato sudo apt upgrade
. Anche qui ci verrà chiesta conferma prima di un qualsiasi aggiornamento.
- Disinstallare un pacchetto
Per eliminare definitivamente un applicazione installata la sintassi è la seguente
sudo apt purge --autoremove nomepacchetto
Non scordiamo che Linux è l’ambiente perfetto per chiunque voglia cimentarsi nella programmazione e nello sviluppo software, a qualsiasi livello. Impariamo ad utilizzarlo, ci porterà grossi benefici.
Gli script in bash
L’arma più potente del terminare Linux è proprio bash, un linguaggio ostico all’inzio, ma davvero potente quando lo si impara ad usarlo. Vediamo un esempio che in periodi di lezioni online, può essere utile a molti
- Convertire tutti i file video presenti in una directory
Supponiamo di avere una cartella piena di video .mkv
e di volerli convertire in .mp4
. La maniera più semplice è tramite ffmpeg
. Per installarlo digitiamo
sudo apt install ffmpeg
Una volta fatto, utilizzando cd
spostiamoci nella cartella desiderata ed eseguiamo il seguente comando
nano convertitore.sh
Si aprirà un editor di testo non grafico (il mouse non funziona!). Copiamo il seguente codice
for i in *.mkv;
do name=`echo "$i" | cut -d'.' -f1`
echo "$name"
ffmpeg -i "$i" "${name}.mp4"
done
ed incolliamolo nel terminale con CTRL + Shift + V
. Una volta fatto premiamo CTRL + x
ed infine y
. Ora abbiamo creato un file con all’interno quel codice. Per eseguirlo lanciamo il comando
sh convertitore.sh
In alternativa, possiamo renderlo eseguibile tramtie chmod +x
, ma lasciamo i dettagli a chi è interessato.
NOTA: Ovviamente richiederà tanto tempo in base alla dimensione ed alla quantità dei file!
I crediti di queto codice vanno ovviamente a Stack Overflow!
Conclusione
WSL 2 è Linux dentro Windows, almeno in gran parte. Questa versione così rifinita ha reso Windows più alla portata degli utenti esperti e degli sviluppatori che per un motivo o per un altro, non possono utilizzare interamente Linux come sistem