Графическая оболочка для ubuntu под windows

Время на прочтение9 мин

Количество просмотров99K

Введение

Данная статья предназначена вниманию системных администраторов, которые подготавливают типовые рабочие места на компьютерах под управлением ОС Windows 10, в том числе для разработчиков ПО.

Следует отметить, что существует определенная проблема, связанная с невозможностью интеграции ПО, полученного в on-line магазине Microsoft Store для использования в пользовательском образе Windows 10. Не вдаваясь в подробности уточню, что данная проблема связана с тем, что установленные из Microsoft Store программы связываются со служебной учетной записью Administrator, и при завершении создания пользовательского образа утилитой sysprep возникают обусловленные этим обстоятельством ошибки.

Рассмотренный в данной статье способ позволить избежать такой проблемы при подготовке образа ОС Windows 10 с предварительно настроенной подсистемой WSL2, а также с заранее подготовленным и настроенным образом ОС Ubuntu 20.04 с GUI KDE Plasma, который в свою очередь может иметь свой набор пользовательского ПО.

В сети Интернет имеется большое количество примеров и руководств по настройке подсистем WSL (т.е. WSL1 и сравнительно новой WSL2), с настройкой GUI интерфейса для linux систем на базе ОС начиная с версии Ubuntu 16.04 и заканчивая Ubuntu 20.04, но в основном это касалось рабочих столов на основе т.н. «легковесного» xfce4, имеющий вполне объяснимые ограничения в пользовательских настройках. Но что касается GUI KDE Plasma для Ubuntu 20.04, в сети не нашлось какой-либо существенной информации. Но именно этот вариант предоставляет конечному пользователю практически неограниченный набор настроек как внешнего вида системы, так и настроек оборудования, конечно с учетом текущих возможностей интеграции linux-систем, реализованных в подсистеме WSL2.

Установка требуемого набора ПО и настройка WSL2

Проверяем текущую версию Windows, для этого в строке поиска Windows вводим команду winver и получаем примерно следующее:

Важно, чтобы ОС имела версию 1903 или 1909 (указанные версии ОС должны быть с установленным накопительным обновлением KB4566116), либо 2004 (номер сборки не менее чем 19041), остальная информация не имеет значения. Если номер версии меньше, то для корректного повторения результатов, изложенных в данной статье, рекомендуется обновиться до последней версии Windows.

Для удобства дальнейших действий устанавливаем бесплатный Windows Terminal, используя Microsoft Store (также существует возможность загрузки из других источников):

Устанавливаем X Server X410 через тот же Microsoft Store, это ПО платное, но имеется бесплатный период в 15 дней, что вполне достаточно для проведения различных тестов.

В качестве бесплатной альтернативы X410 скачиваем и устанавливаем X-сервер VcXsrv.

В любом удобном месте на диске создаем каталог, в котором будем хранить наши файлы. В качестве примера создадим каталог C:\wsl.

Скачиваем и устанавливаем автономный установщик Ubuntu 20.04, распаковываем полученный файл с помощью архиватора (например 7-zip). Переименовываем распакованный каталог с длинным именем Ubuntu_2004.2020.424.0_x64 во что-то более приемлемое, например Ubuntu-20.04 и копируем его в каталог C:\wsl (далее по тексту просто \wsl).

Скачиваем и распаковываем в каталог \wsl кроссплатформенный звуковой сервер PulseAudio v.1.1., также вносим исправления в его конфигурационные файлы.

В файле \wsl\pulseaudio-1.1\etc\pulse\default.pa в разделе Load audio drivers statically редактируем строку:

load-module module-waveout sink_name=output source_name=input record=0

а в разделе Network access редактируем строку:

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1

В файле \wsl\pulseaudio-1.1\etc\pulse\daemon.conf раскомментируем и изменяем строку

exit-idle-time = -1

Настраиваем подсистему WSL2 в соответствии с документацией Microsoft. Единственное замечание — дистрибутив Ubuntu мы уже скачали, и устанавливать его будем на следующем шаге. В основном, настройка сводится к включению дополнительных компонентов «Подсистема Windows для Linux» и «Платформа виртуальной машины», и последующей перезагрузки для применения изменений в настройках компьютера:

При необходимости скачиваем и устанавливаем пакет обновлений для ядра Linux в WSL2.
Запускаем Windows Terminal и выбираем режим работы Command Prompt нажатием клавиш Ctrl+Shift+2.

В первую очередь устанавливаем режим работы WSL2, для этого вводим команду:

wsl  --set-default-version 2

Переходим в каталог с автономным загрузчиком Ubuntu 20.04, в моем случае это \wsl\Ubuntu-20.04 и запускаем файл ubuntu2004.exe. При появлении запроса имени пользователя указываю имя engineer (можно ввести любое другое имя), ввести свой пароль и подтвердить введенный пароль для указанной учетной записи:

Появилась строка приглашения терминала, ядро Ubuntu 20.04 установлено. Проверим правильность настройки режима WSL2, для этого в Windows Terminal выбираем закладку Windows PowerShell и вводим команду:

wsl -l -v

результат выполнения должен быть такой:

Настраиваем брандмауэр Microsoft Defender, т.е. отключаем его для общедоступной сети:

Настройка Ubuntu 20.04

В Windows Terminal снова выбираем закладку Command Prompt и устанавливаем обновления для Ubuntu 20.04. Для этого в командной строке вводим:

sudo apt update && sudo apt upgrade –y

Устанавливаем рабочий стол KDE Plasma:

sudo apt install kubuntu-desktop -y

установка занимает до 30 минут в зависимости от производительности компьютера и пропускной способности канала доступа в Internet, при появлении запроса установщика подтверждаем OK.
Устанавливаем русскую локализацию и словари Ubuntu 20.04. Для этого в командной строке вводим:

sudo apt install language-pack-ru language-pack-kde-ru -y
sudo apt install libreoffice-l10n-ru libreoffice-help-ru -y
sudo apt install hunspell-ru mueller7-dict -y
sudo update-locale LANG=ru_RU.UTF-8
sudo dpkg-reconfigure locales # примечание: выбираем ru_RU.UTF-8 UTF-8, см. скриншоты ниже.
sudo apt-get install --reinstall locales

Добавляем последнюю версию рабочего стола KDE Plasma:

sudo add-apt-repository ppa:kubuntu-ppa/backports
sudo apt update && sudo apt full-upgrade -y

Добавляем свой набор консольных приложений, например mc и neofetch:

sudo apt install mc neofetch -y

Проверяем, что получилось, вводим в командную строку neofetch, см. скриншот:

Редактируем конфигурационный файл WSL /etc/wsl.conf:

sudo nano /etc/wsl.conf

в открывшееся пустое окно текстового редактора копируем текст:

[automount]
enabled = true
root = /mnt
options = «metadata,umask=22,fmask=11»
mountFsTab = true
[network]
generateHosts = true
generateResolvConf = true
[interop]
enabled = true
appendWindowsPath = true

сохраняем изменения (Ctrl+O), подтверждаем операцию и выходим из текстового редактора (Ctrl+X).

Экспортируем настроенный образ Ubuntu-20.04 в созданный нами каталог \wsl. Для этого в Windows Terminal снова выбираем закладку Windows PowerShell и вводим команду:

wsl --export Ubuntu-20.04 c:\wsl\Ubuntu-plasma-desktop

созданный образ поможет нам автоматизировать операции запуска/переустановки настроенной Ubuntu 20.04, при необходимости позволит легко перенести на другой компьютер.

Подготовка bat-файлов и ярлыков на рабочий стол Windows

С помощью редактора Notepad++ создаем bat-файлы (обязательно в кодировке OEM-866 для корректного вывода символов кириллицы):
Файл Install-Ubuntu-20.04-plasma-desktop.bat — предназначен для автоматизации первоначальной установки созданного образа Ubuntu 20.04 на компьютере с уже настроенной подсистемой WSL2 и X-сервером. Если имя пользователя и пароль отличается от указанных в примере, то необходимо внести соответствующие изменения в этот bat-файл:

@echo off
wsl --set-default-version 2
cls
echo Ожидайте окончания установки дистрибутива Ubuntu-20.04...
wsl --import Ubuntu-20.04 c:\wsl c:\wsl\Ubuntu-plasma-desktop
wsl -s Ubuntu-20.04
cls
echo Дистрибутив Ubuntu-20.04 успешно установлен!
echo Не забудьте сменить учетную запись по умолчанию «root» на существующую учетную запись пользователя,
echo либо используйте предустановленную учетную запись «engineer», пароль: «password».
pause

Файл Reinstall-Ubuntu-20.04-plasma-desktop.bat — предназначен для переустановки подготовленного образа Ubuntu 20.04 на компьютере.

@echo off
wsl --unregister Ubuntu-20.04
wsl --set-default-version 2
cls
echo Ожидайте окончания переустановки дистрибутива Ubuntu-20.04...
wsl --import Ubuntu-20.04 c:\wsl c:\wsl\Ubuntu-plasma-desktop
wsl -s Ubuntu-20.04
cls
echo Дистрибутив Ubuntu-20.04 успешно переустановлен!
pause

Файл Set-default-user.bat — для установки пользователя «по умолчанию».

@echo off
set /p answer=Введите существующую учетную запись в Ubuntu (engineer):
c:\wsl\Ubuntu-20.04\ubuntu2004.exe config --default-user %answer%
cls
echo Учетная запись пользователя %answer% в Ubuntu-20.04 установлена по умолчанию!
pause

Файл Start-Ubuntu-20.04-plasma-desktop.bat — собственно запуск рабочего стола KDE Plasma.

@echo off
echo ===================================== Внимание! ============================================
echo  Для корректной работы GUI Ubuntu 20.04 в WSL2 необходимо использовать X Server.
echo  Примечание: в случае использования VcXsrv Windows X Server необходимо раскомментировать
echo  строки в файле Start-Ubuntu-20.04-plasma-desktop.bat, содержащие "config.xlaunch" и
echo  "vcxsrv.exe", и закомментировать все строки, содержащие "x410".
echo ============================================================================================
rem start "" /B "c:\wsl\vcxsrv\config.xlaunch" > nul
start "" /B x410.exe /wm /public > nul
start "" /B "c:\wsl\pulseaudio-1.1\bin\pulseaudio.exe" --use-pid-file=false -D > nul
c:\wsl\Ubuntu-20.04\Ubuntu2004.exe run "if [ -z \"$(pidof plasmashell)\" ]; then cd ~ ; export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 ; setxkbmap us,ru -option grp:ctrl_shift_toggle ; export LIBGL_ALWAYS_INDIRECT=1 ; export PULSE_SERVER=tcp:$(grep nameserver /etc/resolv.conf | awk '{print $2}') ; sudo /etc/init.d/dbus start &> /dev/null ; sudo service ssh start ; sudo service xrdp start ; plasmashell ; pkill '(gpg|ssh)-agent' ; fi;"
rem taskkill.exe /F /T /IM vcxsrv.exe > nul
taskkill.exe /F /T /IM x410.exe > nul
taskkill.exe /F /IM pulseaudio.exe > nul

Файл Start-Ubuntu-20.04-terminal.bat — запуск графического терминала без рабочего стола KDE Plasma.

@echo off
echo ===================================== Внимание! ============================================
echo  Для корректной работы GUI Ubuntu 20.04 в WSL2 необходимо использовать X Server.
echo  Примечание: в случае использования VcXsrv Windows X Server необходимо раскомментировать
echo  строки в файле Start-Ubuntu-20.04-plasma-desktop.bat, содержащие "config.xlaunch" и
echo  "vcxsrv.exe", и закомментировать все строки, содержащие "x410".
echo ============================================================================================
rem start "" /B "c:\wsl\vcxsrv\config.xlaunch" > nul
start "" /B x410.exe /wm /public > nul
start "" /B "c:\wsl\pulseaudio-1.1\bin\pulseaudio.exe" --use-pid-file=false -D > nul
c:\wsl\Ubuntu-20.04\Ubuntu2004.exe run "cd ~ ; export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 ; export LIBGL_ALWAYS_INDIRECT=1 ; setxkbmap us,ru -option grp:ctrl_shift_toggle ; export PULSE_SERVER=tcp:$(grep nameserver /etc/resolv.conf | awk '{print $2}') ; sudo /etc/init.d/dbus start &> /dev/null ; sudo service ssh start ; sudo service xrdp start ; konsole ; pkill '(gpg|ssh)-agent' ;"
taskkill.exe /F /T /IM x410.exe > nul
rem taskkill.exe /F /T /IM vcxsrv.exe > nul
taskkill.exe /F /IM pulseaudio.exe > nul

Также для удобства использования в каталоге \wsl подготавливаем ярлыки, указывающие на соответствующие bat-файлы. После чего содержимое каталога \wsl выглядит следующим образом:

Запуск рабочего стола KDE Plasma

Проверяем, что все подготовительные действия выполнены, пробуем запустить ярлык Plasma-desktop. Появляется запрос пароля, вводим пароль для учетной записи и… окно закрывается. В первый раз это нормально. Пробуем еще раз — и видим знакомую панель задач KDE Plasma. Настраиваем требуем внешний вид панели задач, на примере для удобства использования панель переносится в правую часть экрана и центрируется. Проверяем настройки локализации, при необходимости добавляем русский язык:

При необходимости выносим ярлыки для установленных linux-приложений на панель задач KDE Plasma.

Если Ubuntu 20.04 требует выйти из учетной записи пользователя для применения изменений в настройках, или Вам необходимо перезагрузить ОС, для этого в Windows Terminal введите команду:

wsl -d Ubuntu20.04 --shutdown

С помощью ярлыка Plasma-desktop или Konsole можно запустить GUI KDE Plasma Ubuntu 20.04. Например, установим с помощью Konsole графический редактор GIMP:

После окончания установки запускаем из Konsole графический редактор GIMP:

GIMP работает, что и требовалось проверить.
А вот как работают различные linux-приложения в KDE Plasma в WSL2:

настроенная панель задач KDE Plasma находится в правой части экрана. а видео в окне Firefox воспроизводится со звуком.

При необходимости можно настроить доступ к Ubuntu20.04 по SSH и RDP, для этого необходимо установить соответствующие службы командой:

sudo apt install ssh xrdp -y

примечание: для включения парольного доступа по SSH необходимо отредактировать файл /etc/ssh/sshd_config, а именно параметр PasswordAuthentication no необходимо установить в значение PasswordAuthentication yes, сохранить изменения и перезагрузить Ubuntu20.04.

При каждом запуске Ubuntu20.04 меняется внутренний ip-адрес, перед настройкой удаленного доступа необходимо уточнить текущий ip-адрес с помощью команды ip a:

Соответственно, этот ip-адрес необходимо внести в настройки сессий SSH и RDP перед запуском.
Вот так выглядит удаленный доступ по SSH с помощью MobaXterm:

А вот так выглядит удаленный доступ по RDP:

Использование X-сервера vcxsrv вместо x410

Запускаем и настраиваем vcxsrv, внимательно устанавливаем соответствующие флажки:

Сохраняем настроенную конфигурацию в каталоге \wsl\vcxsrv со стандартным именем config.xlaunch.

Редактируем bat-файлы Start-Ubuntu-20.04-plasma-desktop.bat и Start-Ubuntu-20.04-terminal.bat в соответствии с имеющимися в них инструкциями.

Запускаем ярлык Plasma-desktop, и вот что получаем:

Рабочий стол KDE Plasma полностью закрывает рабочий стол Windows, для переключения между окнами linux- и windows-приложений используем известную комбинацию клавиш Alt+Tab, что не совсем удобно.
Кроме того, выяснилась неприятная особенность X-сервера vcxsrv – он «падает» при запуске некоторых приложений, в частности того же GIMP или LibreOffice Writer. Возможно следует подождать, когда разработчики уберут замеченные «баги», но это не точно… Так что для получения приемлемых результатов лучше использовать X Server Microsoft x410.

Заключение

Все-таки надо отдать должное компании Microsoft, продукт WSL2 получился вполне рабочим, и на мой неискушенный взгляд — весьма удачным. И насколько мне известно, разработчики продолжают усиленно его «допиливать», и возможно — через годик-другой, данная подсистема предстанет во всей своей функциональной полноте.

Loading

Table of Contents

  • Before we start
  • Install WSL2 & Ubuntu
  • Install a GUI Environment
  • Set up an X Server
    • If you choose VcXsrv
    • If you choose X410
  • Further Fixes and Enhancements
    • Make Ubuntu Desktop recognize the Internet connection
    • Enable audio output in WSL2
    • Create a unique hostname to connect to WSL2

Before we start

If you want to uninstall Ubuntu (either because you messed up the steps and want to restart, or you don’t want WSL anymore), remember to shutdown WSL before uninstall the store app:

Then you can safely right click on Ubuntu and click «uninstall».

Install WSL2 & Ubuntu

Taken from https://docs.microsoft.com/en-us/windows/wsl/install-win10

Enable the related features in Windows

Run following in powershell:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Get the Linux kernel update package

Download and install this (may need restart):
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

Set WSL2 as the default version

Run in powershell:

wsl --set-default-version 2

Install Ubuntu

Go to Microsoft store, search for ubuntu and install Ubuntu latest.

Open the newly installed app (which should open as terminal), then follow the instructions to set up linux account and password.

Install a GUI Environment

Taken from

  • https://www.most-useful.com/ubuntu-20-04-desktop-gui-on-wsl-2-on-surface-pro-4.html
  • https://gist.github.com/Ta180m/e1471413f62e3ed94e72001d42e77e22

Update the newly installed distro before everything else

Run in Ubuntu terminal:

sudo apt-get update
sudo apt-get upgrade

Use tasksel to easily install the packages we need

Run in Ubunti terminal:

sudo apt install tasksel
sudo tasksel

A menu should then appear, allowing you to choose the tasks to be installed.
Use arrow keys to navigate, press Space to toggle the tasks to be installed.
Choose whatever you want, but make sure to choose the desktop environment Ubuntu Desktop.
Press Enter to start the installation.

Enable systemd

Run the following in Ubuntu terminal:

git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git
cd ubuntu-wsl2-systemd-script/
bash ubuntu-wsl2-systemd-script.sh

Shutdown Ubuntu

Close all Ubuntu terminals, then run the following in powershell:

Set up an X Server

Taken from

  • https://www.most-useful.com/ubuntu-20-04-desktop-gui-on-wsl-2-on-surface-pro-4.html
  • https://x410.dev/cookbook/wsl/using-x410-with-wsl2/

Set up a launch script for the desktop

Find a safe place in Windows to create a file start_desktop.sh.

Paste the following inside:

# Define necessary environment variables
export DISPLAY="$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'):0.0"
export DESKTOP_SESSION="ubuntu"
export LIBGL_ALWAYS_INDIRECT=1
export GDMSESSION="ubuntu"
export XDG_SESSION_DESKTOP="ubuntu"
export XDG_CURRENT_DESKTOP="ubuntu:GNOME"
export XDG_SESSION_TYPE="x11"
export XDG_BACKEND="x11"
export XDG_SESSION_CLASS="user"
export XDG_DATA_DIRS="/usr/local/share/:/usr/share/:/var/lib/snapd/desktop"
export XDG_CONFIG_DIRS="/etc/xdg"
export XDG_RUNTIME_DIR="$HOME/xdg"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share" 
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DESKTOP_DIR="$HOME/Desktop"
export XDG_DOCUMENTS_DIR="$HOME/Documents"
export XDG_DOWNLOAD_DIR="$HOME/Downloads"
export XDG_MUSIC_DIR="$HOME/Music"
export XDG_PICTURES_DIR="$HOME/Pictures"
export XDG_PUBLICSHARE_DIR="$HOME/Public"
export XDG_TEMPLATES_DIR="$HOME/Templates"
export XDG_VIDEOS_DIR="$HOME/Videos"
# Start desktop environment
gnome-session

We will use this script later.

From now on you have the option to choose between two X servers: VcXsrv which is free, or X410 which is paid but offers a better experience by targeting Windows 10 only.

If you choose VcXsrv, continue below.

If you choose X410, skip to the related part.

If you choose VcXsrv

Set up VcXsrv

Download and install VcXsrv:
https://sourceforge.net/projects/vcxsrv/

When a firewall prompt appears while you are using VcXsrv, make sure to allow connections on BOTH private and public networks.

Double click XLaunch to start. In the menu that appears, choose any one of the display options except Multiple Windows.
Set the display number to 0 and click next.

Choose «Open session via XDMCP» and click next.

Choose «Connect to host» in this page and type in 127.0.0.1 in the text box. Leave everything else unchecked, then click next.

Check everything in this page and leave the «additional arguments» text box empty. Click next.

In this last page, click «Save Configuration» to save the config in an XLaunch file. Place the file next to the start_desktop.sh we created above.

Click cancel after saving. (Clicking finish would start the X server and give you an empty window.)

Create a shortcut script

In the same directory as the start_desktop.sh and the XLaunch file, create a ubuntu.bat with the follow content:

start "" "config.xlaunch"
ubuntu.exe run "if [ -z \"$(pidof gnome-session)\" ]; then bash /mnt/c/Utilities/Ubuntu/start_desktop.sh; pkill '(gpg|ssh)-agent'; fi;"

Note that you need to replace the /mnt/c/Utilities/Ubuntu/start_desktop.sh part with the full path to your start_desktop.sh script. In my case, the script is located at C:\Utilities\Ubuntu\start_desktop.sh, so I would write /mnt/c/Utilities/Ubuntu/start_desktop.sh.

Done!

Double click ubuntu.bat to launch the GUI. ubuntu.bat would be your shortcut to launch the GUI from now on. You don’t need to repeat any of the above set up.

If you choose X410

Set up X410

Download and install X410:
https://x410.dev/

When a firewall prompt appears while you are using X410, make sure to allow connections on BOTH private and public networks.

Create a shortcut script

In the same directory as the start_desktop.sh, create a ubuntu.bat with the follow content:

start /B x410.exe :0 /desktop /public
ubuntu.exe run "if [ -z \"$(pidof gnome-session)\" ]; then bash /mnt/c/Utilities/Ubuntu/start_desktop.sh; pkill '(gpg|ssh)-agent'; fi;"
taskkill.exe /IM x410.exe

Note that you need to replace the /mnt/c/Utilities/Ubuntu/start_desktop.sh part with the full path to your start_desktop.sh script. In my case, the script is located at C:\Utilities\Ubuntu\start_desktop.sh, so I would write /mnt/c/Utilities/Ubuntu/start_desktop.sh.

The first line of the above script contains the switch /desktop. This starts X410 in Desktop mode. You may change this to /wm to start X410 in Windowed Apps mode.

Done!

Double click ubuntu.bat to launch the GUI. ubuntu.bat would be your shortcut to launch the GUI from now on. You don’t need to repeat any of the above set up.

Further Fixes and Enhancements

Taken from

  • https://www.most-useful.com/ubuntu-20-04-desktop-gui-on-wsl-2-on-surface-pro-4.html#Login%20With%20VcXsrv%20in%20XDMCP%20mode
  • https://x410.dev/cookbook/wsl/enabling-sound-in-wsl-ubuntu-let-it-sing/

The following sections are optional fixes and enhancements. Proceed as you wish.

Make Ubuntu Desktop recognize the Internet connection

You may notice a weird situation where the Ubuntu desktop claims that you are offline, but web browsers work just fine. This can be easily fixed.

Run in Ubuntu terminal:

sudo rm -rf /etc/netplan/*.yaml
sudo nano /etc/netplan/01-network-manager-all.yaml

In the editor that appears, copy and paste the following exactly:

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

When you are done, press Ctrl+X, then Y, then Enter to save and exit the editor.

Finally, run the following in Ubuntu terminal:

sudo netplan generate
sudo netplan apply
sudo service network-manager restart

Ubuntu should now show an active network connection.

Enable audio output in WSL2

The current version of WSL2 does not support audio output directly, but there is a workaround by forwarding sound using PulseAudio.

Download PulseAudio for windows here:
https://www.freedesktop.org/wiki/Software/PulseAudio/Ports/Windows/Support/

Unzip and put the content in a safe folder.

Edit etc\pulse\default.pa (using any text editor is fine, e.g. notepad)

Line 42:

from load-module module-waveout sink_name=output source_name=input

to load-module module-waveout sink_name=output source_name=input record=0

Line 61:

from #load-module module-native-protocol-tcp

to load-module module-native-protocol-tcp listen=0.0.0.0 auth-anonymous=1

Edit etc\pulse\daemon.conf

Line 39:

from ; exit-idle-time = 20

to exit-idle-time = -1

After configuration, double click to run bin\pulseaudio.exe. Allow both private and public connections in the firewall prompt.
You may ignore any warnings and errors in the output.

Close bin\pulseaudio.exe.

Edit start_desktop.sh:

# Define necessary environment variables
export DISPLAY="$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'):0.0"
export DESKTOP_SESSION="ubuntu"
export PULSE_SERVER=tcp:$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
export LIBGL_ALWAYS_INDIRECT=1
export GDMSESSION="ubuntu"
export XDG_SESSION_DESKTOP="ubuntu"
export XDG_CURRENT_DESKTOP="ubuntu:GNOME"
export XDG_SESSION_TYPE="x11"
export XDG_BACKEND="x11"
export XDG_SESSION_CLASS="user"
export XDG_DATA_DIRS="/usr/local/share/:/usr/share/:/var/lib/snapd/desktop"
export XDG_CONFIG_DIRS="/etc/xdg"
export XDG_RUNTIME_DIR="$HOME/xdg"
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share" 
export XDG_CACHE_HOME="$HOME/.cache"
export XDG_DESKTOP_DIR="$HOME/Desktop"
export XDG_DOCUMENTS_DIR="$HOME/Documents"
export XDG_DOWNLOAD_DIR="$HOME/Downloads"
export XDG_MUSIC_DIR="$HOME/Music"
export XDG_PICTURES_DIR="$HOME/Pictures"
export XDG_PUBLICSHARE_DIR="$HOME/Public"
export XDG_TEMPLATES_DIR="$HOME/Templates"
export XDG_VIDEOS_DIR="$HOME/Videos"
# Start desktop environment
gnome-session

Edit ubuntu.bat:

If you are using VcXsrv:

start "" "config.xlaunch"
start "" /B "C:\Utilities\pulseaudio\bin\pulseaudio.exe"
ubuntu.exe run "if [ -z \"$(pidof gnome-session)\" ]; then bash /mnt/c/Utilities/Ubuntu/start_desktop.sh; pkill '(gpg|ssh)-agent'; fi;"
taskkill.exe /IM pulseaudio.exe /F

Remember to change the paths /mnt/c/Utilities/Ubuntu/start_desktop.sh and C:\Utilities\pulseaudio\bin\pulseaudio.exe.

If you are using X410:

start /B x410.exe /desktop
start "" /B "C:\Utilities\pulseaudio\bin\pulseaudio.exe"
ubuntu.exe run "if [ -z \"$(pidof gnome-session)\" ]; then bash /mnt/c/Utilities/Ubuntu/start_desktop.sh; pkill '(gpg|ssh)-agent'; fi;"
taskkill.exe /IM x410.exe
taskkill.exe /IM pulseaudio.exe /F

Remember to change the paths /mnt/c/Utilities/Ubuntu/start_desktop.sh and C:\Utilities\pulseaudio\bin\pulseaudio.exe and change /desktop to /wm if you want.

You should be able to hear sound coming from Ubuntu when you launch ubuntu.bat again.

Create a unique hostname to connect to WSL2

Since the IP address of WSL2 changes every time, it is more convenient to set up a unique hostname pointing to the IP address if you need to connect to WSL2 from Windows. Note that in our above setup, a workaround is used to save this hostname setup, but if you need other types of connections into the WSL2, you may find this hostname useful.

Download wsl2host.exe:
https://github.com/shayne/go-wsl2-host/releases/latest

In your Windows terminal of choice (command prompt/powershell…), run:

Type in your Windows username and password when prompted.

After the installation, check if it is already working:
Launch Ubuntu, then in powershell (or cmd):

If the ping is successful, we are done here.

If you are loggin into Windows with a Microsoft account, and the ping is unsuccessful (request timed out or the host ubuntu.wsl is not found), continue with the fix below.

Press Win+R, type in services.msc and press Enter.

Locate the WSL2 Host service. Trying to start the service should give you an error.

Right click on the service, choose «Properties» and choose the «Log On» tab.

Choose «This account» in the tab, then click «Browse…».

In the new dialog, click «Advanced…», then «Find Now».

Choose your username from the list, then click «OK» and «OK» again to close the 2 dialogs.

You should see your username appearing in the text box next to «This account». Enter and re-enter your password in the boxes below. Use your Microsoft account password instead of Windows Hello PIN.

Click «OK» to close the properties dialog. Try to start the service now. If it works, we are done here.

If it still fails, proceed with the following fix.

(If you are NOT using Windows 10 Home, skip this step) If you are using Windows 10 Home (check in Settings > System > About), you need to enable Local Security Policy first.

Create a file called gpedit-enabler.bat with the content:

@echo off 
@echo "This batch file from MajorGeeks.Com will enable Group Policy Editor (Gpedit.msc) on Windows 10 Home."
@echo "If this method fails, there are other methods to try at https://tinyurl.com/majorgeeksgpedit"
pushd "%~dp0" 

dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt 
dir /b %SystemRoot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt 

for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" 
pause

(File content obtained from: https://www.majorgeeks.com/files/details/add_gpedit_msc_with_powershell.html)

Save and run the file. You should be able to access Local Security Policy now.

In the task bar search box, type Local Security Policy and run it as administrator.

Go to «Local Policies» > «User Rights Assignment» and double click on «Log on as a service».

Click «Add User or Group…». You should recognize the dialog box that appears. Go through the same procedure as in service properties to add your username into «Log on as a service Properties».

Once you are done, click «OK» to close the properties dialog. you can also close Local Security Policy now.

Go to Windows 10 Settings > Accounts > Sign-in options. Turn off «Require Windows Hello sign-in for Microsoft accounts».

Press Win+L to lock your computer, then choose password in sign-in options and sign in with your Microsoft account password.

Go back to Services (if you have already closed it, press Win+R, type in services.msc and press Enter to open it). Find the «WSL2 Host» service and start it. It should start without error now.

In powershell, run

Then, launch Ubuntu again. You should now be able to ping ubuntu.wsl. This hostname always points to the IP address of Ubuntu.

LINUX

In today’s tutorial, we will explore how to install the GNOME desktop environment on Windows Subsystem for Linux (WSL-2) using Ubuntu. This setup allows you to run a full-fledged Linux desktop experience directly on Windows, providing access to both GUI apps and typical command-line utilities.

In my previous tutorial, I discussed how to set up Debian on WSL-2 with SystemD enabled. Now, let’s take this one step further and install GNOME.

Table of Contents

  1. Prerequisites

  2. Installing WSL-2

  3. Installing Ubuntu and Setting Up SystemD

  4. Installing GNOME Desktop

  5. Configuring a Display Server

  6. Starting GNOME

  7. Conclusion

Prerequisites

Before we begin, make sure you have the following:

  • Windows 10 version 19041 or higher.

  • WSL-2 installed on your system.

  • A working Ubuntu installation within WSL-2.

  • Basic knowledge of using the terminal.

Keywords to Note:

  • WSL-2

  • Ubuntu

  • GNOME desktop

  • Linux desktop environment

  • SystemD

Installing WSL-2

If you have not yet installed WSL-2, follow these steps:

  1. Open PowerShell as Administrator.

  2. Run the following command to enable the WSL feature:

  1. Restart your computer when prompted.

  2. Install the Ubuntu distribution by running:

   wsl --set-default-version 2
   wsl --install -d Ubuntu

Confirm the installation from the Microsoft Store if necessary.

Installing Ubuntu and Setting Up SystemD

Follow these steps to set Ubuntu up with SystemD:

  1. Open your WSL terminal (you can search for “Ubuntu” in your Windows search).

  2. Update your package lists:

   sudo apt update && sudo apt upgrade -y
  1. Install SystemD by creating a service for WSL:

    • Create a file named 00-wsl.conf in /etc/systemd/system/:

     sudo touch /etc/systemd/system/00-wsl.conf
    
    • Add the following configuration:

     [Unit]
     DefaultDependencies=no
     After=local-fs.target
     Before=default.target
    
    
     [Install]
     WantedBy=default.target
    
  2. Start SystemD:

Now your WSL-2 Ubuntu setup is ready to install GNOME!

Installing GNOME Desktop

To install the GNOME desktop environment, follow these steps:

  1. Install GNOME and necessary packages:

   sudo apt install ubuntu-gnome-desktop --no-install-recommends -y
  1. Install necessary utilities for running GNOME applications:

   sudo apt install x11-apps gdm3 -y
  1. Allow the display server to achieve a proper functionality (if you haven’t already completed this).

Configuring a Display Server

To interact with the GNOME desktop, you’ll need an X server running on Windows. We recommend using VcXsrv:

  1. Download and install VcXsrv from its official site.

  2. Launch the VcXsrv with the following configurations:

    • Select “Multiple windows.”

    • Check “Disable access control.”

    • Click “Next” until you finish the setup.

  3. Configure your WSL environment to allow VcXsrv to connect:

    • Set the DISPLAY variable:

     echo "export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0" >> ~/.bashrc
     source ~/.bashrc
    

This ensures that any GUI applications launched in WSL can find the X server.

Starting GNOME

With everything set up, it’s time to launch the GNOME desktop:

  1. Start the VcXsrv server on your Windows machine.

  2. Launch your WSL terminal.

  3. Start the GNOME desktop session:

After a few moments, the GNOME desktop should appear on your Windows screen.

Example of a GNOME Session Launch

Upon successful launch, you should see the familiar GNOME interface with features such as:

  • Activities overview

  • System tray

  • App launcher

Conclusion

You now have a fully functional GNOME desktop environment running on WSL-2 with Ubuntu! This allows you to leverage the best of both worlds: the robustness of Linux and the convenience of Windows. If you encounter any issues or have questions, feel free to reach out to the community for support.

Don’t forget to check back for more tutorials on optimizing your WSL experience, setting up other desktop environments, and getting the most out of your Linux installations on Windows!

Happy coding!

Suggested Articles

LINUX

LINUX

LINUX

LINUX

LINUX

LINUX

Компонент WSL (Windows Subsystem for Linux или Подсистема Windows для Linux) появился в Windows 10 и с тех пор постоянно развивается. Одна из новых возможностей, которую кто-то из пользователей мог пропустить — возможность простого и удобного запуска программ Linux с GUI прямо в ОС Windows.

В этом материале — пример быстрой установки всего необходимого и запуска приложений с графическим интерфейсом в Windows 11 и 10 и дополнительная информация, которая может оказаться полезной.

Установка WSL, дистрибутива Linux и приложений

Установить WSL и нужный дистрибутив можно разными способами:

  • Включив необходимые компоненты в дополнительных компонентах Windows и загрузив дистрибутив в Microsoft Store (подробнее).
  • Почти автоматически в командной строке.

Далее будет рассмотрен второй вариант, как более быстрый в контексте рассматриваемой темы.

Для установки WSL и конкретного дистрибутива Linux достаточно выполнить следующие шаги:

  1. Запустите командную строку от имени администратора, введите команду
    wsl --install

    и нажмите Enter, дождитесь завершения выполнения команды.

    Установка WSL в командной строке

  2. Перезагрузите компьютер и снова зайдите в командную строку. Если на первом шаге была также произведена установка Ubuntu (в некоторых версиях Windows устанавливается автоматически), завершите установку с помощью
    wsl --install Ubuntu

    В процессе потребуется задать имя пользователя и пароль.

  3. Если требуется другой дистрибутив или автоматическая установка не выполнялась, по порядку введите команды (первая покажет список доступных дистрибутивов, во второй укажите имя дистрибутива из левого столбца):
    wsl --list --online
    wsl --install NAME
    Список дистрибутивов в WSL

Готово, дистрибутив установлен, а поддержка графического интерфейса приложений в WSL текущих версий включается автоматически (ранее этого можно было добиться лишь обходными путями, по умолчанию приложения работали только в режиме терминала), переходим к установке приложений:

  1. Введите команду
    sudo apt-get update

    также можно использовать apt вместо apt-get. Дождитесь обновления репозиториев.

  2. Для установки приложения по его имени введите команду
    sudo apt-get install ИМЯ_ПРИЛОЖЕНИЯ -y
    Установка приложений в WSL Windows

  3. Приложение будет установлено и появится в меню «Пуск» Windows (в папке соответствующего дистрибутива), откуда его можно будет запустить:
    Приложения Linux в меню Пуск Windows 11

  4. Тем же способом можно установить и другие необходимые приложения, а для их удаления используйте команду
    sudo apt-get remove ИМЯ_ПРИЛОЖЕНИЯ

Результат: приложения Linux с графическим интерфейсом исправно работают прямо в Windows:

Приложения Linux с графическим интерфейсом работают в Windows

Делают это со звуком, ускорением графики OpenGl, пробросом локальных дисков.

При желании вы даже можете установить менеджер пакетов с графическим интерфейсом (своего рода «магазин приложений»). Например, мне удалось добиться вполне исправной работы Gnome Software:

  1. Устанавливаем с помощью команды в WSL
    sudo apt install gnome-software -y
  2. Изменяем свойства ярлыка, добавленного в меню «Пуск» (правый клик по ярлыку в меню Пуск — перейти к расположению файла — открыть свойства ярлыка), заменив поле объект на (пример для Ubuntu)
    "C:\Program Files\WSL\wslg.exe" -d Ubuntu -u root sudo gnome-software

    Подобным же способом можно «заставить» запускаться от имени суперпользователя с ярлыков Windows и другие программы.

    Запуск ярлыка WSLG от имени ROOT

  3. Пользуемся для установки, обновления и удаления приложений Linux прямо в Windows, в графическом интерфейсе:
    Пакеты приложений в Gnome Software в Windows

Подробная техническая информация о том, как именно работают Linux-приложения с GUI доступна на GitHub проекта WSLg, с помощью которого реализована соответствующая функциональность.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Не устанавливается диспетчер realtek hd для windows 10
  • Windows 2000 установка с диска
  • Как сделать темные окна windows 10
  • Как проверить есть ли драйвера на видеокарту на windows 10
  • Canon mf3010 driver skachat windows 10