How To Start Wsl

How To Start Wsl

Reading time1 min
#Linux#Windows#Development#WSL#WindowsTerminal#Automation

Mastering WSL Startup: Step-by-Step for Streamlined Linux on Windows

Dual-booting or running heavyweight VMs for the sake of Unix tooling is a thing of the past. Windows Subsystem for Linux (WSL) offers near-native Linux environments directly on top of Windows. The startup process, often overlooked, is central to productivity—especially when shaving off those precious seconds between tasks.


Immediate Access: Why Startup Workflow Matters

High-frequency development tasks—package builds, CI scripts, even simple grep ops—suffer from friction if your WSL startup is slow or inconsistent. Fast boot supports:

  • Instant execution of Linux commands from any Windows context.
  • Accurate integration with automation, scheduled jobs, and cross-OS scripting.
  • Efficient multi-distro management (single prompt or via profiles).

N.B.: WSL2 offers improved performance and native Docker support, but consumes more memory than WSL1. Evaluate which fits your workstation constraints.


Step 1: Install and Enable WSL (One-Liner Stand-Up)

For Windows 10 21H1+, WSL installation is consolidated:

wsl --install
  • Installs required features (VirtualMachinePlatform, WindowsSubsystemForLinux)
  • Pulls latest Ubuntu LTS (currently 22.04)
  • Sets the default version to WSL2

Possible trade-off: Windows Features will update; a restart may be forced. Occasionally, legacy systems yield:

WslRegisterDistribution failed with error: 0x80370102

This usually means virtualization is disabled in BIOS ("Intel VT-x" or "AMD-V").


Step 2: Standard Startup

Launching your default distro? Minimal effort:

wsl

Run this from CMD, PowerShell, or within Windows Terminal. No context-switching required. The default shell and user are determined by distro install config.


Step 3: Targeted Distro Boot

Multiple distributions (e.g., Debian, Ubuntu-20.04, Alpine)? Specify:

wsl -d Ubuntu-22.04

Accurate naming is mandatory—case sensitive, matches output from wsl --list.


Step 4: Windows Terminal Profiles for WSL Instances

Instead of manual distro commands, define custom profiles for granular access:

  • Open Windows Terminal Settings (Ctrl+, or via dropdown menu)
  • Add a New Profile with the command:
    wsl.exe -d Debian
    
  • Optional: set startingDirectory to persist a working directory:
    "startingDirectory": "//wsl$/Debian/home/youruser"
    
  • Icon choices can visually distinguish environments.

Gotcha: Typo in distro name = silent failure; use wsl --list --all to confirm.


Step 5: Invoking One-Off Linux Commands from Windows

Critical for scripting/automation:

wsl uname -a

Or, pipe Windows output into Linux tools:

ipconfig | wsl grep IPv4

Use for build scripts, scheduled tasks, or rapid file conversions (e.g., via wsl dos2unix file.txt).


Step 6: Desktop and Taskbar Shortcuts

For hardwired access without CLI:

  • Right-click Desktop > New > Shortcut, target: wsl.exe
  • Or for a specific distro: wsl.exe -d Ubuntu-22.04
  • Pin to taskbar for even faster launch

Side note: Double-clicked shortcuts omit custom shell startup files if you invoke them via .exe—sometimes useful, sometimes a nuisance.


Step 7: Background WSL/Daemon Prep on Login

Some devs want daemons (e.g., PostgreSQL, Redis) running immediately. Automate headless launch:

  • Win + Rshell:startup
  • New shortcut:
    wsl.exe ~ --exec /bin/bash -c "exit"
    
    (Keeps WSL infrastructure up, triggers startup services, but no open shell UI.)

For advanced control (minimized window, dependencies), use Windows Task Scheduler:

  • Trigger: "At log on"
  • Action: Start wsl.exe with arguments as needed

Non-obvious tip: WSL2 will "hibernate" when unused; to keep daemons live, touch files periodically using a cron job inside WSL.


Key Configurations and Real-World Tuning

Switching Default User

Set persistent user via:

ubuntu config --default-user handydev

Or via /etc/wsl.conf:

[user]
default=handydev

Tweaking WSL Version

Ensure WSL2 per-distro:

wsl --set-version Ubuntu-22.04 2

Custom Startup Logic

Preload locale, aliases, or initialize tools by writing to ~/.bashrc or ~/.profile:

[ -x /usr/bin/neofetch ] && neofetch

Known Issue

File system access via \\wsl$ is slower on large projects. Native git operations should occur inside WSL to avoid I/O penalties.


Example: Anchor WSL in a Build Workflow (Node.js)

package.json script:

"scripts": {
    "test:linux": "wsl bash -c 'cd /mnt/c/Users/you/project && npm test'"
}

This ensures cross-platform test parity, all executed from Windows context.


WSL startup, when thoughtfully configured, eliminates friction between Windows and Linux workflows. Avoiding excessive overhead and utilizing built-in task automation increases system responsiveness and supports complex DevOps scenarios. Not every shortcut will fit all environments—test and adjust based on your distro, RAM, and daily tasks.


Efficiency is measured at the margins—optimizing startup isn’t a vanity move, but often the difference between seamless and stuttering development.