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 /norestart

Detta 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:

  1. Skapa ett användarnamn
  2. 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 -y

Konfigurera 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 -y

Installera SSH-server

Om du vill kunna SSH:a in i din WSL-instans:

sudo apt-get install openssh-server -y

Stäng av login-meddelandet

För att slippa login-prompten:

touch $HOME/.hushlogin

Installera Oh-My-Zsh

Installera dependencies

sudo apt-get install zsh -y
sudo apt-get install git -y
sudo apt-get install curl -y

Installera Oh-My-Zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

SSH-konfiguration

Skapa din .ssh-mapp:

mkdir ~/.ssh

Redigera din SSH-config:

nano ~/.ssh/config

Exempel:

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 $USER

Nu 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 -y

Skapa konfigurationsfil

nano ~/.tmux.conf

Exempel 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 ~/.zshrc

Lä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 ~/.ssh

Skapa nyckeln:

ssh-keygen -t rsa -b 8192

Kopiera nyckeln till servern:

ssh-copy-id -i $HOME/.ssh/id_rsa.pub toastern@dockerservern

Starta ssh-agent:

eval `ssh-agent -s` && ssh-add

Fixa SSH-nycklar i WSL2

Installera Keychain så att nycklar laddas automatiskt.

sudo apt install keychain

Lä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 --shutdown

Aktivera sparse-disk:

wsl --manage Debian --set-sparse true

Det gör att Windows kan återta oanvänt utrymme från WSL-disken.