Mariusz Bartosik's website

Graphics programming, demoscene and book reviews

How to Install Linux Bash Shell on Windows

Linux Bash Shell on Windows

One of the nicest things added in the recent Windows 10 feature updates is the Windows Subsystem for Linux. Thanks to WSL, you can run Linux Bash commands inside a Command Prompt window. This requires fewer resources than a full virtual machine and has a built-in integration with Windows file system. It’s not enabled by default, but if you would like to try it, just follow this guide.

This feature requires a 64-bit version of Windows 10 and the procedure differs depending on the OS Build number. You can check your version in Settings / System / About or just click the Windows menu, type winver and press enter.

Fall Creators Update and later

You need OS Build 16215 or later.

1. In the Windows menu, start typing Turn Windows features on or off, run it and turn on Windows Subsystem for Linux.

You can also right-click on Windows menu, select Windows PowerShell (Admin) and execute this command:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

2. Restart Windows

3. Select your prefered distribution from the Windows Store: Ubuntu 16.04 LTS, openSUSE or SUSE Linux Enterprise Server. UPDATE: now you can choose Debian, Kali Linux and Ubuntu 18.04 LTS too. Click Get and then Launch. A console window will pop up.

4. Create your UNIX user account. This can be different from your Windows user login and password and will be used for sudo command.

Creators Update and earlier

If you haven’t yet installed Fall Creators Update, the procedure is a bit different.

1. In the Windows menu, start typing Turn Windows features on or off, run it and turn on Windows Subsystem for Linux (Beta).

2. Restart Windows

3. Go to Settings / Update and Security, turn on Developer Mode.

4. Open a Command Prompt window and type:

bash

5. Accept the licence. This will download and install Ubuntu distribution.

6. Type bash in another Command Prompt window and create a UNIX user. This can be different from your Windows user login and password and will be used for sudo command.

Standard setup

After installation, it is a good idea to refresh repository index and upgrade all packages. For Ubuntu:

sudo apt update
sudo apt upgrade
sudo apt autoremove

Install the Midnight Commander for easy filesystem navigation:

sudo apt install mc

To install standard compilers like gcc and g++:

sudo apt install build-essential

If you need Python:

sudo apt install python-dev

You may want to use Git too:

sudo apt install git

Usage

To enter Bash mode, type in a Command Prompt window:

bash

You can also use distribution names like ubuntu, ubuntu1804, opensuse-42 or sles-12. Another option is to use an icon in the Windows start menu.

To end your current session:

exit

You can mix Windows and Linux commands in Command Prompt:

<br>C:\Users\lazarus>bash -c "ls /"<br>bin   dev  home  lib    media  opt   root  sbin  srv  tmp  var<br>boot  etc  init  lib64  mnt    proc  run   snap  sys  usr

Similarly, you can run Windows apps while you’re in Bash session:

lazarus@MiniPC:/$ /mnt/c/Windows/System32/notepad.exe

Access to files

All the Windows local drives will be mounted under the /mnt folder. To view a file located at D:\file.txt simply type:

cat /mnt/d/file.txt

You can find Linux system files in a location similar to this one:

%localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\

(%localappdata%\lxss\ for older OS builds), but you should not change them using Windows programs. As they will not handle Linux permissions properly, this will corrupt them. The only allowed operation is deletion.

GUI applications

Windows Subsystem for Linux doesn’t support Graphical User Interface applications, you cannot start an X server and use Gnome or KDE. Running web services is also not recommended. If you need such features, use Virtual Box to host your favourite Linux distribution inside it.

…well, unless you really want to. The previous paragraph is based on the official information from Microsoft. You can get around this and install an X server on Windows. One of them is Xming X Server for Windows. Then, all you need to do inside WSL is to set an environment variable for Bash session:

export DISPLAY=:0

This way GUI applications will redirect their display output to your X server on Windows.

Some programs will throw warnings, some may crash. If this happens, it simply means that something is not yet supported in WLS. Your mileage may vary, but if you install gvim, emacs or firefox:

sudo apt install gvim

they will work just fine. I even checked darktable, an open-source alternative to Lightroom, and it also seems to work:

As WSL is developed with other goals in mind (i.e. command-line tools), this little “hack” is just a proof of concept. But, if you have some Linux app that hasn’t been ported to Windows yet and there are no better alternatives, then give it a try.

Troubleshooting

Sometimes, after issuing the bash command, Windows may reply:

Windows Subsystem for Linux has no installed distributions.
Distributions can be installed by visiting the Microsoft Store:
https://aka.ms/wslstore
Press any key to continue...

You can check the installed distributions:

wslconfig /l
Windows Subsystem for Linux Distributions:
Ubuntu-18.04 (Default)

But WSL can display “no installed distributions” message again, even if you are pretty sure that there is at least one distro installed.

The solution is to restart LxssManager service. Run services.msc, find it on the list and restart it.

Uninstalling

If you would like to uninstall Windows Subsystem for Linux, you can do this in Settings / Apps. Look for Linux distribution name (e.g. Ubuntu). For older OS builds, type in a Command Prompt:

lxrun /uninstall /full

Summary

If your tools require Linux environment or have Linux-specific dependencies, then WSL may be a very useful solution. Also, with a bit of additional setup, you can even run Windows and Linux GUI programs side by side.

Resources

Avatar

Written by Mariusz Bartosik

I'm a software engineer passionate about 3D graphics programming and the demoscene. I'm also an educator and enthusiast of e-learning. I enjoy reading books. In my free time, I secretly work in my lab on the ultimate waffles with whipped cream recipe.

Comments

Comments are automatically closed on articles older than 512 days.