Windows Subsystem for Linux (WSL) is al eerder aan bod gekomen in Linux Magazine, maar dit keer ga je het gebruiken in combinatie met de grafische tools Meld en Virtual Machine Manager, ondanks dat dit officieel niet ondersteund wordt. Sterker nog je gaat zelfs een volledige Linux Desktop draaien op WSL, puur omdat het kan.

Het originele artikel is geschreven door Henk den Hartog.

De WSL-feature is gemakkelijk te installeren via “Turn Windows features on or off”. Klik op de Start knop in de taakbalk, begin met het typen van “Turn Windows features on or off” en deze verschijnt vanzelf in het zoekresultaat (afbeelding 1 “Windows Features Aan en Uitzetten”). Vervolgens opent het “Windows Features” venster zich met daarin een lijst van features welke je aan of uit kunt zetten. Deze lijst staat in alfabetische volgorde, dus ergens onderop zou je de feature “Windows Subsystem for Linux” moeten vinden, zie afbeelding 2. Zet hier een vinkje voor, klik op “OK” en na installatie vraagt Windows om een herstart van het systeem, tja het blijft Windows….

 

Afbeelding 2: Vink de Windows Subsystem for Linux feature aan.

Linux distributie installeren

Nu WSL is geïnstalleerd, is het tijd om een Linux distributie te kiezen. Distributies zijn makkelijk te installeren vanuit de Microsoft Store, open deze en zoek naar “Linux” of “WSL”. Klik op de gewenste distributie (dit artikel gaat uit van Ubuntu 18.04 LTS) en klik op “Get” of “Downloaden”. Windows kan je daarna vragen om in te loggen met je Microsoftaccount, maar dit hoeft niet dus kun je gewoon op “No, thanks” klikken, waarna het downloaden start.

Na de installatie verschijnt Ubuntu 18.04 LTS in het start menu, maar je kunt ook meteen op Launch klikken vanuit de Windows Store. Bij de eerste keer opstarten krijg je de melding “Installing, this may take a few minutes”, waarna je een UNIX-username aan moet maken. Deze staat verder los van je Windows/Microsoftaccount, dus kies iets wat je zelf makkelijk vindt. De gebruiker die je aangemaakt hebt heeft volledige sudo rechten, dus gebruik deze meteen om het systeem up-to-date te brengen met sudo apt update en sudo apt upgrade. Ging dit te snel of liever een andere manier van installeren? Een prima instructie is te vinden op de site van Microsoft: https://docs.microsoft.com/nl-nl/windows/wsl/install-win10

Installeren VcXsrv

Om grafische applicaties te tonen heb je een implementatie van X-Server onder Windows nodig. Dit artikel gebruikt VcXsrv, welke te downloaden is via Sourceforge: https://sourceforge.net/projects/vcxsrv/.

De installatie is simpel; Dubbelklik op het installatie bestand, kies een “Full” installatie type en gebruik de standaard installatie locatie (C:\Program Files\VcXsrv).

Configureren VcXsrv

Na installatie staat er in het Windows 10 startmenu een map genaamd “VcXsrv” en daarin het programma XLaunch. Na het klikken op XLaunch vraagt deze je om te kiezen voor een bepaalde display setting. Welke instelling je kiest is onder andere afhankelijk van het feit of je een volledig grafische Linux desktop gaat starten (zie verderop in dit artikel) of dat je losse grafische tools in een eigen venster wilt gebruiken. Kies voor nu de instelling “Multiple Windows” en laat VcXsrv zelf een display nummer uitzoeken door de instelling “Display number” op “-1” te laten staan.

Afbeelding 3: VcXsrv Display Settings.

Klik vervolgens op Next. Kies er in de volgende stap voor om geen client te starten en klik op next. Het volgende venster laat je nog wat extra opties kiezen. Laat de standaard opties (Clipboard met Primary Selection en Native Opengl) voor wat ze zijn en klik next. Klik in het volgende venster niet meteen op finish. Waarschijnlijk wil je deze configuratie vaker gaan gebruiken dus is het handig om deze op te slaan door op de “Save configuration” button te klikken. Sla deze bijvoorbeeld op je Bureaublad op, zodat je deze snel bij de hand hebt en geef het de naam MultiWindow.xlaunch.

In de toekomst is het nu mogelijk om VcXsrv te starten met deze configuratie door hierop te dubbel klikken. Voor nu klik je op finish en zal VcXsrv starten met deze configuratie. Een VcXsrv icoontje zal verschijnen op de System Tray; het meest rechter gedeelte van de taakbalk (afbeelding 4 “De VcXsrv Server staat op Display Number :0”). Wanneer je gebruikmaakt van de standaard Windows 10 security tools, zal de eerste keer een Windows Security Alert venster verschijnen welke je vraagt om de firewall instelling aan te passen. Laat het standaard vinkje bij “Private networks, such as my home or work network” staan en klik op Allow Access.

 

Afbeelding 5: Laat VcXsrv toe in je Windows Firewall.

VcXsrv staat nu klaar om je grafische applicaties te tonen, het enige wat je nog moet doen is je gebruikers omgeving in je WSL-distributie vertellen deze te gebruiken. Dit doe je door de DISPLAY environment variabele in te stellen, maar als het goed is heeft de (net gemaakte en gestarte configuratie van) VcXsrv dit al voor je gedaan. Of deze correct staat geconfigureerd, kun je controleren door het intypen van echo $DISPLAY op de terminal van jouw WSL-distributie. Als het goed is geeft deze “:0” als antwoord.

 

Afbeelding 6: Controleer de DISPLAY environment variabele.

Het cijfer dat je ziet achter de dubbele punt (:) correspondeert met het Display nummer welke je in de configuratie van VcXsrv op “-1” hebt laten staan en dus automatisch door VcXsrv wordt toegekend. Dit nummer kun je eventueel controleren door te hooveren over het VcXsrv icoon in de System Tray; achter de hostnaam van je computer (DEKSTOP-DBJCPO6 in afbeelding 4) zie je dan als het goed is ook “:0” terug.

Mocht echo $DISPLAY niets teruggeven, controleer dan eerst of VcXsrv wel gestart is. Het VcXsrv icoontje verschijnt niet op de taakbalk als deze niet gestart is, dus dat zou een eerste indicatie kunnen zijn. Eventueel kun je dit nog even dubbel checken in de Task Manager van Windows.  De DISPLAY environment variabele wordt ook niet ingesteld wanneer je WSL distributie al gestart was voordat je VcXsrv startte. In dit geval kun je de WSL-distributie sluiten en weer starten of je kunt deze handmatig instellen door export DISPLAY=:0 in te typen.

De DISPLAY environment variabele wordt ook niet ingesteld wanneer je in de configuratie van VcXsrv het Display number handmatig hebt ingevoerd (dus in plaats van de waarde “-1”). Als je hier bewust voor gekozen hebt, moet je de DISPLAY environment variabele handmatig instellen zoals hierboven al beschreven. Handig is het dan natuurlijk om dit te borgen in bijvoorbeeld het ~/.bashrc bestand zodat je dit niet elke keer hoeft te doen.

Als laatst kan het ook zo zijn dat je een oudere Distributie/VcXsrv combinatie gebruikt waarin dit simpelweg nog niet werkt. Vul deze dan ook handmatig in (het ~/.bashrc bestand), zoals hierboven beschreven. Als alles in orde is kun je een simpele grafische applicatie als xeyes gaan starten. Onder Ubuntu kun je deze installeren met sudo apt install x11-apps en starten met het commando xeyes.

D-Bus

Veel grafische applicaties draaien normaliter op een desktop omgeving en hebben een afhankelijkheid met de Desktop Bus (D-Bus). Een volledig up-to-date WSL Ubuntu 18.04 LTS distributie voldoet ondertussen aan deze afhankelijkheid. Controleer desalniettemin of het dbus-x11 pakket is geïnstalleerd (dpkg -l dbus-x11) en installeer het zo nodig met sudo apt install dbus-x11 .

Virtual Machine Manager en Meld

Op een volledig up-to-date gebrachte WSL Ubuntu 18.04 LTS distributie met D-Bus geïnstalleerd is het installeren en gebruiken van grafische tooling eigenlijk heel simpel. Installeer Meld en Virtual Machine Manager met sudo apt install virt-manager ssh-askpass meld (ssh-askpass is nodig voor als je connectie maakt met een hypervisor over SSH en hiervoor een wachtwoord nodig hebt).

Wanneer je echter Virtual Machine Manager start met het commando virt-manager krijg je een foutmelding te zien dat de libvirtd daemon niet draait.

 

Afbeelding 7: Een connectie naar de lokale libvirt daemon heb je niet nodig.

Dat is logisch, want deze draait inderdaad niet lokaal op je Windows 10 systeem. Deze melding kun je dan ook rustig negeren; sterker nog verwijder deze connectie meteen door er met de rechtermuisknop op te klikken en voor delete te kiezen. Vervolgens kun je zelf nieuwe connecties toevoegen (via File – Add Connection).

Wanneer je Virtual Machine Manager herstart en je connecties zijn weg, controleer dan goed of je distributie up-to-date is en dbus-x11 geïnstalleerd staat. Meld start niet automatisch op de achtergrond, dit kun je eventueel handmatig doen door het ampersand teken “&” achter het commando meld te plaatsen; meld &.

Een XFCE desktop omgeving

Een volledige Desktop omgeving is ook mogelijk met WSL en verschilt eigenlijk niet zoveel met het installeren van een losse grafische applicatie. Let wel dat WSL eigenlijk niet bedoeld is voor grafische applicaties en dat er op de achtergrond een hoop foutmeldingen zullen verschijnen.

Installeer de XFCE Desktop met het commando sudo apt install xfce4. Na het installeren dien je nog één environment variabele in te stellen met export LIBGL_ALWAYS_INDIRECT=1 (zet deze ook weer in he ~/.bashrc) en kun je XFCE starten met het commando xfce4-session. Wanneer je de XFCE Desktop gestart hebt merk je dat de huidige “Multi Window” instelling van VcXsrv niet echt handig is voor een volledige desktop. De grootte van het hoofdvenster is niet aan te passen en laat zich niet sluiten met het kruisje, bovendien staat de Applications titlebar lelijk in de weg in een apart venster bovenaan je Windows Desktop.

Voor een volledige desktop is het beter om VcXsrv te configureren met de “One window without titlebar” display setting. Sluit de XFCE Desktop door terug te gaan naar je Ubuntu Terminal en (eventueel een paar keer achter elkaar) de “ctrl-c” combinatie in te drukken. Sluit nu VcXsrv door in de System Tray met de rechtermuisknop op het VcXsrv icoon te klikken en dan met de linker op Exit. Start nu opnieuw de configuratie stappen van VcXsrv zoals eerder besproken, maar kies nu voor de “One window without titlebar” VcXsrv display setting en zet in het “Extra Settings” venster een extra vinkje voor “Disable Access Control”. Vergeet ook niet deze configuratie op te slaan onder een andere naam. Je Windows desktop lijkt helemaal zwart te worden, maar dit is de VcXsrv server die klaar staat en wanneer je met de muis naar beneden gaat zie je je cursor op de taakbalk en kun je je WSL Ubuntu distributie herstarten. Wanneer je nu de XFCE-desktop weer start ziet het er allemaal een stuk beter uit.

Afbeelding 8: De XFCE4 Desktop op een Windows Desktop.

Conclusie

Hoewel niet officieel ondersteund, werken de meeste grafische applicaties prima onder WSL. Nog niet zo lang geleden waren er nog een hoop work-arounds die je moest toepassen om het aan de praat te krijgen, maar tegenwoordig werk het allemaal redelijk out of de box. Dat geeft aan dat WSL en de distributies die daarop draaien volop in ontwikkeling zijn.

Dit artikel is geschreven op basis van Windows 10 Enterprise Edition v1809 en dus niet de laatste (1903) uitgave. Waarschijnlijk is het alleen maar makkelijker geworden dus!

Dit artikel ging over WSL-versie 1, maar Microsoft heeft WSL-versie 2 aangekondigd, waarin het zelfs wordt voorzien van een volledige implementatie van de Linux kernel: https://devblogs.microsoft.com/commandline/announcing-wsl-2/.