How To: Configure a Windows Profile Shared WSL2 Instance
"So ein Mist - wie kann ich auf meine Daten und Konfigurationen in der erstellten WSL-Instanz, in meinem anderen Windows Userprofil zugreifen".
Diese ärgerliche Fragestellung hab ich mir gestellt, als ich ein weiteres Userprofil für den Livestream-Content benötigte. Mir war wichtig, eine Trennung zwischen den persönlichen Daten und den im Livestream produzierten, für die ganze Welt sichtbaren Daten zu erreichen. Da ist man doch mal schnell mit einem Klick im Explorer, in den Urlaubsbildern oder bei der letzten Steuererklärung. Das muss - nein, darf nicht passieren!
Unter den Anwendungen die ich im Livestream vorhabe zu nutzen, war auch das WSL (Windows Subsystem für Linux) zu finden. Erstellt man nun eine neue WSL-Instanz, wird das Image dem Userprofil zugeordnet, das aktuell angemeldet ist.
Damit haben wir das Problem, dass in einem anderen Userprofil diese Instanz erst mal nicht sichtbar bzw. nutzbar ist.
Mit Zugriff auf die Registry des Windows-Host-Systems und der Änderung des Pfades des WSL-Images erhöhen sich die Lösungschancen jedoch immens.
Zu Beginn müssen für die Nutzung der WSL generell folgende Voraussetzungen gegeben sein:
- Administrative Rechte auf dem Host
- Windows Subsystem for Linux (WSL2!) wurde erfolgreich installiert
- Benötigtes Windows Features "Virtual Machine Platform" wurden aktiviert
- Es wurde sichergestellt, dass Virtualization im Bios aktiviert wurde
Passt das alles?, dann kann es losgehen:
Um die Erklärung einfach zu halten beginnen wir mit der Installation einer jungfräulichen Ubuntu Instanz über den Microsoft Store, die wir nachher in WSL nutzen und konfigurieren wollen.
Nach der Installation können wir über den Start-Button das Ubuntu über WSL starten. Alternativ lässt sich das installiert Ubuntu auch über die Windows 10 Suchleiste finden.
Mit ein paar Klicks und der Angabe eines Usernames und Passwortes ist die Instanz auch schon bereitgestellt. Wir können die Instanz danach erst mal schließen und uns auf den aktuellen Dateipfad des Images fokussieren.
Den Dateipfad bekommen wir über folgenden Registry-Schlüssel heraus
Computer\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Lxss\
Im Lxss-Schlüssel befindet sich der Name "BasePath" mit dem Wert, welcher den aktuellen Ablageort des Ubuntu-Images angibt.
In unserem Beispiel:
C:\Users<USERNAME>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState
Folgen wir dem Pfad über den Datei Explorer finden wir dort die .vhdx-Datei vor
Die virtuelle Festplatte (vhdx = virtual hard disc v2) liegt in AppData, an einem Speicherort, der in den meisten Fällen nur vom aktuell angemeldeten User selbst erreicht werden kann. Um das auf der Festplatte befindliche Ubuntu-System für andere User auf dem Host ebenfalls zugreifbar und nutzbar zu machen, bietet sich an dieser Stelle der Öffentliche Ordner von Windows 10 an . Denn auf den Ordner haben alle in Windows registrierten Userkonten zugriff. Der Ordner befindet sich im Pfad C:/Users/Public. Alle bereits darin befindlichen, als auch neu erstellte Unterordner oder Dateien in der Verzeichnisstruktur sind wie erwähnt für alle User zugänglich.
Im Testfall werden wir die ext4.vhdx von unserem userspezifischen AppData Ordnerpfad in den neu erstellten Ordner "Ubuntu-WSL" im bereits vom System bereitgestellten Unterordner "Öffentliche Dokumente" kopieren. Achtet darauf keine Leerzeichen in der kompletten Pfadangabe bis zur eigentlichen Datei einzufügen.
Für alle Eventualitäten sollte ihr die Originaldatei am Ausgangsort aber weiterhin vorhalten.
Wie sich vielleicht schon vermuten lässt, muss der Wert des "BasePath im Registrierungsschlüssel der neu erstellten WSL-Instanz auf den neuen öffentlichen Speicherort geändert werden.
Am besten nutzt ihr den Präfix der erweiterten Länge für Pfade (Extended-length path) gefolgt vom Pfad bis zur Datei:
\ \ ? C:\Users\Public-Documents\WSL-Ubuntu
Dann sollte die Pfadauflösung der vhdx-Datei in einer tief, verschachtelten Ordnerstruktur unter dem öffentlichen Hauptordner ebenso möglich sein.
Der Registrierungsschlüssel ist im Hauptschlüssel Hkey_Current_User. Und dieser beinhaltet die Konfigurationsdateien für den momentan angemeldeten User. Folglich ist dieser identische Schlüssel auf einem anderen Userkonto an der Stelle noch nicht vorhanden. Dafür exportieren wir den Registrierungsschlüssel und speichern ihn kurzfristig mit in den Ordner Ubuntu-WSL im Öffentlichen Dokumenten Ordner, um ihn später vom anderen Userkonto in dessen Registry-Konfiguration einfach zu importieren.
Ist der Wert geändert und der Registrierungsschlüssel erfolgreich exportiert, könnt ihr den Registry-Editor schließen.
Als nächstes müsst ihr euch mit dem gewünschten, anderen Userkonto anmelden, über das ihr die geteilte WSL-Instanz nutzen wollt.
Navigiert über den Datei-Explorer zum Ablageort des exportieren Registrierungsschlüssel.
Mit einem Klick auf die exportierte regedit-Datei und der administrativen Freigabe wird der Schlüssel an der richtigen Stelle in die Registry importiert.
Nach dem Neustart des Hosts solltet ihr über beide (später vielleicht auch mehrere) konfiguriert Userkonten hinweg die gleiche WSL-Instanz "Ubuntu" nutzen können. Achtet beim Anmelden über die CLI darauf, den ursprünglich angegebenen Username mit anzugeben.
wsl -d "Ubuntu" -u Username
Andernfalls bekommt ihr ohne eine administrative Kommandozeile/Powershell-Konsole eine Warnung mit "Zugriff verweigert."