Install Ubuntu on WSL2 and get started with graphical applications

Key Value
Summary Install Ubuntu on WSL2 for Windows 10 and Windows 11 and run graphical applications with WSLg
Categories wsl2
Difficulty 1
Author oliver.smith@canonical.com

Note: This doc is not being maintained anymore. Please see instead https://canonical-ubuntu-wsl.readthedocs-hosted.com/ .

Overview

Duration: 1:00

Windows Subsystem for Linux (WSL) allows you to install a complete Ubuntu terminal environment in minutes on your Windows machine, allowing you to develop cross-platform applications without leaving windows.

What you will learn:

  • How to enable and install WSL on Windows 10 and Windows 11
  • How to install and run a simple graphical application that uses WSLg
  • How to install and run a much more advanced application that uses WSLg

ⓘ Note: As of November 2022, WSL is now available as a Windows Store app for both Windows 10 and Windows 11. This means previous tutorials related to installing WSL as a Windows feature are no longer required.

What you will need:

  • A Windows 10 or Windows 11 physical or virtual machine with all the updates installed

ⓘ Note: This tutorial doesn’t cover GPU acceleration which is covered in a tutorial of its own.

Install WSL

Duration: 3:00

WSL can be installed from the command line. Open a powershell prompt as an Administrator (we recommend using Windows Terminal) and run:

wsl --install

This command will enable the features necessary to run WSL and also install the default Ubuntu distribution of Linux available in the Microsoft Store. It is recommended to reboot your machine after this initial installation to complete the setup.

You can also install WSL from the Microsoft Store.

Installation of WSL from the Microsoft Store

Duration: 3:00

The WSL app is availble to install directly from the Microsoft Store like other Windows applications.

To install the WSL application from the Microsoft Store, open it and search for Windows subsystem.

Click on the item Windows Subsystem for Linux to open the corresponding application page.

Click on Get to download and install the application.

Upon installation, you can click on Open, but it will not do much since there is no Linux distribution installed.

However, if you really want to open the WSL application without installing a distribution, you’ll see a nice and short help message that you must follow in order to make something useful with WSL:

You can now proceed with the installation of Ubuntu.

Download Ubuntu

Duration: 4:00

WSL supports a variety of Linux distributions including the latest Ubuntu release, Ubuntu 20.04 LTS and Ubuntu 18.04 LTS. You can find them by opening the Microsoft Store app and searching for Ubuntu.

Choose the distribution you prefer and then select Get.

ⓘ Which version should I choose?
There are three types of Ubuntu releases published to the Microsoft Store:

  • Ubuntu with a version number e.g. Ubuntu 20.04.x. This will always be 20.04 and upgrades won’t be proposed.
  • Ubuntu without a version number. This is the latest LTS version of Ubuntu after the first point release. At the time of writing, it is Ubuntu 22.04. It will remain Ubuntu 22.04 until the first point release of the next LTS release of Ubuntu, for example 24.04.1 in 2024.
  • Ubuntu Preview is a daily build of the latest development version of Ubuntu. You should install it if you want to live on the edge but not for production workload as it doesn’t receive the same amount of QA as stable releases and may break at any time.

Ubuntu will then install on your machine.

Once installed, you can either launch the application directly from the store or search for Ubuntu in your Windows search bar.

Install Ubuntu from the command line

It is possible to install the same Ubuntu applications available on the Windows Store directly from the command line.

In a Powershell terminal you can run:

wsl --list --online to see all available distros.

You can install a distro using the NAME by running:

wsl --install -d Ubuntu-20.04

Use wsl -l -v to see all your currently installed distros and which version of WSL they are using:

image

Configure Ubuntu

Duration: 5:00

Congratulations, you now have an Ubuntu terminal running on your Windows machine!

Once it has finished its initial setup, you will need to create a username and password (this does not need to match your Windows user credentials).

Finally, it’s always good practice to install the latest updates with the following commands, entering your password when prompted.

sudo apt update

Then

sudo apt full-upgrade

Press Y when prompted.

(Optional) Enable systemd

In September 2022, Microsoft announced support for systemd in WSL. This long-awaited upgrade to WSL unlocks a huge number of quality of life features for managing processes and services. This includes snapd support, which enables users to take advantage of all of the tools and apps available on snapcraft.io.

To enable systemd you will need make a small modification to /etc/wsl.conf in your Ubuntu distribution.

Run `sudo nano /etc/wsl.conf’ to open the file and insert the following lines:

[boot]
systemd=true

Then restart your distro by running wsl --shutdown in powershell and relaunching.

ⓘ Systemd is enabled by default in the Ubuntu Preview application.

Install and use a GUI package

Duration: 5:00

WSL2 comes with WSLg enabled by default. WSLg allows you to run graphical linux applications.

To check that you have the latest package lists, type:

sudo apt update

Then, start with some basic X11 applications:

sudo apt install x11-apps

To run the xeyes, a “follow the mouse” application, type:

xeyes &

The & at the end of the line will execute the command asynchronously. In other words, the shell will run the command in the background and return to the command prompt immediately.

The first launch of a GUI application takes a few seconds while WSL is initializing the graphics stack. Next executions of GUI applications are much faster.

Leave xeyes opened and run the calculator xcalc with:

xcalc

When you move the cursor over the calculator, xeyes follows the cursor. This shows that several GUI applications can interact together.

Note that applications running under WSLg display a little penguin at the bottom right corner of their icons in the Windows taskbar. That’s one way you can distinguish applications running on Windows or Ubuntu (besides the window decoration and styling).

Close xeyes and xcalc by pressing the cross icon on the top right corner of each X application window.

Xcalc and xeyes are very basic X Windows applications but there are plenty of choices in the Linux ecosystem corresponding to your needs and available out of the box on Ubuntu.

In the following example, we will use GNU Octave to perform numerical computation.

ⓘ GNU Octave is software featuring a high-level programming language, primarily intended for numerical computations. Octave helps in solving linear and nonlinear problems numerically, and for performing other numerical experiments using a language that is mostly compatible with MATLAB. [GNU / Octave ]

We will use it to calculate and draw a beautiful Julia fractal. The goal here is to use Octave to demonstrate how WSLg works, not to go through the theory of fractals.

First thing is to install the software like we did for x11-apps, from the terminal prompt run:

sudo apt install octave

Then start the application:

octave --gui &

Do not forget the ampersand & at the end of the line, so the application is started in the background and we can continue using the same terminal window.

In Octave, click on the New script icon to open a new editor window and copy/paste the following code:

#{

Inspired by the work of Bruno Girin ([Geek Thoughts: Fractals with Octave: Classic Mandelbrot and Julia](http://brunogirin.blogspot.com/2008/12/fractals-with-octave-classic-mandelbrot.html))

Calculate a Julia set

zmin: Minimum value of c

zmax: Maximum value of c

hpx: Number of horizontal pixels

niter: Number of iterations

c: A complex number

#}

function M = julia(zmin, zmax, hpx, niter, c)

%% Number of vertical pixels

vpx=round(hpx*abs(imag(zmax-zmin)/real(zmax-zmin)));

%% Prepare the complex plane

[zRe,zIm]=meshgrid(linspace(real(zmin),real(zmax),hpx),

linspace(imag(zmin),imag(zmax),vpx));

z=zRe+i*zIm;

M=zeros(vpx,hpx);

%% Generate Julia

for s=1:niter

mask=abs(z)<2;

M(mask)=M(mask)+1;

z(mask)=z(mask).^2+c;

end

M(mask)=0;

end

This code is the function that will calculate the Julia set.

Save it to a file named julia.m. Since it is a function definition, the name of the file must match the name of the function.

Open a second editor window with the New Script button and copy and paste the following code:

Jc1=julia(-1.6+1.2i, 1.6-1.2i, 640, 128, -0.75+0.2i);

imagesc(Jc1)

axis off

colormap('default');

This code calls the function defined in julia.m. You can later change the parameters if you want to explore the Julia fractal.

Save it to a file named juliatest.m.

And finally, press the button Save File and Run.

After a few seconds, depending on your hardware and the parameters, a Julia fractal is displayed.

Like Octave, this window is displayed using WSLg completely transparently to the user.

Enjoy!

Enjoy Ubuntu on WSL!

Duration: 1:00

That’s it! In this tutorial, we’ve shown you how to install WSL and Ubuntu on Windows 11, set up your profile, install a few packages, and run a graphical application.

We hope you enjoy working with Ubuntu inside WSL. Don’t forget to check out our blog for the latest news on all things Ubuntu.

Further Reading

5 Likes

This should be
octave --gui &
(two short dashes instead of one long dash)

Apart from that, great guide :slight_smile: Thanks!

1 Like

Fixed, thanks for highlighting!

1 Like

I need to double-check, but I believe the installing wsl2 step can be simplified to the single command wsl --install on a previously not-enabled system. This should, IIRC, enable the right Windows features without manually searching for and enabling “Virtual Machine Platform” in the Add/Remove Windows Features screen, and will download and install Ubuntu from the store automatically with just the one command. It will also download the latest WSL2 from the store and enable WSLg and the latest WSL2 kernel.

4 Likes

I installed “Ubuntu” from the Microsoft Store, expecting Ubuntu 22.04 LTS to be installed. Instead, Ubuntu 20.04 LTS was installed. This article needs to be updated to mention Ubuntu 22.04, and the Microsoft Store entry needs to be updated to Ubuntu 22.04

1 Like

Hi Flimm,

Thanks for the comment! For Ubuntu WSL we’ve opted to follow the same upgrade path as the Desktop OS following the LTS → LTS path, with the default distro remaining on 20.04 until the first point release of 22.04.1. At that point the Ubuntu app will jump to 22.04.1 and existing users will be prompted to upgrade.

You can still use 22.04 on WSL today with the Ubuntu 22.04 LTS app or by running ‘sudo do-release-upgrade -d’ in your existing Ubuntu app.

I appreciate the language wasn’t clear and I’ve tweaked the copy above and we’re updating the Ubuntu app store description to reflect this.

Thanks for your feedback :slight_smile:

4 Likes

Confusion: on 11/25/2022, in Windows Store, my choices are “Ubuntu”, “Ubuntu 22.04.1 LTS”, Ubuntu 22.04.05 LTS". But these formats DO NOT MATCH the “Which version should I choose?” section! You need to UPDATE this section to match the actual/current Ubuntu builds available in the Microsoft Store.
Obrigado!
—Ben

2 Likes

Thanks @lucyllewy, I’ve streamlined the tutorial and updated to reflect that this now applies to both Windows 10 and Windows 11. If you have any other feedback items let me know :slight_smile:

2 Likes

It’s probably worth mentioning that wsl --install now installs WSL from the store, rather than the Windows Inbox version. The Store version of WSL is now the default experience since the store version reached 1.0 a couple weeks ago. The recommended by MS way to install WSL is via wsl --install because of this.

Installing manually from the Store UI without wsl --install requires the extra step (i.e. enabling the “Virtual Machine Platform” in “Add/Remove Windows Features”) before it will work.

4 Likes

There is a typo in the following paragraph:

Change it to recommended perhaps? Thanks for the guide.

2 Likes

Done, thanks for checking out the guide! :slight_smile:

1 Like

@local-optimum Several users have mentioned this confusion. I think it’s worth addressing in the guide.
I would be happy to make the change but I’m not sure how this content is managed.

1 Like

Great! Thanks for this tutorial :slight_smile:

1 Like