Найти тему
От робота слышу

"Наш" Linux в "ненашей" Windows

Ничего такого
Ничего такого

Должно быть, настоящие бородатые линуксоиды назовут это баловством, но если у вас установлена 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;
};
});