I am trying to get GUIs working with WSL2, but nothing I tried works.

  1. I turned off the Firewall for home networks (just for testing).
  2. 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.
  3. In Ubuntu, I entered: export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0
  4. 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.