I've been using wsl
(version 2) with genie
mod for years without issue, but one day, Windows 10 finally catch up on wsl
Windows 11 features and gives us a way to use systemD
natively.
I wanted to use the new "right way" to enable systemD
on Windows Subsystem for Linux (without genie
), and I also had a (probably related) infinite Windows RemoteApp error poping in.
- In powershell (as admin)
# list all installed distros
wsl -l -v
# destroy distros
wsl --unregister Ubuntu
wsl --unregister Debian # and so on
Note: Command Promport as admin still will work: Before uninstalling
Windows Subsystem for Linux
in settings (as below),wsl
command will also be launched throughwsl.exe
- enabling admin CMD also configure it.
- In Settings > Apps > Apps & Features
- search for
Ubuntu
(thenDebian
, etc), and if something is found, click on uninstall - search for
Linux
, and if something is found, click on uninstall on all results
Tip: Simply remove
Windows Subsystem for Linux
program to remove all the WSL products.
- In Start Menu > Turn Windows Features on or off
- Untick
Virtual Machine Platform
checkbox - Untick
Windows Subsystem for Linux
checkbox
Disabling these features will finally purge all the files about wsl other than
.wslconfig
, which is global to Windows system.
- Reboot
might have reboot between step 2) and 3) as well.
The process of installing wsl have become super straightforward.
- Installing wsl - In powershell (as admin)
# install wsl
wsl --install
Then reboot and wait for the Ubundu installation to complete and ask for username (it might takes some time).
Note: You might have to use powershell since you've removed all the components related to wsl.
2-1) Optional: Changing distribution - In powershell (as admin)
# list available distributions
wsl --list --online
# install favorite distro
wsl --install -d Debian
# set Debian as default
wsl --set-default Debian
NB: wsl --set-default-version 2
is not needed anymore.
- Enabling systemD support - Inside wsl
- Launch your distribution
- Edit
/etc/wsl.conf
(or create the file if it doesn't exist)
[boot]
systemd=true
[interop]
appendWindowsPath = false ; Optional: remove windows from PATH (autocompletion)
Note:
appendWindowsPath = false
will disable path writes as like you've done in Windows, like...
cd C:\Windows\System32
will throw error when you set it.
- Clean rebooting - In powershell (as admin)
# clean shutdown
wsl --shutdown
Great success! 🎉 You have now enabled systemD
in wsl
natively. You can test it with sudo systemctl status time-sync.target
(inside your Linux distribution).
NB: System wide configuration file .wslconfig
will not be deleted/reseted, you would have to do it manually.
Let me know if I missed anything, I'll be glad to update this gist.