WSL2 GUI not working
I am trying to get GUIs working with WSL2, but nothing I tried works.
- I turned off the Firewall for home networks (just for testing).
- I started Vcxsrv with the following options: Multiple Windows, Display Number: -1, Start no client, Clipboard (with Primary Selection), Native OpenGL and Disable access control.
- In Ubuntu, I entered:
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
- Then I also entered:
export LIBGL_ALWAYS_INDIRECT=1
After having done that, I tried to execute some programs that used to work under WSL1.
In the case of nemo
, I get the following error:
Unable to init server: Could not connect: Connection refused
Could not parse arguments: Cannot open display:
When trying to run gedit
, I get the following error:
Unable to init server: Could not connect: Connection refused
(gedit:6704): Gtk-WARNING **: 01:07:05.762: cannot open display: 172.19.64.1:0
Entering echo $DISPLAY
yields the following output: 172.19.64.1:0
I have also uninstalled Ubuntu, manually deleted the remnants from AppData and made a clean reinstall of Ubuntu. In case that is important: I did not create a UNIX account but use root (both before and after reinstalling Ubuntu so there should be no permission issues on the Ubuntu side).
EDIT 1: I also tried to run both Vcxsrv and Ubuntu as administrator, just to rule out any permission problems on the Windows side of things.
I probably should also add, that I am a Windows Insider (fast ring) and that I have this problem ever since I first tried WSL2 about half a year ago. Forcing me to always downgrade to WSL1 since browsing files without Nemo using just the terminal is a real pain in the ... .
As per wiki WSL - Ubuntu Wiki you can do the following:
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 # in WSL 2
export LIBGL_ALWAYS_INDIRECT=1
To answer my own question in case someone has a similar problem. If I use something like this:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
Running GUI programs simply won't work as they do not seem to find the Xserver (I tried two of them). However, if I manually set the IP address to
export DISPLAY=IPv4_address_of_host:0
it works flawlessly.
I honestly do not know why the first approach seems to work for many if not most people but not for me. But I tried it on three different physical machines and the first approach worked on neither. And neither did any variant of that code I could find on the Internet. I must be a very unlucky man :(.
Anyways, if you have the same problem as me, you should tell your router to always assign the same IP-address to your PC. That way, you can tell your WSL distribution that it should always use the same IP-address which enables you to automate the export DISPLAY=IPv4_address_of_host:0
step.