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

  1. Open the Start Menu and search Turn Windows features on or off

  2. Select Windows Subsystem for Linux

  3. Click OK

  4. Restart your computer when prompted

Using PowerShell

  1. Open PowerShell as Administrator and run:

    Toggle line numbers
       1  Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    
  2. 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: x64ARM64)

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

    They can be installed using the wsl command:

    Installing Ubuntu on WSL by sideloading the .appx

    Ubuntu WSL distribution .appx builds are available for download:

    They can be installed by enabling sideloading in Windows 10 and double-clicking the .appx and clicking Install or with PowerShell:

    Toggle line numbers
       1 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:

    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 numbers
       1 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 numbers
       1 sudo apt install hello
    

    For more information on managing packages with apt, see the following additional resources:

    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 numbers
       1 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 numbers
       1 sudo apt update
       2 sudo apt install nim
    

    Next, we will create and open a file named helloworld.nim:

    Toggle line numbers
       1 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 numbers
       1 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 numbers
       1 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 numbers
       1 ./helloworld
    

    You should see:

    Toggle line numbers
       1 Hello World
       2 1
       3 2
       4 3
       5 4
       6 5
       7 6
       8 7
       9 8
      10 9
      11 10
    

    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 numbers
       1 sudo apt install mingw-w64
    

    Let's compile our application again, this time creating a Windows binary:

    Toggle line numbers
       1 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 numbers
       1 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

Popular posts from this blog

PROCEDURE TO CREATE AN ANIMATION TO REPRESENT THE GROWING MOON.

PROCEDURE TO CREATE AN ANIMATION TO INDICATE A BALL BOUNCING ON STEPS.

PROCEDURE TO CHANGE A CIRCLE INTO A SQURE USING FLASH.