WSL2 Anleitung

Hochschule Augsburg, Prof. Hubert Högl,

2024-07-14


Nachtrag 17.07.2024: Vermutlich kamen unsere Probleme mit WSL2 beim Workshop von der fehlenden Aktivierung der Virtualisierung im BIOS. Dieser Artikel behandelt die BIOS Einstellung ausführlich: https://s1gr1d.medium.com/how-to-set-up-linux-on-windows-with-wsl-2-debe2a64d20d


Mit dem Windows Subsystem für Linux in der Version 2 kann man Linux innerhalb von Windows betreiben.

Bei dieser Anleitung habe ich mich an https://goneuland.de/windows-10-subsystem-fuer-linux-wsl-2-installieren gehalten.

WSL aktivieren

In Powershell (Administrator) eingeben

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

Update auf WSL2

Kommandos

Version und Status ausgeben

wsl.exe -l -v

Welche Distributionen gibt es?

wsl.exe --list --online

Distribution installieren

wsl.exe --install -d Debian

Distribution für Benutzer ausführen

wsl.exe --distribution <Distribution Name> --user <User Name>

WSL Version ausgeben

wsl.exe --version

Shutdown

wsl.exe --shutdown Debian

Beenden und neu starten (das WSL wird neu gestartet, auf der Kommandozeile in WSL sieht man das aber nicht)

wsl.exe --terminate debian

Mountpunkte

USBIPD installieren unter Windows

Dieser Schritt ist nötig, da sich Windows alle angeschlossenen USB Geräte schnappt. Mit USBIPD gibt man bestimmte USB Geräte an die Linux Distribution weiter.

Auf der Homepage des Projekts unter

https://github.com/dorssel/usbipd-win

findet man einen msi Installer:

https://github.com/dorssel/usbipd-win/releases/

Mit

usbipd.exe list

bekommt man eine Liste der angeschlossenen USB Geräte:

C:\Users\Nobody> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE 
1-3    046d:c03e  USB-Eingabegerät                                              Not shared
1-4    10c4:ea60  CP2102 USB to UART Bridge Controller                          Not shared    <=== Heltec LoRa V3

Freigeben des Geraetes unter Windows, so dass es mit WSL verbunden werden kann. Muss im CMD Fenster als Admin eingegeben werden (Rechtsklick bei der Auswahl der CMD Anwendung). Danach ist der state bei “usbipd list” shared.

C:\Users\Nobody> usbipd bind --busid 1-4

Danach “attached” man das gewünschte Gerät (kein Admin nötig):

C:\Users\Nobody> usbipd.exe attach --wsl --busid 1-4

Folgende zwei Zeilen wurden als Antwort auf das Kommando ausgegeben:

usbipd: info: Using WSL distribution 'Debian' to attach; the device will be available in all WSL 2 distributions.       
usbipd: info: Using IP address 192.168.32.1 to reach the host.   

Mit usbipd.exe list sieht man, dass das Gerät nun im Zustand “attached” ist.

Wenn das Geraet in WSL2 nicht mehr gebraucht wird dann kann man es entweder abstecken oder in der CMD Box eingeben:

usbipd detach --busid <busid>

Im Debian (in WSL2) installiert man die Pakete “usbip” und “usbutils”. In usbutils ist das lsusb Kommando. In usbip steckt das Kommando usbipd für Linux. Es gibt also ein usbipd Programm für Windows und eines für Linux.

sudo apt install usbip usbutils

Danach erkennt das lsusb Kommando in Debian das USB Gerät. Die Ausgabe sollte so ähnlich sein:

hhoegl@DESKTOP-6H2PGFN:~$ lsusb 
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 10c4:ea60 Silicon Labs CP210x UART Bridge    <===== Heltec Board
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Quelle: https://devblogs.microsoft.com/commandline/connecting-usb-devices-to-wsl/

1 Zugriff auf USB Geräte

Damit man ohne sudo auf die USB Geräte zugreifen kann, muss man einen der folgenden Wege gehen:

Prinzipiell funktioniert das mit Udev unter dem virtuellen Debian genauso wie im richtigen Debian - somit eignet sich jedes Tutorial zu dieser Thematik. Allerdings muss man bei WSL2 zunächst noch den udev Service aktivieren.

Zum Aktivieren geht man so vor:

Den aktuellen Status findet man mit sudo service udev status heraus.

Falls /etc/wsl.conf noch nicht existiert, legt man die Datei an mit den folgenden drei Zeilen:

[boot]
command="service udev start"
systemd=true

Die dritte Zeile ist optional, wenn sie vorhanden ist wird der systemd aktiviert.

Um das Zusammenspiel mit Windows zu verbessern kann man auch die folgenden zwei Zeilen einfügen (Danke für den Tipp):

[interop]
appendWindowsPath=true

Nun beendet man Debian und startet es sofort neu mit dem Kommando

wsl.exe --terminate debian

Dieser Vorgang dauert einige Sekunden, danach sollte der Zugriff auf die USB Geräte auch ohne sudo möglich sein, sofern die USB Regeln installiert sind.

Falls systemd aktiviert wurde, kann man die laufenden Dienste wie folgt ausgeben:

systemctl list-units --type=service

WSL Konfiguration

Es gibt zwei Konfigurationsdateien, die am Anfang noch nicht existieren:

Quelle: https://learn.microsoft.com/en-us/windows/wsl/wsl-config

Pakete in Linux installieren

Windows Terminal

Komfortables Terminal, bei dem man Powershell und Linux in verschiedenen Tabs öffnen kann. Man kann das Terminal auch teilen wie bei einem Terminal Multiplexer.

https://learn.microsoft.com/en-us/windows/terminal/install

APT Repository

Wer häufig Pakete installiert sollte den Server in /etc/apt/sources.list auf einen Server in der Region ändern.

Literatur