Linux on Windows with WSL

[1] The Windows Subsystem for Linux (WSL) lets developers use Linux applications, utilities, and Bash command-line tools directly on Windows, unmodified, without the overhead of a traditional virtual machine or dualboot setup.

Note

These instructions are for Ubuntu

Prerequisites

You must be running Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11

Open PowerShell or Windows Command Prompt in administrator mode.

Install WSL

wsl --install

Check WSL version

New Linux installations, installed using the wsl –install command, will be set to WSL 2 by default.

wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2

Update

Update previously installed Linux distributions from WSL 1 to WSL 2 and update your WSL version to the latest version.

wsl --set-default-version 2
wsl --update

Connect USB devices [2]

Install the USBIPD-WIN project

Support for connecting USB devices is not natively available in WSL, so you will need to install the open-source usbipd-win project.

Install usbipd-win: https://github.com/dorssel/usbipd-win/releases

Note

In case you have used usbipd with WSL 2 before, the following has changed since version 4.0.0:

  • You have to share the device using usbipd bind first.

  • You no longer have to install any client-side tooling.

  • You no longer have to specify a specific distribution.

  • The syntax for the command to attach has changed slightly.

Attach a USB device

Note

Before attaching your USB device, ensure that a WSL command line is open. This will keep the WSL 2 lightweight VM active.

List all of the USB devices connected to Windows

usbipd list
BUSID  VID:PID    DEVICE                                                        STATE
...
2-2    0483:df11  DFU in HS Mode @Device ID /0x500, @Revision ID /0x0000        Not attached
...

Select the bus ID of the device you’d like to attach to WSL.

Before attaching the USB device, the command usbipd bind must be used to share the device, allowing it to be attached to WSL. This requires administrator privileges. Select the bus ID of the device you would like to use in WSL and run the following command.

usbipd bind --busid 2-2

To attach the USB device, run the following command. (You no longer need to use an elevated administrator prompt.) Ensure that a WSL command prompt is open in order to keep the WSL 2 lightweight VM active.

usbipd attach -a --wsl --busid 2-2

WSL NFS Server

brief description how to share /nfsshare with everyone

sudo apt install nfs-kernel-server rpcbind
sudo mkdir /nfsshare
sudo chown nobody:nogroup /nfsshare
sudo chmod 777 /nfsshare
sudo sh -c "echo '/nfsshare *(rw,sync,no_subtree_check,insecure,no_root_squash)' >> /etc/exports"
sudo service rpcbind start
sudo service nfs-kernel-server start
sudo exportfs -a

IP address of your Linux distribution installed via WSL 2 (the WSL 2 VM address)

wsl hostname -I

Map ports 443, 2049 to WSL

netsh interface portproxy add v4tov4 listenport=443 listenaddress=0.0.0.0 `
connectport=443 connectaddress=(wsl hostname -I)
netsh interface portproxy add v4tov4 listenport=2049 listenaddress=0.0.0.0 `
connectport=2049 connectaddress=(wsl hostname -I)

Add Firewall rules

netsh advfirewall firewall add rule name="WSL NFS IN" dir=in `
action=allow protocol=TCP localport=111,2049
netsh advfirewall firewall add rule name="WSL NFS OUT" dir=out `
action=allow protocol=TCP localport=111,2049