co-op development workstations

Windows Subsystem for Linux (WSL) explained – Q&A

Posted by Paweł Baczyński on November 10, 2020

No matter if you program in Java or Kotlin or with other technologies, operating on Linux has a number of advantages. One of them is access to Linux Bash with its useful commands.

However, some developers have to or prefer working on Windows. As stackoverflow.com 2020 survey showed, almost half of developers (45,8%) work in the Windows environment. There are tools that bring them closer to the Linux world like Cygwin.

The WSL provides a near-native Linux experience

Some time ago Microsoft introduced WSL, a new tool that brings Windows users even closer to the Linux experience. Here you can find gathered some frequently asked questions and our expert’s experience to help you get a better understanding of the WSL.

What is WSL?

WSL or Windows Subsystem for Linux is a part of the Windows operating system that allows running native Linux binaries. A number of distributions exist that can be installed and used.

How can I install WSL?

First thing to do before installing any Linux distribution is to install the WSL itself.

Go to Control PanelProgramsPrograms and FeaturesTurn Windows features on and off.

Select Windows Subsystem for Windows, confirm, and restart the system.

Turn Windows features on and off dialog with Windows Subsystem for Linux selected

Now you are ready to select and install a Linux distribution of your choice.

What Linux distributions are available on WSL?

To find a list of available distributions open Windows Store and search for "Linux".
The most popular are:

  • Ubuntu 18.04 and 20.04
  • SUSE Linux Enterprise Server
  • Debian
  • Fedora Remix for WSL
  • Kali Linux

Windows Store search result for term Linux

Is it possible to run graphical Linux applications from WSL?

Yes, it is possible. You need to install an X Window System server application on your Windows, for example Xming X Server for Windows.

Then check if your WSL system has a DISPLAY environment variable set up. If not set it to :0.

export DISPLAY=:0

After this configuration you are free to run native Linux applications with user interface.

WSL running xclock via Xming

Where is wsl.conf located?

Each WSL instance can be further configured by creating and editing a config file /etc/wsl.conf.

How to access Windows files from WSL?

All fixed drives with the NTFS or ReFS file system are automatically mounted in /mnt directory. For example a C: drive can be accessed in /mnt/c/. The directory where drives are mounted can be specified in /etc/wsl.conf as follows:

[automount]
root=/

This setting will cause drives to be mounted under the root folder, so the C: drive would be accessible through /c folder.

How to access pendrive from WSL?

Unlike fixed drives, removable drives are not mounted automatically. To access files stored on a USB stick you need to mount it yourself. For this purpose, use these commands (assume the drive letter in Windows is F):

sudo mkdir /mnt/f
sudo mount -t drvfs H: /mnt/f

How to connect to a DVD drive from WSL?

Optical drives are not as popular nowadays as they used to be. Nonetheless, they can be accessed the same way as pendrives (assume G is the drive letter):

sudo mkdir /mnt/g
sudo mount -t drvfs G: /mnt/g

Where are WSL files stored?

WSL files are exposed through a network share \\wsl$\[distro name], for example my home directory is at \\wsl$\Ubuntu-20.04\home\pawelb.

Physically the WSL files are located at %USERPROFILE%\AppData\Local\Packages\[distro name]. My home folder is at this rather long path C:\Users\pawelb\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\pawelb.

However, it is worth noting that manipulating WSL files from within Windows should be avoided as it can destroy Linux-specific file metadata. If you need to manipulate files on both WSL and Windows, store them on a Windows drive and access them from within WSL via /mnt.

Is it possible to run Windows programs from within WSL?

Yes, the WSL was built with interoperability in mind. It can run native Windows programs. However, if this feature is not needed, the user can disable it by adding enabled=false into [interop] section in wsl.conf.

[interop]
enabled=false

What terminal application to use?

Any terminal can do the job, even the good old cmd.exe. Just run the WSL command in. There is however one great application that makes running the WSL console easier. It’s Windows Terminal and it can be installed from Windows Store. It automatically detects any WSL distributions installed and adds an option to run its console. It also supports regular Windows Command Line, PowerShell, and Azure console out of the box. Also, it supports tabs and split view inside a tab.

Windows Terminal application

Caveats of interoperability with Windows

By default, WSL can run Windows binaries and also appends its %PATH% variable into the $PATH variable of Linux running under WSL. In most cases, this is useful or at least does no harm. However, sometimes unexpected behavior occurs.

This happened when I tried to run npm.

$ npm -v
module.js:471
    throw err;
    ^

Error: Cannot find module '\\wsl$\Ubuntu-20.04\c\Programs\nvm\v6.10.2\node_modules\npm\bin\npm-cli.js'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.runMain (module.js:604:10)
    at run (bootstrap_node.js:393:7)
    at startup (bootstrap_node.js:150:9)
    at bootstrap_node.js:508:3

This error message is not helpful at all. What happened?

After some investigation, I found out that I had also installed npm on Windows and WSL was using this executable to run. This unfortunately failed under WSL environment.

A fix was rather simple. I disabled appending Windows %PATH% to WSL $PATH.

This can be done in two ways.

The first is to use the Registry Editor (regedit) to add a DWORD AppendNtPath with value 0 under HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss. This affects all WSL distributions.

The second way is to set a property in /etc/wsl.conf. This affects only a single distribution.

[interop]
appendWindowsPath=false

The WSL is a great subsystem for Windows

With the introduction of Windows 10, a lot has changed. It seems that the system and its features are more and more thought-out and intuitive. A programmer needs a proper working environment. With WSL, Windows is keeping up with developments in this area, and looks like it is a step in the right direction. It’s worth having an eye on the development of this solution, hoping that in the future the developers will have a variety of systems that can really compete with each other. Looking for a good and stable, seamless tool, it is worth trying with the WSL.

Contact us

We believe communication is one of the most important things in software development world. If you have any questions or want to discuss about your project leave us a message and we’ll get back to you as soon as we can!

We can help you to estimate work, as well as present our portfolio or briefly discuss idea you have.

contact@solidstudio.io

+48 795 149 398

Thanks! Sorry, something went wrong.
close
Thank you for your message!
close
Thank you for your message!
close
close
We will be in touch as quickly as we can, usually within 24 hours.

Sign up for our newsletter

Subscribe to stay updated with the latest e-mobility and software development releases