WSL2 GUI not working

28,221

Solution 1

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

Solution 2

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.

Share:
28,221
Willi
Author by

Willi

Updated on September 18, 2022

Comments

  • Willi
    Willi over 1 year

    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 ... .

    • Ramhound
      Ramhound about 4 years
      Just to confirm, you are indeed running Windows 10 version 2004 (19041.153)?
    • Willi
      Willi about 4 years
      I am a Windows Insider (fast ring). So WSL2 is available for months now (at least for me). But I have failed to get the GUI working for at least half a year now (and therefore always downgraded back to WSL1). So it is not a bug in my current build. My OS Version is 2004 and my OS build is 19587.1000. Windows update is currently downloading build 19592.1001.
    • Willi
      Willi about 4 years
      I also tried pretty much every variation of export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 I could find on the Internet.
  • dza
    dza over 3 years
    cat is unneccessary here.. useless-use-of-cat, since grep has a [FILE] arg export DISPLAY=$(grep -F nameserver /etc/resolv.conf | awk '{print $2}'):0 the -F is to use fixed strings (e.g. no regular expressions) so grep runs faster. I like the awk solution better tho export DISPLAY=$(awk '/nameserver / {print $2;exit}' /etc/resolv.conf):0
  • Tyler N
    Tyler N over 3 years
    This has good potential to help the question asker, but due to possibility for Link Rot, it is preferable to not rely on the link and always recite the information in the link in your answer, providing the link only as a source. It would be great if you could update your answer as such.
  • Hasse1987
    Hasse1987 over 3 years
    so when you echo $DISPLAY now do you get something different than what you mentioned getting in the original post?
  • Olimjon
    Olimjon almost 3 years
    Adding an inbound rule is the way to go here. Here is how to do it: 1. Identify the IP address of WSL2 instance (example: 123.123.123.123) 2. Add an inbound rule - Rule type: program - Program: path to X-server app - Action: allow connection - Profile: tick all - Add name Once created, click on properties of the rule and add remote IP address scope: - 123.123.0.0 - 123.123.255.255
  • Community
    Community over 2 years
    Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
  • Maxwell175
    Maxwell175 about 2 years
    Link to paywall.
  • Fahri Güreşçi
    Fahri Güreşçi about 2 years
    This is the most correct answer, but downvoted. @Willi you can mark this as approved answer. It is necessary to turn off Windows Defender or manually enter the modem IP of windows.