1. Overview
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.
In this tutorial, we’ll show you how to get up and running with Ubuntu on WSL. These instructions will work on both Windows 10 or Windows 11.
Whilst WSL is a powerful tool for all users, some features, such as the ability to run graphical Linux applications, are only available on Windows 11. Please check out our Windows 11 tutorial for more information.
2. Install WSL
Installing WSL is now easier than ever. Search for Windows PowerShell in your Windows search bar, then select Run as administrator.
At the command prompt type:
wsl --install
And wait for the process to complete.
For WSL to be properly activated, you will now need to restart your computer.
3. Download Ubuntu
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 click on Get as shown in the following screenshot:
Ubuntu will then install on your machine.
The one line install!
There is a single command that will install both WSL and Ubuntu at the same time.
When opening PowerShell for the first time, simply modify the initial instruction to:
wsl --install -d ubuntu
This will install both WSL and Ubuntu! Don’t forget to restart your machine before continuing.
Once installed, you can either launch the application directly from the store or search for Ubuntu in your Windows search bar.
4. Configure Ubuntu
Congratulations, you now have an Ubuntu terminal running on your Windows machine!
If Ubuntu returns an error during this initial installation, then the most common issue is that virtualisation is disabled in your device’s BIOS menu. You will need to turn this on during your device’s boot sequence. The location of this option varies by manufacturer, so you will need to refer to their documentation to find it.
Once Ubuntu 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 upgrade
Press Y when prompted.
5. Install your first package
Installing packages on Ubuntu is as easy as using a single command. Below, you will see how to install bpython, a simple python interpreter for trying out ideas, featuring some nice usability features like expected parameters and autocompletion.
To check that you have the latest package lists, type:
sudo apt update
Then install bpython:
sudo apt install bpython
To run the application type:
bpython
And you’re ready to go!
6. Customising your Terminal with Windows Terminal Preview
Since you’re likely to be using your Ubuntu terminal a fair bit, it’s always nice to do some customisation. We recommend installing Windows Terminal Preview to get the most user-friendly setup. You can find it in the Microsoft Store.
Windows Terminal allows you to open multiple Terminal instances as tabs, so you can have PowerShell running alongside Ubuntu. It also includes a number of customisation options. In the below screenshot, we’ve changed the tab name and colour, and configured the terminal appearance to use the Tango Dark theme and the Ubuntu font!
These customisations can be applied universally using the Appearance menu in Settings or to individual profiles which each have their own Appearance menu. Try it yourself to find something you feel comfortable with!
7. Enjoy Ubuntu on WSL!
That’s it! In this tutorial, you’ve seen how to install WSL and Ubuntu, set up your profile, and install your first package. You also got some tips on how to customise your experience.
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
- Install Ubuntu on WSL2 on Windows 11 with GUI Support
- Working with Visual Studio Code on Ubuntu on WSL2
- Enabling GPU acceleration on Ubuntu on WSL2 with the NVIDIA CUDA Platform
- Setting up WSL for Data Science
- WSL on Ubuntu Wiki
- Ask Ubuntu
Was this tutorial useful?
Thank you for your feedback.
Нужно использовать терминал Linux на компьютере с Windows? Узнайте, как запустить Linux на Windows 10 с помощью Windows Subsystem for Linux.
Хотите получить быстрый и простой доступ к Linux на ПК с Windows? Лучший вариант – использовать подсистему Windows Subsystem for Linux.
Это даст вам оболочку Linux bash, окно терминала, запущенное в Windows. Этот процесс, по сути, устанавливает Linux на Windows 10 – вот что вам нужно знать.
Впервые появившись в обновлении Windows 10 Anniversary Update 2018 года и распространившись среди всех пользователей в обновлении Fall Creators Update, подсистема Windows для Linux позволяет запускать программное обеспечение Linux в Windows 10.
Это функция, которая была встроена в Windows. В отличие от установки Linux на виртуальной машине, Windows Subsystem for Linux может быть мгновенно вызвана из меню “Пуск”.
Однако для того, чтобы это работало, необходимо сначала включить эту функцию.
После установки подсистемы Windows для Linux в Windows 10 вы можете запускать Linux в режиме командной строки. Это дает вам почти полнофункциональный терминал Linux для Windows 10.
Linux Bash Shell: Только для 64-разрядных версий Windows 10
Прежде чем приступить к работе, убедитесь, что вы используете 64-разрядную версию Windows 10. К сожалению, подсистема Windows для Linux не будет работать на 32-битных системах. Проверьте, работает ли на вашем компьютере 32- или 64-разрядная версия Windows.
Чтобы проверить компьютер на 64-битную совместимость, нажмите WIN + I, чтобы открыть “Настройки”, затем “Система” > “О системе”. В разделе “Характеристики устройств” вы увидите список “Тип системы”; для Windows Subsystem for Linux у вас должно показать 64-битную операционную систему.
Если нет, вам нужно обновить систему Windows 10 с 32-разрядной до 64-разрядной. Однако это сработает только в том случае, если у вас 64-битное оборудование.
Как установить Linux Bash Shell на Windows 10
Прежде чем продолжить, учтите, что в некоторых системах не могут быть одновременно включены подсистема Windows для Linux и виртуальные машины (VM). Поэтому, если вы предпочитаете запускать Linux в виртуальной машине, вам нужно будет отключить Windows Subsystem for Linux, прежде чем снова использовать виртуальную машину.
Готовы установить Bash в Windows? Начните с нажатия кнопки Пуск и ввода “Включение или отключение компонентов Windows“. Должен появиться пункт Включение или отключение компонентов Windows, щелкните его, чтобы открыть. Подождите, пока список заполнится, затем прокрутите вниз до пункта Подсистема Windows для Linux.
Этот флажок должен быть отмечен. Если его нет, добавьте галочку и нажмите OK для подтверждения.
Вам будет предложено перезапустить Windows, поэтому следуйте этой инструкции. После перезагрузки откройте Пуск > Магазин Windows. С помощью инструмента поиска найдите записи, относящиеся к “Linux”, и выберите предпочтительную версию Linux для установки. От того, какую версию вы выберете, будет зависеть работа с Bash. Например, вы можете установить Ubuntu на Windows 10.
Установите операционную систему Linux, затем подождите. После завершения нажмите кнопку Запуск в Магазине Windows или откройте его из меню Пуск. При первом запуске вам будет предложено ввести имя пользователя и пароль для создания учетной записи.
Для запуска выбранной вами среды Linux доступны и другие способы. В меню “Пуск” вы можете ввести:
- bash
- wsl
Оба способа отобразятся как “Выполнить команду”, которую можно выбрать для мгновенного открытия оболочки Bash. Разница в использовании любого из этих методов заключается в том, что они открываются в каталоге /mnt/c/Windows/System32. Это означает, что вы можете просматривать подкаталог System32 в Windows 10.
Linux в Windows
Обратите внимание, что невозможно повредить Windows 10, используя среду Linux. Любые введенные вами команды повредят только подсистему Windows для Linux и выбранную операционную систему. Windows 10 останется безопасной и надежной.
Кроме того, для запуска Bash больше не нужно включать режим разработчика Windows 10 в Настройках.
Чем отличается терминал Bash Shell от Windows PowerShell?
Запустив терминал Linux для Windows 10, вы можете вводить различные команды командной строки.
Но чем это отличается от простого использования командной строки Windows или PowerShell?
Ну, естественно, обе системы совершенно разные. При использовании PowerShell или командной строки вы ограничены командами, характерными для Windows. Это означает, например, использование команды dir для просмотра содержимого каталога; в Linux эквивалентом является ls.
В принципе, различия между Windows и Linux – это то, что отличает эти две текстовые среды. Преимущество наличия оболочки Bash в Windows 10 заключается в том, что вы можете легко получить доступ к Linux в Windows. Это экономит время на настройку виртуальной машины или перезагрузку при установке Linux с двойной загрузкой.
Что можно делать с Bash в Windows 10?
Установив оболочку Bash в Windows 10, вы можете использовать ее так же, как и на ПК с Linux.
Стандартные команды, такие как help, покажут вам, как пользоваться предустановленными приложениями и инструментами. Например, apt help продемонстрирует использование менеджера пакетов. Вы можете использовать sudo apt update для получения последних пакетов, как и на ПК с Linux.
Использование справки в Linux на Windows
Аналогично, команда sudo apt upgrade обновляет Linux до последней версии ОС.
Между тем, доступны и другие стандартные команды. Вы можете проверить подключение к сети с помощью ifconfig, проверить текущий каталог с помощью pwd и перейти в другой каталог с помощью cd.
Вы также можете получить быстрый список последних 10 вводов с помощью команды history.
Одним словом, это все равно что использовать Linux в операционной системе Windows 10.
Windows 10 Bash приносит Linux на любой компьютер
Настроить подсистему Windows для Linux и получить доступ к оболочке Bash очень просто. Это гораздо быстрее, чем запуск виртуальной машины, и гораздо менее сложно, чем использование двойной загрузки.
Вкратце, все, что вам нужно сделать для запуска оболочки Linux Bash на Windows 10, это:
- Убедитесь, что вы используете 64-разрядную Windows 10.
- Включить подсистему Windows для Linux на экране Windows Features.
- Установите выбранную вами среду Linux из Магазина Windows.
- Запустите Linux из меню “Пуск”.
После этого вы можете использовать терминал Linux для Windows для стандартных задач командной строки. Или вы можете использовать подсистему Linux в Windows 10 для установки среды рабочего стола.
Между тем, почти все команды Linux можно использовать в оболочке Bash в Windows.
В следующей статье, мы рассмотрим как установить рабочее окружение lmde, xfce или kde в wls.
Как запустить рабочий стол Linux в Windows с помощью WSL
Если вы только начали свой путь разработчика и до сих используете операционную систему семейства Microsoft Windows, то уже наверняка столкнулись с ситуацией, когда ваш инструментарий отличается от того, что установлено у большинства людей из этой профессии. Чаще всего проблемы начинаются при работе в командной строке. Дело в том, что Windows не является POSIX-совместимой операционной системой, поэтому в ней отсутствует базовый набор прикладных программ, который необходим для разработки.
Несмотря на все написанное дальше, наша основная рекомендация — ставить полноценный Linux-дистрибутив, например, Ubuntu и полностью погружаться в него. Подавляющее большинство веб-проектов работает под управлением Linux-систем. А постоянное использование такой системы на домашнем и рабочем компьютере равносильно погружению в языковую среду при изучении иностранных языков.
Для новичков есть способ проще и быстрее — технологии виртуализации. Об этом и поговорим.
- Ubuntu из Microsoft Store
- Другие способы
Ubuntu из Microsoft Store
Если вы работаете на Windows версии не ниже 10 с архитектурой x64, то можно воспользоваться встроенным решением и установить слой совместимости (Windows Subsystem for Linux), а затем дистрибутив на основе Ubuntu Linux через магазин приложений Microsoft Store.
Подсистема WSL поставляется вместе с Windows, но не включена по-умолчанию. Чтобы её активировать, необходимо открыть PowerShell и ввести команду:
wsl --install
Также эта команда скачивает и устанавливает дистрибутив Ubuntu Linux. Скорее всего после завершения установки потребуется перезагрузить компьютер.
После перезагрузки найдите в меню Пуск приложение Ubuntu и запустите его.
Первый запуск может вызвать ошибку Error: 0x8007007e
и предложение прочитать инструкцию по её решению https://aka.ms/wslinstall. Если хотите сэкономить время, то просто запустите PowerShell
(не путать с cmd
) от имени администратора и выполните следующую команду:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
После этого компьютер попросит перегрузиться, а потом нужно снова запустить приложение Ubuntu. В случае удачной установки откроется интерпретатор командной строки с предложением ввести имя пользователя и пароль. Выглядеть это будет вот так:
Installing, this may take a few minutes...
Installation successful!
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
Данные логин и пароль никак не связаны с вашим пользователем в Windows, придумайте новые и не забывайте их. Чтобы изменить пароль Ubuntu в будущем, вам пригодится команда passwd
Обратите внимание на данные официальные инструкции от Microsoft, где рассмотрены не только установка и настройка WSL и Ubuntu, но так же рассказано о настройке окружения для разработки (VSCode, Git)
- Настройка среды разработки WSL
- WSL + VSCode
Другие способы
Если у вас нет возможности установить WSL, то можно использовать другие способы виртуализации для установки Linux. Смотрите другие наши гайды:
- VirtualBox
- Vagrant
Время на прочтение
9 мин
Количество просмотров 241K
К написанию данной статьи меня побудил вопрос на Тостере, связанный с WSL. Я, после нескольких лет использования систем на ядре Linux, около полугода назад перешел к использованию Windows 10 на домашнем ПК. Зависимость от терминала и Linux окружения в моей работе практически сразу привели меня к вопросу: или ставить виртуалку или попробовать WSL. Я выбрал второе, и остался вполне доволен.
Под катом я расскажу как установить и настроить WSL, на какие я наткнулся проблемы и ограничения, как запускать Linux приложения из Windows и наоборот, а так же как интегрировать элементы окружения Xfce в окружение рабочего стола Windows.
Никогда не думал, что однажды вернусь на Windows, но повод попробовать мне дали стечения обстоятельств: жена, далекая от IT, дергала почти каждый раз, когда у нее возникала необходимость воспользоваться компом; проснулась ностальгия по одной игре, но она никак не хотела адекватно работать под wine; а тут еще мне подарили коробочную Windows 10 Pro. WSL я поставил чуть ли не сразу после установки системы, поигрался несколько вечеров, понял, что продукт для моих задач годный, но хочется более привычный терминал и вообще некоторых удобств.
Установка WSL и дистрибутива
Сразу оговорюсь, в интернете можно найти описание установки с помощью выполнения команды lxrun /install
в командной строке или консоли PowerShell. Данный способ больше не работает (после выхода WSL в стабильный релиз). Насколько мне известно, сейчас WSL можно установить только из Microsoft Store вместе с предпочитаемым дистрибутивом.
Так же отмечу, что когда установку производил я, на выбор были доступны дистрибутивы OpenSUSE, SUSE Linux Enterprise и Ubuntu 16.04 — последний я и установил. Сейчас также доступны Ubuntu 18.04, Debian 9 и Kali Linux, возможно появятся и другие дистрибутивы. Действия по установке могут отличаться. Так же, часть проблем описанных в статье может быть уже исправлена.
Находим в магазине желаемый дистрибутив и устанавливаем. Установка пройдет быстро, так как скачает только эмулятор ядра Linux и утилиту для запуска подсистемы, которая окажется в системной папке в трех экземплярах: wsl.exe, bash.exe и ubuntu.exe (вместо ubuntu будет имя Вашего дистрибутива). Все они равнозначны и делают одно и то же — запускают собственный эмулятор терминала, в нем linux’овый bash работающий под эмулятором ядра. При первом же запуске нас попросят придумать логин и пароль для пользователя по умолчанию, а после произойдет непосредственно установка дистрибутива. В качестве пользователя по умолчанию указываем root без пароля — это потребуется для дальнейших шагов. Безопасность не пострадает, кроме того при подготовке материалов к статье, в англоязычном туториале, я наткнулся на информацию, что новые версии WSL теперь делают пользователем по умолчанию root без пароля без лишних вопросов.
Дожидаемся установки. Далее первым делом стоит обновить зеркала apt на ближайшие. Для этого понадобится CLI текстовый редактор. В комплекте только vi, я же больше предпочитаю nano, поэтому ставлю его:
apt install nano
sudo вводить не требуется, так как мы уже под root’ом. Отредактируем файл /etc/apt/sources.list:
nano /etc/apt/sources.list
У меня лучше всего работают зеркала Яндекса, поэтому мой файл выглядит так:
deb http://mirror.yandex.ru/ubuntu/ xenial main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial main universe restricted
deb http://mirror.yandex.ru/ubuntu/ xenial-security main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial-security main universe restricted
deb http://mirror.yandex.ru/ubuntu/ xenial-updates main universe restricted
deb-src http://mirror.yandex.ru/ubuntu/ xenial-updates main universe restricted
Нажимаем Ctrl+O для сохранения и Ctrl+X для выхода. Теперь можно обновить систему до актуального состояния:
apt update && apt upgrade
После обновления можно создать нашего основного пользователя. В данной статье я назову его user1, Вы же можете задать привычное имя:
addgroup --gid 1000 user1
adduser --home /home/user1 --shell /bin/bash --uid 1000 -G user1,sudo user1
Далее переходим в папку юзера, зайдем под ним, установим пароль и отредактируем файл ~/.bashrc:
cd /home/user1
su user1
passwd
nano .bashrc
Мой базовый .bashrc выглядит так
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm|xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
if [[ ${EUID} == 0 ]] ; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
else
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\] '
fi
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h \w \$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
# Add an "alert" alias for long running commands. Use like so:
# sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
Все, подсистема готова к использованию… почти…
Установка X-сервера, Xfce и прочих GUI’шных приложений
Первая же проблема, на которую я натолкнулся — bash-completion в предлагаемом эмуляторе терминала работал, мягко говоря, некорректно. Кроме того, данный эмулятор не умеет вкладки, а каждый его экземпляр запускает все в новом пространстве процессов, с отдельным init’ом (который кстати не заменить). Мне захотелось нормальный эмулятор терминала, некоторых других GUI приложений, а так же панельку, чтоб это все быстро запускать.
Когда я гуглил этот вопрос, я наткнулся на множество проблем, вроде необходимости перевода dbus на tcp протокол. На данный момент всех этих проблем нет. В подсистеме нормально работают unix-domain-socket’ы и все спокойно общается через них.
Первым делом нам понадобится X-сервер, притом установленный в основную систему (в Windows). Лично я использую для этих целей VcXsrv — порт X11 на Windows. Официальный сайт указанный в about самой утилиты его сейчас не предоставляет, поэтому гуглим установщик и устанавливаем все по умолчанию.
Пока идет установка возвращаемся в терминал WSL, командой exit выходим обратно в root’а. Первым делом настроим русские локали:
locale-gen ru_RU
locale-gen ru_RU.UTF-8
update-locale
Далее установим некоторые компоненты Xfce. Можно конечно установить его целиком из мета-пакета, но большинство компонентов нам не понадобится, а модульная архитектура Xfce позволяет нам поставить только необходимое:
apt install -y xfce4-session xfce4-notifyd xfce4-appfinder xfce4-panel xfce4-quicklauncher-plugin xfce4-whiskermenu-plugin xfce4-xkb-plugin xfce4-settings xfce4-terminal xfce4-taskmanager mousepad
Запускать каждый раз окружение руками не очень удобно, поэтому я автоматизировал данный процесс. Для этого в основной системе создадим в удобном для нас месте папку, а в ней 3 файла для запуска:
- config.xlaunch — файл настроек для VcXsrv
<?xml version="1.0" encoding="UTF-8"?> <XLaunch WindowMode="MultiWindow" ClientMode="NoClient" LocalClient="False" Display="0" LocalProgram="xcalc" RemoteProgram="xterm" RemotePassword="" PrivateKey="" RemoteHost="" RemoteUser="" XDMCPHost="" XDMCPBroadcast="False" XDMCPIndirect="False" Clipboard="True" ClipboardPrimary="True" ExtraParams="" Wgl="True" DisableAC="False" XDMCPTerminate="False" />
-
x-run.vbs — WSL всегда запускается со своим эмулятором терминала, если его закрыть — завершатся все его дочерние процессы. Чтоб данное окно не мозолило глаза, неплохо его запускать скрытым. К счастью в Windows встроен интерпретатор VBScript, который позволяет это сделать в одну строчку:
WScript.CreateObject("Shell.Application").ShellExecute "wsl", "cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session", "", "open", 0
Поясню, что здесь происходит. Мы говорим VBscript выполнить приложение wsl с параметром
cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session
, папка запуска нам не важна, поэтому пустая строка, действие open — запуск, 0 — скрытый режим. Самому wsl мы отдаем команду на выполнение: переход в папку пользователя, затем с установкой переменных окружения DISPLAY (дисплей X-сервера) и LANG (используемая локаль) мы запускаем xfce4-session от имени нашего пользователя user1 (благодаря команде su) - start.bat — batch файл для запуска, по желанию его можно засунуть в автозагрузку
start config.xlaunch wscript x-run.vbs
Далее можем запустить наш start.bat и настроить панель Xfce под себя. Замечу, что здесь я наткнулся на еще одну проблему — панель прекрасно отображается поверх всех окон, но вот выделить себе место, как панель на рабочем столе Windows она не может. Если кто знает решение данной проблемы, поделитесь в комментариях.
Ну и под конец данной части, скриншот моего рабочего стола:
Взаимодействие окружения Windows и окружения подсистемы Linux
Запускать Linux приложения напрямую из Windows можно через те же 3 команды — bash, wsl или ubuntu. Не забываем, что по умолчанию запуск идет от root, поэтому стоит понижать привилегии через su
, так же нужно не забывать передавать переменную окружения DISPLAY=:0 если приложению требуется X-сервер. Так же нужно менять папку, из которой должно работать приложение, через cd внутри WSL. Пример, посчитаем md5 для file.txt на диске D средствами Linux’овой md5sum:
wsl md5sum < d:\file.txt
Доступ к файловой системе Linux так же имеется, лежит она в %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
. Читать таким образом файлы можно, а вот писать — не желательно, можно поломать файловую систему. Думаю проблема в том, что Windows не умеет работать с правами и владельцами файловой системы Linux.
Из Linux так же можно запускать Windows приложения. Просто запускаем exe-шник и он выполнится в основной системе.
Диски Windows монтируются в /mnt
в соответствии со своими буквами в нижнем регистре. Например диск D будет смонтирован в /mnt/d
. Из Linux можно свободно читать и писать файлы Windows. Можно делать на них симлинки. Права у таких файлов всегда будут 0777, а владельцем будет root.
Сетевой стек у подсистемы общий с Windows. Сервер поднятый в Linux будет доступен на localhost в Windows и наоборот. Однако unix-domain-socket для Windows будет просто пустым файлом, работать с этим можно только внутри Linux. Выход во внешнюю сеть у Linux так же есть, в том числе можно слушать порты, если этого не запрещает фаервол.
ifconfig в Linux и ipconfig в Windows выдают одинаковую информацию о сетевых интерфейсах.
Из диспетчера задач Windows можно спокойно прибить процесс внутри подсистемы Linux. Однако Linux увидит только свои процессы.
Особенности, ограничения и подводные камни
Ядро Linux в WSL не настоящее. Это всего лишь прослойка-эмулятор, которая часть Linux-специфичных задач выполняет сама, а часть проксирует напрямую в ядро winNT. Большая часть api в нем реализована, но не все. Свое ядро собрать не получится, как и не получится подключить модули ядра (.ko, Kernel Object).
Init процесс у WSL тоже свой и заменить его, например, на system.d не выйдет. У меня давно есть желание написать менеджер демонов на go, который бы работал с файлами юнитов system.d и предоставлял бы схожий интерфейс, да все руки не доходят.
Нет поддержки openFUSE, соответственно примонтировать виртуальную или удаленную файловую систему не получится. Так же нельзя сделать mount из файла, mount вообще ничего кроме bind здесь, похоже, не умеет.
Так же нет никакой возможности разбить файловую систему Linux на несколько разделов/дисков.
Прямой доступ к железу практически отсутствует. Все таки мы находимся в песочнице Windows, а не в полноценном Linux. /dev и /sys заметно пустуют, в них лишь проц да виртуальные устройства. Доступ к GPU — только через X-сервер, напрямую — никак, так что нейросети обучать придется в Windows.
В JS разработке столкнулся с тем, что electron.js отказался запускаться в WSL, пришлось дублировать окружение node.js в Windows.
Итоги
Статья получилась довольно длинной, надеюсь, что она окажется еще и полезной.
WSL для меня лично оказался инструментом вполне юзабельным, решающим мои задачи fullstack backend разработчика. Виртуалка с Linux за полгода так и не понадобилась. По общим ощущениям Windows+WSL намного функциональнее, чем Linux+Wine.
Пока писал статью, обнаружил, что в Microsoft Store появилась сборка WSL с Debian 9.3, данный дистрибутив мне более симпатичен, чем Ubuntu, поэтому буду пробовать ставить.
I’ve been using Windows Subsystem for Linux (WSL) for my OS class for quite a while now. And I love how I can use Linux commands in Windows in a straightforward way without the added complexity of installing a virtual machine or dual booting.
By the end of this article, you should be able to run Linux commands right from Windows like this:
Prerequisites
To have WSL running effectively, I suggest you upgrade to Windows 11. WSL is also available on Windows 10, but it is way more efficient on Windows 11 based on my experience.
For Windows 10, you’ll need to have build 21364 or higher.
This article will cover what you can do on both Windows 10 and 11
How to Install WSL
The command to run WSL is straightforward:
wsl --install
This will download the Linux kernel, set WSL 2 as the default, and install Ubuntu as the default distribution.
Don’t want ubuntu? Here is the command for you:
wsl --install -d <distro name>
These are the available distributions as of now:
- Ubuntu
- OpenSUSE Leap 42
- SUSE Linux Enterprise Server 12 (SLES)
- Kali Linux
- Debian GNU/Linux
After this, you’ll find an app called Ubuntu (or any other distro) in your start menu:
Open the Linux Terminal
Open the Ubuntu app that you just installed, and you’ll be greeted with a Linux terminal! Try running some commands:
What if I want to access my Windows files?
If you go to your file explorer (winkey+E) you’ll find a new Linux option on the left where all your Linux files exist. This is where when any files you create in the terminal will be located:
But what if you want to access your regular files?
Luckily, you can do that easily. Just run the following command in your Linux terminal:
cd /mnt/
If you run ls
here, you’ll find your computer drives. This way you’ll be able to cd
your way into your files.
How to Create Aliases in WSL2
Do you ever have a long command to type and wish there were a shortcut for it? Then, aliases are your friends.
There are two ways to create aliases:
- per session
- permanently
How to create per session aliases in WSL2
To create an alias in your current session of Linux (the alias will be forgotten once you close the terminal), then you should run the following command:
alias <alias name>='<command>'
for example:
alias runc='gcc main.c -o main'
How to create permanent aliases in WSL2
We’ll edit a file called .bash_aliases
to save our aliases.
Run the following commands:
cd ~
ls -a
Look through the list of files that are printed out and look for .bash_aliases
.
If you can’t find it, run the following command:
touch .bash_aliases
Now in order to edit the file, run this command:
vi .bash_aliases
You’ll be greeted with a screen like this:
- Press «i» to start typing, and add as many aliases as you want.
For example:
alias runc='gcc main.c -o main'
alias hello='echo hello'
- To exit the typing mode, press «ctrl + c».
- To exit Vim and save the files type «:wq!» (I’m proud that I didn’t have to google that.)
Now you’re ready! Restart Ubuntu and start typing any of the following aliases above and it should work perfectly:
Okay cool, now we know how to run command line apps from WSL2. But what if we want to run Linux GUI apps? The answer is simple – you just need to install the GUI app before running it. I’ll use Firefox as an example.
To install Firefox:
sudo apt install firefox
To run Firefox:
firefox
If you already have Firefox on your Windows machine, you’ll find that it isn’t open. That’s because you’re now running Firefox for Linux not Windows.
You can even run Firefox for Linux right from the start menu if you use Windows 11. You’ll find it under your distro’s folder.
Conclusion
This article covered how to run WSL 2 effectively. If you have any questions, feel free to contact me on any of my social media platforms
Learn to code for free. freeCodeCamp’s open source curriculum has helped more than 40,000 people get jobs as developers. Get started