WSL2 GUI not working
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.
Willi
Updated on September 18, 2022Comments
-
Willi over 1 year
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 ... .
-
Ramhound about 4 yearsJust to confirm, you are indeed running
Windows 10 version 2004
(19041.153)? -
Willi about 4 yearsI 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 about 4 yearsI 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 over 3 years
cat
is unneccessary here.. useless-use-of-cat, since grep has a[FILE]
argexport 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 thoexport DISPLAY=$(awk '/nameserver / {print $2;exit}' /etc/resolv.conf):0
-
Tyler N over 3 yearsThis 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 over 3 yearsso when you
echo $DISPLAY
now do you get something different than what you mentioned getting in the original post? -
Olimjon almost 3 yearsAdding 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 over 2 yearsYour 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 about 2 yearsLink to paywall.
-
Fahri Güreşçi about 2 yearsThis 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.