NOTE: If you have Windows 11 there is now an official way to do this in WSL 2, use it if possible - see MS post here (WINDOWS 11 ONLY)
This guide will enable systemd to run as normal under WSL 2. This will enable services like microk8s, docker and many more to just work during a WSL session. Note: this was tested on Windows 10 Build 2004, running Ubuntu 20.04 LTS in WSL 2.
-
To enable
systemdunder WSL we require a tool calledsystemd-genie -
Copy the contents of
install-sg.shto a new file/tmp/install-sg.sh:cd /tmp wget --content-disposition \ "https://gist.githubusercontent.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950/raw/952347f805045ba0e6ef7868b18f4a9a8dd2e47a/install-sg.sh"
-
Make it executable:
chmod +x /tmp/install-sg.sh
-
Run the new script:
/tmp/install-sg.sh && rm /tmp/install-sg.sh -
Exit the WSL terminal and shutdown the WSL env:
wsl --shutdown
-
To open a new WSL terminal with
systemdenabled, run:wsl genie -s -
Prove that it works:
sudo systemctl status time-sync.target
Works perfectly on Debian!
Thanks!
But there is a little problem when I do
systemdstarting with PID 1 "init"
with and without being superuser:
Trying to run as user instance, but $XDG_RUNTIME_DIR is not set.starting with PID 1 systemd: (
wsl genie -s)as super user:
Trying to run as user instance, but $XDG_RUNTIME_DIR is not set.About xdg_runtime_dir:
env | grep XDG_RUNTIME_DIRXDG_RUNTIME_DIR=/run/user/1000Any kind of help would be appreciated, im very new on linux, thanks!
Note that i do not need to execute systemd because systemctl actually works fine, I just want to solve this and know what is wrong. <3