Должно быть, настоящие бородатые линуксоиды назовут это баловством, но если у вас установлена Windows 10 или 11 с WSL не древнее 0.67.6 (чтобы поддерживалась подсистема инициализации systemd), вы можете обзавестись дистрибутивом Linux отечественной сборки под нее, например ALT Starterkit 10. Процесс импорта дистрибутива в целом расписан на https://learn.microsoft.com/ru-ru/windows/wsl/use-custom-distro , но при запуске среды рабочего стола KDE будут тонкости. Графическим сервером послужит VcXsrv.
Сначала нужно раздобыть образ ALT Starterkit 10 для контейнеров. Как следует из описания на https://www.altlinux.org/Starterkits , стартовые наборы на Десятой платформе ALT распространяются свободно по лицензии GPL. Несколько кликов по ссылкам (Развертывание: загрузка >> Образы диска для виртуальных машин и rootfs для контейнеров >> x86_64) ведут на страницу http://ftp.altlinux.org/pub/distributions/ALTLinux/p10/images/cloud/x86_64/ откуда можно загрузить нужный архив: alt-p10-rootfs-systemd-x86_64.tar.xz . Прямую ссылку не даю, а то выкачаете нечаянно 63 мегабайта.
Создайте каталог, в котором будет находиться виртуальный диск дистрибутива (в итоге понадобится до 7 Гб места на диске). Поместите туда архив с образом. Запустите в этом Командную строку (cmd).
c:\Programs\linux\alt10-test>
Возможно, из-за утечки памяти придется выключить WSLg, для этого нужен вот такой конфигурационный файл:
c:\Programs\linux\alt10-test>copy %USERPROFILE%\.wslconfig con:
[wsl2]
guiApplications=false
1 file(s) copied.
Сверим часы версии:
c:\Programs\linux\alt10-test>wsl --version
WSL version: 1.2.5.0
Kernel version: 5.15.90.1
WSLg version: 1.0.51
MSRDC version: 1.2.3770
Direct3D version: 1.608.2-61064218
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.19044.2486
c:\Programs\linux\alt10-test>wsl --status
Default Distribution: <censored>
Default Version: 2
c:\Programs\linux\alt10-test>"C:\Program Files\VcXsrv\vcxsrv.exe" -help
\Programs\linux\alt10-test>
Что? А где хелп? Ну ладно, можно начинать. Буду приводить команды и частично их вывод для сверки.
Импортируйте дистрибутив в WSL:
c:\Programs\linux\alt10-test>wsl --import alt-test . alt-p10-rootfs-systemd-x86_64.tar.xz
Import in progress, this may take a few minutes.
Операция успешно завершена.
Потом запустите его:
c:\Programs\linux\alt10-test>wsl -d alt-test
[root@workstation alt10-test]
Приглашение bash получено, теперь нужно все настроить. В конфигурационном WSL файле для данного дистрибутива нужно разрешить использование systemd и, вероятно, запретить автоматическую генерацию файла hosts (он иногда генерируется неправильно).
[root@workstation alt10-test]# echo -e "[boot]\nsystemd=true\n[network]\ngenerateHosts=false\n" > /etc/wsl.conf
Проверка:
[root@workstation alt10-test]# cat /etc/wsl.conf
[boot]
systemd=true
[network]
generateHosts=false
Если hosts генерироваться не будет, нужно создать его вручную:
[root@workstation alt10-test]# echo -e "127.0.0.1\tlocalhost" > /etc/hosts
Проверка:
[root@workstation alt10-test]# cat /etc/hosts
127.0.0.1 localhost
Если у вас есть прокси, сейчас самое время добавить его адрес в переменную окружения:
[root@workstation alt10-test]# echo "export http_proxy=http://proxy.example.local:3128/" >> /etc/profile
Проверка:
[root@workstation alt10-test]# tail -n 2 /etc/profile
unset f
export http_proxy=http://proxy.example.local:3128/
Чтобы заработала systemd, остановите и заново запустите дистрибутив:
[root@workstation alt10-test]# exit
logout
c:\Programs\linux\alt10-test>wsl -t alt-test
Операция успешно завершена.
c:\Programs\linux\alt10-test>wsl -d alt-test
[root@workstation alt10-test]#
Можно убедиться, что systemd работает (потом нажмите q для выхода):
[root@workstation alt10-test]# systemctl status
● workstation
State: running
Jobs: 0 queued
Failed: 0 units
...
Обновите базы данных менеджера пакетов:
[root@workstation alt10-test]# apt-get update
...
Fetched 48.5MB in 3s (12.3MB/s)
Reading Package Lists... Done
Building Dependency Tree... Done
Теперь обновите пакеты:
[root@workstation alt10-test]# apt-get dist-upgrade
...
Need to get 36.2MB of archives.
After unpacking 228kB of additional disk space will be used.
Do you want to continue? [Y/n] y
...
Done.
Установите KDE и шрифты поинтереснее, чем дефолтные:
[root@workstation alt10-test]# apt-get install kde5
...
Need to get 898MB of archives.
After unpacking 3267MB of additional disk space will be used.
Do you want to continue? [Y/n] y
...
Done.
[root@workstation alt10-test]# apt-get install fonts-ttf-liberation
...
Need to get 2314kB of archives.
After unpacking 6573kB of additional disk space will be used.
Do you want to continue? [Y/n] y
....
Done.
Можно сразу добавить sudo и двухпанельный менеджер Midnight Commander, по умолчанию их нет:
[root@workstation alt10-test]# apt-get install sudo
...
Done.
[root@workstation alt10-test]# apt-get install mc
...
Done.
Создайте учетную запись пользователя с паролем. Я назвал его уникальным (в этой системе, конечно) именем user:
[root@workstation alt10-test]# useradd user
[root@workstation alt10-test]# passwd user
...
Enter new password:
Re-type new password:
passwd: all authentication tokens updated successfully.
Если вы установили sudo, имеет смысл добавить второго пользователя (admin) и дать ему соответствующие права. Осторожно! Лучше не правьте /etc/sudoers sed'ом, как я тут написал. Используйте visudo.
[root@workstation alt10-test]# usermod -a -G wheel admin
[root@workstation alt10-test]# sed -i 's/# WHEEL_USERS ALL=(ALL:ALL) ALL/WHEEL_USERS ALL=(ALL:ALL) ALL/' /etc/sudoers
Обещанные тонкости. Чтобы KDE мог общаться общаться с VcXsrv, нужно определить несколько переменных окружения. Наверняка вы о них знали, просто напоминаю.
[root@workstation alt10-test]# echo -e "export QT_XCB_GL_INTEGRATION=xcb_egl" >> /etc/profile
[root@workstation alt10-test]# echo -e "export LIBGL_ALWAYS_INDIRECT=0" >> /etc/profile
[root@workstation alt10-test]# echo -e "export __GLX_VENDOR_LIBRARY_NAME=mesa" >> /etc/profile
Проверка:
[root@workstation alt10-test]# tail -n 5 /etc/profile
unset f
export http_proxy=http://proxy.example.local:3128/
export QT_XCB_GL_INTEGRATION=xcb_egl
export LIBGL_ALWAYS_INDIRECT=0
export __GLX_VENDOR_LIBRARY_NAME=mesa
Отдельно для экрана входа lightdm-kde-greeter:
[root@workstation alt10-test]# sed -i '/#!*/a\export QT_XCB_GL_INTEGRATION=xcb_egl' /etc/X11/Xgreeter.lightdm
И наконец - разрешите подключение по XDMCP:
[root@workstation alt10-test]# sed -i '/\[LightDM\]/a\start-default-seat=false' /etc/lightdm/lightdm.conf
[root@workstation alt10-test]# sed -i '/\[XDMCPServer\]/a\enabled=true' /etc/lightdm/lightdm.conf
[root@workstation alt10-test]# systemctl restart lightdm --now
[root@workstation alt10-test]#
Аналогичным образом XDMCP настраивается, если вы используете Hyper-V, а не WSL.
Можно запускать. Я создал ярлык с такой командой:
c:\Programs\linux\alt10-test> C:\Windows\System32\wsl.exe -u root -d alt-test -e setsid -w bash -c - "( '/mnt/c/Program Files/VcXsrv/vcxsrv.exe' :8 -nodecoration -ac -iglx -clipboard -from <адрес адаптера WSL> -query $(hostname -i) -once & )"
В команде дистрибутив запускается от имени root, затем создается сессия (setsid), из которой запускается VcXsrv - и подключается к дистрибутиву уже по XDMCP. Вы должны увидеть экран входа. Проверьте раскладку клавиатуры перед запуском.
Значение <адрес адаптера WSL> можно посмотреть командой ipconfig в командной строе Windows, этот адаптер отображается как Ethernet adapter vEthernet (WSL).
Если в WSL несколько дистрибутивов, может понадобится изменить порт XDMCP в /etc/lightdm/lightdm.conf и указать его в параметре -port при вызове vcxsrv.exe.
Спасибо за внимание!
P.S. Чтобы не донимало окно с запросом пароля для доступа к настройкам сети, создайте файл /etc/polkit-1/rules.d/51-network-control.rules с таким содержимым:
/* -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- */
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.NetworkManager.network-control") {
return polkit.Result.YES;
};
});