Hrajeme si s WSL - Linux na Widlích

Rád bych se s Vámi, milí čtenáři, dnes podíval jak se v dnešní době dá využívat Windows a Linux na jednom stroji tak, aby se jejich koexistence blížila ideálu. To znamená hodně muziky s minimem systémových prostředků. Začneme instalací a skončíme spuštěním nativní Linuxové desktopové aplikace ve Windows.

Úvod

Moje cesta Linuxovým světem je pravděpodobně delší než ta tvoje. První Linuxovou distribucí, ke které jsem se dostal byl tehdy populární RedHat Linux a to ve verzi 4.2, byl to rok asi 1996. V porovnáním s tehdy rozšířeným MS-DOS, Windows 3.11 čí WIndows 95 (ano, o Windows NT jsem si mohl nechat díky přemrštěným HW požadavkům jen zdát) působil Linux jako zjevení. Najednou jsem měl z počítače ftp, web, gopher, dns a bůhví jaký ještě server. Prostě v té době mě Linux dostal. 

Jak běžel čas, tak RedHat postupoval od verze 4.2 až k tehdy nesmírně populární verzi 7.3. To se psal rok 2002 a vydání Windows XP poslalo rychle Linuxové distribuce pryč z většiny desktopů. Nebyla to skoková změna, ale vnímal jsem to jako postupný proces ve kterém hrál hlavní roli přechod Windows na jádro z NTček.

V té době jsem se už jako ajťák živil a častou náplní mé práce bylo převádět firmy postavená na Linuxu na operační systém rodiny Windows (Windows XP + Server 2003). Co totiž Linuxu nejvíc chybělo a chybí doteď, jsou schopní správci sítě, kteří dokáží síť dle potřeb klienta navrhnout, postavit a udržet v chodu. Ale zpět k tématu :).

Nejoblíbenějším způsobem, jak mít na jednou stroji zároveň Linux a Windows byl a asi vždy bude dual boot. Jednotlivé OS mezi sebou nic nesdílí, snad jen jemně nakukují na konkurenční disky, a buď běží jeden nebo druhý. Bez kompromisů, vždy se 100% systémových prostředků. S jednou zásadní vadou na kráse, nikdy nemůžou běžet Linux a Windows paralelně. A to nechceš.

Proto, hlavně díky klesajícím cenám RAM, se začala používat virtualizace. Jeden OS je hostitel a na něm běží, v nějakém virtualizačním programu, druhý OS. Jako host slouží téměř vždy OS Windows. Proč? Protože na virtualizovaný počítač nepřistupuje přímo k hardware a má přidělený nějaký virtuální CPU, virtuální RAM a takdy hlavně nějakou virtuální grafiku a té si hry opravdu nezahrajete. A to většinou kvůli jedné aplikaci či překladači (ne, virtualizaci serverů a celých segmentů sítě opravdu neřešíme). Tak se pomalu dostáváme k jádru problému a tím je spuštění Linuxové aplikace ve Windows a naopak. 

Dlouho zde hrál prim Linux se svým projektem WINE, nebudem se o něm teď dál bavit - je to na další článek, a kdo si chtěl pusti Linuxovou apku na Windows, byl slušně řečeno téměř v prdeli. To se ale změnilo s příchodem Windows 10 1607, kdy byl přesdstaven  Windows Subsystem for Linux, tedy WSL. DO WSL nainstalujete, z těch pár co je k dispozici, svou oblíbenou Linuxovou distribuci a jednoduše ji spustíte buď jako aplikaci přes tlačítko start, nebo v terminálu. Ze začátku těmto distribucím chybělo vlastní jádro, ale WSL2, od Windows 10 2004, toto omezení odstranil. Používá k tomu virtualizační technologii Hyper-V. Takto vypadá v terminálu spuštěný powershell, cmd a bash z Ubuntu:

Konečně začátek - přesun distribuce 

To byl trochu zdlouhavý úvod a teď se konečně můžeme pustit do hrátek s WSL. Co budeme potřebovat:

  • Windows 10 s nainstalovanou a zapnutou funkcí WSL2
  • ve WSL2 nainstalovanou oblíbenou Linuxovou distribuci. Ve verzi WSL2. Já používám Ubuntu a Kali Linux
  • nainstalovaný Windows Terminal pro spouštění Linuxových distribucí

Linuxová distribuce se trapně instaluje na systémový disk a to v případě desítek GB dat může být problém. Takže prvním krokem po instalaci by měl být přesun distribuce na datový svazek. Nemusí to být krok první, ale čím víc dat, tím to bude trvat dýl. Co musíme udělat:

wsl --list #vypíše seznam instalovaný Linuxových distribuci, např. tam bude Ubuntu22 a to budeme chtít přenést
wsl --export <distro> <soubor>.tar #exportujem, tedy v našem případě wsl --export Ubuntu22 D:\TEMP\ubuntu22.tar
wsl --import <distro2> <cesta> <soubor>.tar #no a importujeme wsl --import UBUNTU_NEW D:\LINUX D:\TEMP\ubuntu22.tar

Příkazem wsl --list si můžeme ověřit, že máme k dispozici novou distribuci. A ojeví se nám také v terminálu odkud si ji můžeme hned spustit. Spustíme, nezavíráme a jedeme dál. Další práce a ověření nás čeká v registrech a to přesně tady:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss

Každá z nainstalovaných distribucí zde má svůj klíč kde kromě jména a cesty k distribuci musíme nastavit korektní UID uživatele pod kterým budete pracovat. Jinak budete pracovat pod uživatelem root a to není doporučená praxe. 

Požadované uid uživatele zjistíme přímo ve spuštěné Linuxové distribuci příkazem id <username>. Zjištěné uid pak zapíšeme do registru, jako DWORD hexadecimální, do DefaultUid.

Pokračujeme - nastavíme Xserver a spustíme aplikaci

Začneme instalování všech dostupných aktualizací, včetně aktualizace samotné distribuce:

sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y && sudo apt-get autoremove -y

A následně nainstalujeme nějakou X blbinku, například oblíbeneé xeyes, z tohoto balíčku:

sudo apt-get install x11-apps

Teď sice máme možnost spusti nějakou grafickou aplikaci, ale potřebujeme ještě funkční XServer. Na to použijeme užitečnou funkci co je v Linuxu od nepaměti a to je screen forwarding. Umožní nám tak apliakci spusti na vzdáleném Xserveru, tedy na Widlích. On totiž WSL používá virtualizační platformu Hyper-V a je tak přes virtuální switch připojen do "lokální" sítě. Screen forwarding nastavíme pomocí exportování proměnné DISPLAY takto:

export DISPLAY=ip-adresa:0.0

Kvůli tomu, že veškeré síťové adresy jsou dynamické ( a to jak adresa WSL distribuce, tak adresa hosta), tak ip adresa použitá pro exportování proměnné se bude měnit. Pozor, řešíme adresy virtuálních adaptérů Hyper-V! Proto musíme použít tento příkaz, který nám zjsití při každém startu tu správnou ip adresu:

export DISPLAY="`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0"

 Teď už zbývá jen instalace vhodného XServeru pro Windows a jeho rychlé nastavení. Z nabídky si můžete vybrat jaký chcete, ale vyberte si VcXsrv. Po instalaci je nutné nastavit akceptování připojení z konkrétních ip adres. No a protože jsou všechny dynamické, tak použijeme parametr -ac, který nám zajistí akceptování všech příchozích požadavků. Cíl v zástupci pak bude vypadat nějak takto:

"C:\Program Files\VcXsrv\vcxsrv.exe" :0 -clipboard -multiwindow -ac

Pak už stačí jen spusti blbinku xeyes a kochat se výsledkem, takto by to mělo vypadat:

Pokud se screen forwarding nedaří, může za to většinou firewall nebo IPv6. VcXsrv loguje a zda se použije Ipv4 nebo Ipv6 zjistíte jednoduše tím, jak se vám překládá localhost.

V dalším díle se podíváme jak kromě blbinky Xeyes rozchodit i OpenAi Gym a nechat umělou inteligenci zahrát nějakou z legendárních Atari her.