WSL2 (Windows Subsystem for Linux) gör det möjligt att köra ett fullvärdigt Linux-system direkt i Windows.
I den här guiden visar jag hur jag sätter upp Debian i WSL2, konfigurerar terminalen och installerar verktyg som zsh, tmux och SSH för ett bekvämt arbetsflöde.
Aktivera WSL2 i Windows
Först behöver vi aktivera några funktioner i Windows.
Öppna Windows Features och aktivera:
- Virtual Machine Platform
- Windows Subsystem for Linux
- Hyper-V
Installera WSL2 via PowerShell
Öppna PowerShell som administratör och kör:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartDetta installerar komponenterna som krävs för WSL.
Installera Debian i WSL2
Ladda ner Debian från Microsoft Store:
https://www.microsoft.com/store/productId/9MSVKQC78PK6?ocid=pdpshare
När Debian startas första gången får du:
- Skapa ett användarnamn
- Skapa ett lösenord
Uppdatera Debian
När du är inne i Debian-terminalen bör du alltid börja med att uppdatera systemet.
sudo apt update && sudo apt upgrade -yKonfigurera Windows Terminal
Öppna Windows Terminal → Settings
Startup
Ställ in:
- Default profile:
Debian - Default terminal application:
Windows Terminal
Interaction
Aktivera:
- Automatically copy selection to clipboard
Debian Profile → Appearance
Aktivera:
- Retro terminal effects
Debian Profile → Advanced
Ändra följande:
- Profile termination behaviour:
Never close automatically - Display marks on scrollbar:
On - Experimental: Reposition the cursor with mouse clicks:
On
Fixa Systemd i WSL2
Nyare versioner av WSL har stöd för systemd, men det är inte alltid aktiverat som standard.
Genom att aktivera systemd kan du använda funktioner som:
systemctl- tjänster som startar automatiskt
- bättre kompatibilitet med många Linux-applikationer
Detta gör att WSL beter sig mycket mer som en vanlig Linux-installation.
Skapa wsl.conf
Skapa en konfigurationsfil för WSL.
sudo nano /etc/wsl.conf
Lägg till följande rader
# Set a command to run when a new WSL instance launches.
[boot]
systemd=true
# Set whether WSL supports interop process like launching Windows apps and adding path variables.
# Setting these to false will block the launch of Windows processes and block adding $PATH environment variables.
[interop]
appendWindowsPath=true
# Automatically mount Windows drive when the distribution is launched
[automount]
# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above.
# Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab.
enabled = true
Denna konfiguration gör följande:
- aktiverar systemd
- behåller Windows-interop
- ser till att Windows-diskar monteras automatiskt
Stäng ner WSL
Efter att filen har skapats behöver WSL startas om.
wsl.exe --shutdown
Detta stänger alla aktiva WSL-instanser.
Starta WSL igen
Starta din distribution igen via terminalen eller Windows Terminal.
Verifiera att systemd fungerar
Kör följande kommando:
systemctl --user status
Om allt fungerar korrekt ska du se att tjänsten körs och att statusen är grön / active.
Nu är systemd aktiverat i WSL2 och du kan använda kommandon som:
systemctl
precis som på en vanlig Linux-server.
Installera grundläggande verktyg
Installera några klassiska nätverksverktyg.
sudo apt-get install net-tools -yInstallera SSH-server
Om du vill kunna SSH:a in i din WSL-instans:
sudo apt-get install openssh-server -yStäng av login-meddelandet
För att slippa login-prompten:
touch $HOME/.hushloginInstallera Oh-My-Zsh
Installera dependencies
sudo apt-get install zsh -y
sudo apt-get install git -y
sudo apt-get install curl -yInstallera Oh-My-Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"SSH-konfiguration
Skapa din .ssh-mapp:
mkdir ~/.sshRedigera din SSH-config:
nano ~/.ssh/configExempel:
Host <TEST1>
HostName 10.X.X.X
Port 22
User $USER
Host <TEST2>
HostName 10.X.X.X
Port 22
User $USER
Host <TEST3>
HostName 10.X.X.X
Port 22
User $USERNu kan du ansluta direkt med:
ssh <TEST1>Installera Tmux
Tmux gör det möjligt att hantera flera terminalsessioner och paneler.
Installera tmux
sudo apt-get install tmux -ySkapa konfigurationsfil
nano ~/.tmux.confExempel på inställningar:
# ändra prefix från C-b till C-s
unbind C-b
set-option -g prefix C-s
bind-key C-s send-prefix
# splitta paneler
bind -n M-d split-window -hc "#{pane_current_path}"
bind -n M-f split-window -vc "#{pane_current_path}"
# starta sessioner, notera namnet
bind -n M-1 new-session -A -s <SESSION_1_NAME>
bind -n M-2 new-session -A -s <SESSION_2_NAME>
# färgstöd
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",tmux-256color:RGB"
# plugin manager
set -g @plugin 'tmux-plugins/tpm'
run '~/.tmux/plugins/tpm/tpm'Starta Tmux automatiskt
Redigera .zshrc:
nano ~/.zshrcLägg till:
alias tmux="tmux new-session -A -s $USER"Nu startar du automatiskt din tmux-session när du skriver tmux.
Skapa en SSH-nyckel
Sätt rätt rättigheter först:
chmod 775 -R ~/.ssh
chown $USER:$USER -R ~/.sshSkapa nyckeln:
ssh-keygen -t rsa -b 8192Kopiera nyckeln till servern:
ssh-copy-id -i $HOME/.ssh/id_rsa.pub toastern@dockerservernStarta ssh-agent:
eval `ssh-agent -s` && ssh-addFixa SSH-nycklar i WSL2
Installera Keychain så att nycklar laddas automatiskt.
sudo apt install keychainLägg till i .zshrc:
eval $(keychain --eval id_rsa)Port Forwarding i WSL2
Task Scheduler
För att automatiskt konfigurera port forwarding till WSL2 vid inloggning kan vi använda Windows Task Scheduler.
General
Run with highest privileges
Checked
Triggers
Begin the task:
at log on
Delay task for:
10 seconds
Actions
Program/Script
Powershell.exe
Add Arguments (Optional)
-ExecutionPolicy Bypass c:\wsl2_port_forwarding.ps1
Script
Skapa ett PowerShell-script som automatiskt hämtar WSL2:s IP-adress och konfigurerar port forwarding.
# Get WSL2 IP
$wsl_ip = wsl hostname -I | ForEach-Object { $_.Trim() }
# Exit if no IP found
if (-not $wsl_ip) {
Write-Error "WSL2 IP not found. Make sure WSL2 is running."
exit
}
# Delete old forwarding (if exists) and add new one
netsh interface portproxy delete v4tov4 listenport=22 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=$wsl_ip
# Allow port 22 through Windows Firewall
New-NetFirewallRule -DisplayName "WSL2 SSH" -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP -ErrorAction SilentlyContinue
Detta script gör följande:
- hämtar aktuell IP-adress från WSL2
- rensar eventuell gammal port forwarding
- skapar ny port forwarding mot WSL2
- öppnar port 22 i Windows Firewall
Tillåt körning av PowerShell-script
För att Windows ska tillåta att PowerShell-script körs behöver vi ändra execution policy.
Kör följande kommando i PowerShell.
Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Bekräfta sedan ändringen.
Y
Efter detta kommer scriptet att kunna köras automatiskt vid inloggning.
Om du vill kan jag också hjälpa dig göra en riktigt snygg artikelstruktur för hela WSL-guiden, eftersom du redan har material till ungefär 4 separata guider:
- Install WSL2
- Systemd i WSL2
- Port forwarding i WSL2
- Keeping WSL alive
Det brukar bli mycket bättre läsbarhet på bloggen.
Håll WSL2 igång
Som standard stänger WSL2 ner sig själv när inga terminalfönster längre är öppna.
Detta kan skapa problem om du kör tjänster i WSL2, exempelvis SSH eller andra bakgrundsprocesser.
Genom att ändra konfigurationen kan vi se till att WSL2 fortsätter att vara igång även när terminalen stängs.
Skapa .wslconfig
Navigera till din användarkatalog i Windows.
%userprofile%
Skapa en ny fil och döp den till:
.wslconfig
Öppna filen och lägg till följande rader:
[wsl2]
vmIdleTimeout=-1
Denna inställning gör att WSL2 inte automatiskt stänger ner sin virtuella maskin när terminalen stängs.
Apply settings
För att tillämpa ändringarna behöver WSL startas om.
Starta Windows PowerShell som administratör.
Kör följande kommando:
wsl --shutdown
Starta sedan WSL igen:
wsl
keepwsl.service
För att ytterligare säkerställa att WSL förblir aktivt kan vi skapa en systemd-tjänst.
Navigera till systemd:s service-katalog.
cd /lib/systemd/system
Skapa tjänstefilen.
sudo nano keepwsl.service
Lägg till följande rader
[Unit]
Description=keepwsl.service
[Service]
ExecStart=/mnt/c/Windows/System32/wsl.exe sleep infinity
[Install]
WantedBy=default.target
Denna tjänst startar en process som gör att WSL fortsätter vara aktiv.
Aktivera tjänsten
sudo systemctl enable --now keepwsl
När tjänsten är aktiverad kommer WSL att hålla sig igång även om alla terminalfönster stängs.
Låt Windows återta disk från WSL
Stäng ner WSL:
wsl.exe --shutdownAktivera sparse-disk:
wsl --manage Debian --set-sparse trueDet gör att Windows kan återta oanvänt utrymme från WSL-disken.
Diskussion