Come installare e utilizzare Linux su Windows (WSL 2)
18 ottobre 2021
1634562936000
Il WSL, acronimo di `Windows Subsystem for Linux`, ci permette di eseguire un ambiente GNU/Linux direttamente in Windows, con tutti (o quasi) i comandi da terminale che tanto ci fanno amare il sistema del pinguino.
La seconda versione di questo strumento sviluppato da Microsoft, il WSL 2
è più che un semplice major upgrade, si tratta di un cambio di paradigma in termini di prestazioni: è più veloce, versatile e sopratutto utilizza un vero kernel Linux. Inoltre, gli aggiornamenti del kernel possono essere eseguiti sia manualmente, che tramite Windows update! Questa versione è stata sviluppata con due obiettivi principali in mente: miglioramento sostanziale delle prestazioni del filesystem ed una (quasi) totale “comunicazione” tra i due sistemi operativi.
WSL 2 è anche retro-compaitibile, se così si può dire. Le singole distribuzioni Linux (scaricabili dal Microsoft Store, oltre che da teminale, ma lo vedremo dopo) possono essere aggiornate o downgradate in qualsiasi momento. Inoltre è possibile utilizzare in parallelo entrambe le versioni del Windows Subsystem per Linux, senza creare conflitti.
# Come installare WSL 2
Come prima cosa, controlliamo se la nostra installazione di Windows soddisfa i prerequisiti di sistema. Per quanto riguarda Windows 10, è necessario avere installata la versione 2004
o superiore. Nel caso di Windows 11, qualsiasi versione andrà bene. Nel caso in cui stessimo eseguendo una versione di Windows inferiore a quelle elencante sopra, seguiamo questa guida di Microsoft per macchine datate
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
wsl --install
e premiamo invio
Questo comando attiverà tutte le componenti opzionali di Windows necessarie, scaricherà l’ultima versione del kernel ed imposterà in automatico WSL 2
come versione. Infine installerà di deafult Ubuntu 20.04
come distribuzione Linux.
NOTA: Se dovesse spuntare una banner che ci avverte che non abbiamo la virtualizzazione attivata, dalla Powershell come amministratori eseguiamo questo comando. Potrebbe essere necessario riavviare in seguito
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
La prima volta che lanceremo la distro appena installata, ci apparirà una console in finestra che ci chiederà di aspettare del tempo per finire la decompressione dei file scaricati in precedenza. Dalla volta successiva, l’esperienza di lancio sarà abbastanza immediata.
# 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 -l -o
Un abbreviativo del comando wsl --list --online
, sono equivalenti.
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
Abbiamo capito come funziona.
SUGGERIMENTO: Non siamo pratici con Linux e non sappiamo cosa installare? Non tocchiamo nulla e lasciamo installare Ubuntu 20.04 come di default. Avremo tempo per imparare
# Prima installazione
Seguiamo la procedura (semplice) per configurare Ubuntu durante il suo primo avvio. Come prima cosa dopo aver lanciato il comando wsl --install
ci vorrano alcuni secondi (o minuti, dipende dalla connessione) prima il sistema finisca di scaircare tutti i file necessari.
Una termianti i 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!
# Utilizzare il WSL da Windows Terminal
Il terminale di Windows, assieme a PowerToys, rientra tra quei piccolo gioielli open-source sviluppati da Microsoft. Ci permette di gestire e lanciare ogni applicazione tramite riga di comando. Le sue features principali sono
- Possibilità di dividere il lavoro in tabs e piani
- Supporto ai caratteri Unicode e UTF-8
- Render del testo con accelerazione grafica via GPU
- Possibilità di creare i propri temi e schemi di colori
- Customizzare testo, colori, sfondi e shortcuts
Per gli utenti Linux più sfegatati potrà sembrare nulla di che, ed è vero. In confronto a terminali come Kitty
o Alattracity
questo è più che banale. Ma forse ci stiamo scordando una cosa, siamo su Windows!
In questo articlo non andremo a vedere nel dettaglio come modificare ognuno di questi parametri: la funzionalità che più ci interessa è quella della suddivisione in tab. In questo modo aprendo una singola applicazione, potremo utilizzare al pieno delle loro potenzialità tutte le nostre distro, con l’aggiunta di PowerShell
, CMD
e Azure Cloud Shell
.
Una volta aperto (non è necessario come amministratore), vederemo un’unica tab con aperta la PowerShell. Per vedere tutte le altre opzioni disponibili, clicchiamo sulla freccia che indica in basso a destra del simbolo +
. Si aprirà un menù a tendina come questo
Ci basterà quindi cliccare sulla voce del programma che vogliamo lanciare. Come possiamo vedere dalla foto, attualmente in questo sistema ci sono ben 4 distribuzioni Linux installate tramite WSL 2
UTENTI ESPERTI: Possiamo installare praticamente qualsiasi distro Linux, anche quelle non supportate ufficialmente da Microsoft. Come possiamo vedere nella foto, tra le 4 distribuzioni installate, vi è anche Arch Linux, una distro molto potente di cui abbiamo parlato anche sul sito. Per i più curiosi ecco la repository del progetto GitHub con tutte le istruzioni necessarie
ArchWSL: https://github.com/yuk7/ArchWSL
# 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 sistema operativo principale