How to Run a Linux Desktop Using the Windows Subsystem for Linux
Enabling WSL in Windows 10
Before you can install Ubuntu on WSL, WSL has to be enabled in one of the following ways:
Using the GUI for enabling Windows features
Open the Start Menu and search Turn Windows features on or off
Select Windows Subsystem for Linux
Click OK
- Restart your computer when prompted
Using PowerShell
Open PowerShell as Administrator and run:
Toggle line numbers1 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
- Restart your computer when prompted
Ubuntu on WSL
Installing Ubuntu on WSL via the Microsoft Store (Recommended)
The recommended way to install Ubuntu on WSL is through the Microsoft Store.
The following Ubuntu releases are available as apps on the Microsoft Store:
Ubuntu 16.04 LTS (Xenial) is the first release available for WSL. It supports the x64 architecture only. (offline installer: x64)
Ubuntu 18.04 LTS (Bionic) is the second LTS release and the first one supporting ARM64 systems, too. (offline installers: x64, ARM64)
Ubuntu 20.04 LTS (Focal) is the current LTS release, supporting both x64 and ARM64 architecture.
Ubuntu (without the release version) always follows the recommended release, switching over to the next one when it gets the first point release. Right now it installs Ubuntu 20.04 LTS.
Each app creates a separate root file system in which Ubuntu shells are opened but app updates don’t change the root file system afterwards. Installing a different app in parallel creates a different root file system allowing you to have both Ubuntu LTS releases installed and running in case you need it for keeping compatibility with other external systems. You can also upgrade your Ubuntu 16.04 to 18.04 by running ‘do-release-upgrade’ and have three different systems running in parallel, separating production and sandboxes for experiments.
Installing Ubuntu on WSL via rootfs
Ubuntu WSL distribution rootfs daily builds are available for download:
Ubuntu 16.04 LTS (Xenial)
Ubuntu 18.04 LTS (Bionic)
Ubuntu 19.10 (Eoan)
Ubuntu 20.04 LTS (Focal)
They can be installed using the wsl command:
- Toggle line numbers
1 wsl --import <DistributionName> <InstallLocation> <FileName>
Installing Ubuntu on WSL by sideloading the .appx
Ubuntu WSL distribution .appx builds are available for download:
Ubuntu 18.04 LTS (Bionic)
Ubuntu 16.04 LTS (Xenial)
They can be installed by enabling sideloading in Windows 10 and double-clicking the .appx and clicking Install or with PowerShell:
Toggle line numbers1 Add-AppxPackage .\CanonicalGroupLimited.Ubuntu18.04onWindows_1804.2018.817.0_x64__79rhkp1fndgsc.Appx
Running Ubuntu on WSL
Starting Ubuntu on WSL
The Ubuntu on WSL terminal can be started via:
- The app tile in the Windows Start menu (or pinned to your taskbar)
The wsl command on the Windows command prompt or PowerShell
By running ubuntu1804.exe, etc. on the Windows command prompt or PowerShell
Installing Packages on Ubuntu
Package management on Ubuntu on WSL works the same as on desktop Ubuntu, using the apt package manager. apt will download and install packages from the Ubuntu archive.
First we check for updates:
Toggle line numbers1 sudo apt update
We use sudo because installing packages is an administrator task and requires elevated privileges. Enter the UNIX password you created when you installed Ubuntu on WSL. This will not be your Windows password.
Next we can install a package:
Toggle line numbers1 sudo apt install hello
For more information on managing packages with apt, see the following additional resources:
apt - Official Ubuntu documentation
Keeping Ubuntu Updated in WSL
WSL runs its own specialized init system instead of SystemD and does not run standard Ubuntu services. Due to the services not running software updates are not applied automatically. Please keep your WSL installation using APT maintenance commands regularly. This can be accomplished with an occasional:
Toggle line numbers1 sudo apt update 2 sudo apt upgrade -y
Hello World
Lets write and compile a very simple Linux application on WSL. It will announce 'Hello World!' and then count to 10.
First, we will update apt and then install the necessary tools, often called dependencies:
Toggle line numbers1 sudo apt update 2 sudo apt install nim
Next, we will create and open a file named helloworld.nim:
Toggle line numbers1 nano helloworld.nim
Copy and paste the following code snippet (click 'Toggle Line Numbers' to hide line numbers). You can paste into the Ubuntu on WSL terminal by right-clicking with the mouse or Shift+Ctrl+'V':
Toggle line numbers1 echo "Hello World!" 2 for i in countup(1, 10): 3 echo i
Exit nano with Control+'X' then press 'Y' and Enter.
Next we will compile our application back at our shell prompt:
Toggle line numbers1 nim compile helloworld.nim
This compiles our Nim code snippet to C and then into a Linux binary named helloworld.
Then we can run our Linux binary:
Toggle line numbers1 ./helloworld
You should see:
But we are not just on Linux, we are on WSL.
We can build and test on both Linux and Windows at the same time, including compiling our Hello World application for Windows.
To do this we need to add a dependency, mingw-w64:
Toggle line numbers1 sudo apt install mingw-w64
Let's compile our application again, this time creating a Windows binary:
Toggle line numbers1 nim compile --gcc.exe:x86_64-w64-mingw32-gcc --gcc.linkerexe:x86_64-w64-mingw32-gcc --cpu:amd64 --os:windows --out:helloworld.exe helloworld.nim
Then move our binary to Windows and run it from within WSL (your path by vary based on your Windows username):
Toggle line numbers1 mv helloworld.exe /mnt/c/Users/Hayden/OneDrive/Desktop/ 2 cmd.exe /c "C:\Users\Hayden\OneDrive\Desktop\helloworld.exe"
Learn more about Nim.
Advanced Topics
Performance
Ubuntu's performance in WSL1 can be close to bare metal Ubuntu installations in mostly CPU-intensive tasks but file operations are much slower in WSL (see tests on Windows 10 April 2018 Update and on Windows builds from 2019). In WSL 2, CPU intensive tasks are measured to be slightly slower and file operations are generally faster than on WSL1.
Intra-WSL filesystem I/O will always be faster than WSL<->Windows filesystem I/O. It is recommended to move large files and git repos over to WSL to work with them on WSL. To improve performance of the file operations some sites suggest disabling anti-virus software. This puts your system at risk and we highly recommend against doing so.
Running Graphical Applications
The X Window System Architecture allows running the X server and the X clients on separate systems and in WSL's case the X server can be a native Windows server providing even OpenGL acceleration and the clients can be the graphical Linux applications running in the WSL environment.
Install one from several X servers available for Windows and start it before entering the WSL environment:
With the latest wslu package installed the starting Ubuntu app detects the running X server. If graphical applications can't connect to the running X server automatically paste the following commands to the terminal before starting the applications or set them on every login by adding them to ~/.bashrc:
- Toggle line numbers
1 export DISPLAY=:0 # in WSL 1 2 export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 # in WSL 2 3 export LIBGL_ALWAYS_INDIRECT=1
Detecting the X server takes noticeable (1-2 seconds) time in WSL1. To skip the detection just uninstall the x11-utils package.
Enabling Sound
The WSL environment does not support audio, but it can be enabled by installing the PulseAudio server on Windows following this guide. With the latest wslu package installed the starting Ubuntu app detects the running PulseAudio server and enables audio.
Detecting PulseAudio takes noticeable time (1-2 seconds) in WSL1. To skip the detection just uninstall the pulseaudio-utils package.
Comments
Post a Comment