Running Linux GUI with WSL
WSL is great for running Linux shell on the Windows machine. You have access to the awesome Linux tooling and apps that every developer loves.
Problem arises when we want to run an app that requires graphical interface. Currently WSL does not support any graphical interface officially but as always there are some ways to bypass the limitations. As far as I am aware, this can be achieved in two ways:
- Install X Sever for Windows
- Use remote desktop (e.g.
XRDP
)
I have tried both solutions and none of them is perfect. Remote desktop connection is laggy and adds a lot of overhead but it is still more reliable and effective than trying to use the X Server (e.g. Xming or VcXsrv). X Server solution requires more fine tuning, fiddling with the configuration and takes more time to setup. It also often crashes with very exciting traceback that hurt your eyes.
Setting up XRDP
XRDP
is an open-source Remote Desktop Protocol server that provides a graphical login to remote machines. Windows machines have it already preinstalled as a Remote Desktop Connection
app. In Linux based systems it must be installed.
$ sudo apt-get update && apt-get install xrdp
After XRDP
is installed, a graphical interface for Linux must be installed. I found online that people start with the lightweight desktop environment xfce4
. It doesn't look amazing but it does the job.
$ sudo apt-get install xfce4
After all required components are installed, it's time for the configuration. First xfce4
must be set as the default X server. This is achieved by creating the ~./xsession
file and adding the custom interface executable name. For more information check the CustomXSession man page.
$ echo "xfce4-session" > ~/.xsession
Fine tunning the XRDP
By default 3389
port. If you want to customize it, you can do that in the config file.
Make sure that the port specified port is open and that the connection can pass through the Windows firewall. You will be asked by the windows defender first time the connection will be established.
$ sudo vim /etc/xrdp/xrdp.ini
Connect!
After we're happy with the setup, we need to start the XRDP
server.
$ sudo service xrdp start
Server should start and you will be able to see it running.
Check the IP of your local Linux server by running:
$ hostname -i
This will print out the IP you should connect to. Copy the printed output and combine with the port number the XRDP
is exposing. Now start the Remote Desktop Connection
app in Windows and connect to the Linux.
If you get connection errors or messages about console session already in progress, double check the IP, port and if the XRDP
is running as that's the most common issues you can encounter during the setup.