Linux On Windows - WSL With Desktop Environment Via RDP - DEV Community ? - ?? - ?

Download as pdf or txt
Download as pdf or txt
You are on page 1of 17

Robin Kretzschmar

Posted on Jul 17, 2019 • Updated on Aug 22

Linux on Windows: WSL with Desktop


Environment via RDP
#windows #wsl #linux #configuration

WSL (Windows Subsystem for Linux) is very common these days especially with the new
that Windows will ship a Linux kernel with WSL 2.0!

Installing a Linux distro as WSL is easy via the Microsoft App Store and there are plenty of
tutorials out there for it.

Most of the resources cover the access via Shell, Terminal, Hyperterminal or other console
based tools to the WSL.
Running GUI software is possible and there are resources describing how to archieve this
via VcXsrv (see chapter in this post of mine).

But what if you:

Want to have/access a Desktop environment on WSL?


You can use any Desktop Environment you want, I will be using Xfce in this example
because it is lightweight.
Here is the quick rundown of all commands and steps, explained in the sections below.
One is for Kali Linux, the other is for the Debian based distros (Debian, Ubuntu, ...).

For Kali:

sudo apt update && sudo apt -y upgrade


sudo apt -y install kali-desktop-xfce
sudo apt-get install xrdp
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
sudo /etc/init.d/xrdp start

EDIT: 08/2022
As Elvis Van mentioned in the comments, there is a package for Kali linux now targeting
specifically this case: kali-win-kex. It takes care of the full setup of all Kali components and
configurations to give you the Kali Desktop experience under WSL2.

For other debian based distros:

sudo apt update && sudo apt -y upgrade


sudo apt -y install xfce4
sudo apt-get install xrdp
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
sudo /etc/init.d/xrdp start

And then connect via RDP localhost:3390 to your desktop.


Detailed steps
Updating the system and installing Xfce4

sudo apt update && sudo apt -y upgrade

sudo apt -y install kali-desktop-xfce

sudo apt -y install xfce4


The first command updates the source list and the packages. Always important, I will not
explain this.
The sudo apt -y install kali-desktop-xfce installs a Kali Linux specific version of Xfce4
and sudo apt -y install xfce4 will install the Xfce4 package for debian based distros.

Installing Xrdp

sudo apt-get install xrdp

Xrdp is an open source remote desktop solution and also very lightweight and easy to
configure. This command will install the package and setup the default configuration with
port 3389.

Configuring Xrdp

sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak


sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
sudo /etc/init.d/xrdp start

Copy the config file as backup before the changes, change the port from 3389 to 3390
and for quality reasons increase the bpp from 24 to 128. You can play with those settings
but since this is a local connection, the speed should not be worse with those settings.
And finally restarting the xrdp service to apply the changes.

Now you can connect via localhost:3390 and the credentials of your WSL account via
RDP! 💪
Why the port change from 3389 to 3390?

Two reasons: security and sometimes port 3389 is used by a process on wsl and you get
the message

Your computer could not connect to another console session on the remote computer
because you already have a console session in progress.

Benefits of RDP here


Even though you can run GUI software via XServer in a window, sometimes it is more
convenient to have the full desktop environment accessible.
Also you can restore a previously disconnected session easily and do not have to close the
console (let processes running for example).

Let me know your thoughts on this topic!

Top comments (61)

liyiliang13 • Jul 16 '20


Hello, I had no problem login to the Xrdp desktop. However, when I run gedit in terminal, an
error pops out:
(gedit:28949): Gtk-WARNING **: 22:46:09.321: cannot open display: 172.28.240.1:0.0

However it is okay if I double click a text file a gedit GUI would run without problem. I have
tried export DISPLAY=:0.0 but no luck. Any ideals?

Robin Kretzschmar • Jul 16 '20

You need to find out the display which the X server assigned.
Maybe you have luck with:

cat /proc/$pid/environ | tr '\0' '\n' | grep ^DISPLAY=

Can you try that?

avanishsubbiah • Feb 24 '20

Hello, I followed the instructions for other debian based distros because I am using Ubuntu
18.04 on WSL 2. I am able to get to the Xrdp login in page; however, as soon as I type in my
WSL credentials it closes out back to the RDP window.

Muhammad Ridwan Hakim • Apr 30 '20 • Edited on

In Ubuntu WSL:
sudo apt-get purge xrdp

then

sudo apt-get install xrdp


sudo apt-get install xfce4
sudo apt-get install xfce4-goodies

configure :
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
echo xfce4-session > ~/.xsession
sudo nano /etc/xrdp/startwm.sh
comment these lines to:
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession

add these lines:


# xfce
startxfce4

sudo /etc/init.d/xrdp start

Now in Windows, use Remote Desktop Connection


localhost:3390
then login with Xorg, fill in your username and password.

Ravil Nugmanov • Jun 21 '20

Hi,
First I followed original instructions, but after connecting over RDP and entering login
credentials, it was closing the RDP session immediately.
Then I run all commands from Ridwan's post, and now it works well!
Thank you Robin and Ridwan!
PS: I have Ubuntu 20.04 installed in WSL 2.

Robin Kretzschmar • Jun 21 '20

It seems like newer versions of wsl are having this behavior, good that Ridwan shared
his solution and you got it working with it 😊

bagoes • Jun 30 '20

I have run Ubuntu with xfce on WSL1 using VcXsrv, but can't use the browser. I tried to
update Windows to be able to try WSL2, it turns out that xfce could not run due to
display problems. Finally here I found the solution by Ridwan, of courser Robin also
who made the tutorial thread, as well as other commentators. Thanks.

Vinicius Martins • Jan 30 '21


Thaaaanks! It Worked

wenrei • Oct 24 '20

Superb, thanks! Editing the startwm.sh file solves the problem of closing the rdp session
after entering the login credentials.
FYI: It only works on Ubuntu 20.04, Ubuntu 18 wouldn't work for me

Myron • Dec 14 '20

Thank-you. Worked perfectly. :-)

r33 • Jun 30 '20

Those instructions did the trick for me. :)


Thank you very much.

Mohammad Abubakar Atiq • May 16 '21

I just change the port to 3400 i hope it dont effect the server but this error is coming up.
Any recommendations?

Muhammad Ridwan Hakim • May 16 '21

which error?

Robin Kretzschmar • Feb 24 '20

Can you open a wsl command line end check the logs right after this happens?
I'd check at least those logs:
tail -n 100 /var/log/syslog
tail -n 100 /var/log/xrdp-sesman.log
tail -n 100 var/log/sesman.log

Connor McCarroll • Mar 9 '20


I have the same issue.
/var/log/syslog and /var/log/sesman.log don't exist for me, but /var/log/xrdp-
sesman.log contains the following:

[20200309-11:24:30] [DEBUG] libscp initialized


[20200309-11:24:30] [DEBUG] Testing if xrdp-sesman can listen on 127.0.0.1 port 3350.
[20200309-11:24:30] [DEBUG] Closed socket 0 (AF_INET6 ::1 port 3350)
[20200309-11:24:30] [INFO ] starting xrdp-sesman with pid 15356
[20200309-11:24:30] [INFO ] listening to port 3350 on 127.0.0.1
[20200309-11:24:54] [INFO ] A connection received from ::1 port 9186
[20200309-11:24:55] [INFO ] ++ created session (access granted): username pyro, ip ::ff
[20200309-11:24:55] [INFO ] starting Xorg session...
[20200309-11:24:55] [DEBUG] Closed socket 8 (AF_INET6 :: port 5910)
[20200309-11:24:55] [DEBUG] Closed socket 8 (AF_INET6 :: port 6010)
[20200309-11:24:55] [DEBUG] Closed socket 8 (AF_INET6 :: port 6210)
[20200309-11:24:55] [DEBUG] Closed socket 7 (AF_INET6 ::1 port 3350)
[20200309-11:24:55] [INFO ] calling auth_start_session from pid 15381
[20200309-11:24:55] [DEBUG] Closed socket 6 (AF_INET6 ::1 port 3350)
[20200309-11:24:55] [DEBUG] Closed socket 7 (AF_INET6 ::1 port 3350)
[20200309-11:24:55] [INFO ] /usr/lib/xorg/Xorg :10 -auth .Xauthority -config xrdp/xorg.
[20200309-11:24:56] [CORE ] window manager (pid 15382) did exit, cleaning up session
[20200309-11:24:56] [INFO ] calling auth_stop_session and auth_end from pid 15381
[20200309-11:24:56] [DEBUG] cleanup_sockets:
[20200309-11:24:56] [DEBUG] cleanup_sockets: deleting /var/run/xrdp/sockdir/xrdp_chansr
[20200309-11:24:56] [DEBUG] cleanup_sockets: deleting /var/run/xrdp/sockdir/xrdp_chansr
[20200309-11:24:56] [DEBUG] cleanup_sockets: deleting /var/run/xrdp/sockdir/xrdpapi_10
[20200309-11:24:56] [INFO ] ++ terminated session: username pyro, display :10.0, sessi

I'm not entirely sure what's going on here. Any ideas?

Robin Kretzschmar • Mar 10 '20

Sorry no idea just from the logs.


Can you please post the content of your xorg.conf file?
Maybe this gives a hint.

Connor McCarroll • Mar 10 '20

Sure, here it is:

Section "ServerLayout"
Identifier "X11 Server"
Screen "Screen (xrdpdev)"
InputDevice "xrdpMouse" "CorePointer"
InputDevice "xrdpKeyboard" "CoreKeyboard"
EndSection

Section "ServerFlags"
Option "DontVTSwitch" "on"
Option "AutoAddDevices" "off"
EndSection

Section "Module"
Load "dbe"
Load "ddc"
Load "extmod"
Load "glx"
Load "int10"
Load "record"
Load "vbe"
Load "xorgxrdp"
Load "fb"
EndSection

Section "InputDevice"
Identifier "xrdpKeyboard"
Driver "xrdpkeyb"
EndSection

Section "InputDevice"
Identifier "xrdpMouse"
Driver "xrdpmouse"
EndSection

Section "Monitor"
Identifier "Monitor"
Option "DPMS"
HorizSync 30-80
VertRefresh 60-75
ModeLine "1920x1080" 138.500 1920 1968 2000 2080 1080 1083 1088 1111 +hsync -vsyn
ModeLine "1280x720" 74.25 1280 1720 1760 1980 720 725 730 750 +HSync +VSync
Modeline "1368x768" 72.25 1368 1416 1448 1528 768 771 781 790 +hsync -vsync
Modeline "1600x900" 119.00 1600 1696 1864 2128 900 901 904 932 -hsync +vsync
EndSection

Section "Device"
Identifier "Video Card (xrdpdev)"
Driver "xrdpdev"
EndSection

Section "Screen"
Identifier "Screen (xrdpdev)"
Device "Video Card (xrdpdev)"
Monitor "Monitor"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "640x480" "800x600" "1024x768" "1280x720" "1280x1024" "1600x900" "1920x
EndSubSection
EndSection

Robin Kretzschmar • Dec 26 '20

You could start analyzing it by checking the logs. Open your wsdl env in powershell and
check logs located at /var/log for clues.

Elvis Van • Aug 17

update on 8/2022, there's a new kali-specific package for this called kali-win-kex, it's been
pretty smooth and a lot more easy to setup than this

Robin Kretzschmar • Aug 22

Thanks! I updated the post referencing your comment.

linuksfan • May 23 '20 • Edited on

Hi, I tried the tutorial, posts by M. Ridwan Hakim, Winson Chao.


I'm noob. I have Windows 10 Home and Debian on WSL.
Can you help ??

After entering the username and password, a window pops up:

Connection Log
connecting to sesman ip 127.0.0.1 port 3350
sesman connect ok
sending login info to session manager, please wait...
login failed for display 0

Robin Kretzschmar • May 24 '20


I found this issue related to Kali Linux on WSL and since Kali is based on Debian, please
check the issue with the comments and try the solution that worked out in their case.

They changed the Xorg backend to Xvnc to solve this.

linuksfan • May 23 '20

How to insert a picture ??

Muhammad Ridwan Hakim • Jun 4 '20

login failed means, you can't login to xorg session, try reset your account password in
ubuntu wsl.
passwd username or sudo passwd username.

Simon Oates • Jan 30 '21

This error is because Windows 10 home edition doesn't all RDP. I'm going to wait until the
MS GUI release which should be in March 2021

Umar • Jun 1 '21

No it doesn't make a difference whether you're on Home or Professional; you can still
connect to RDP, even on Android. The xrdp server is running on WSL, not the main
Windows, so it isn't affected. I have Kubuntu Desktop running perfectly on Windows 10
Home Edition. For me, that message comes up when I put in the wrong password.

Umar • Jun 1 '21

Proof:

Winson Chao • May 20 '20

I have the same issue that the RDP window is closed as soon as I type in my credentials in
Xrdp login page. It's already resolved by:

echo xfce4-session > ~/.xsession


Cameron • Jun 1 '20

This worked

neuquenfr • Jul 30 '20

Hi. I'm absolutely new in this and followed your instructions step by step.
The last line of the process shows:

Starting Remote Protocol server [OK]

However, trying to access my Localhost:3390 (or through my local IP address) returns an


ERR_CONNECTION_REFUSED error on Chrome ver. 84.0.4147.105
or
on Firefox ver. 79.0, a blank page with some special characters on it.
(Win 10 PRO / 2004)

Could you please help me?

Many thanks in advance! (sorry if this comment is displayed twice)

Robin Kretzschmar • Jul 30 '20

Hey neuquenfr, the port 3390 is the port for RDP (Remote Desktop Protocol) connection
so you should use remote desktop to connect to your desktop environment within the
WSL.

You can't use a Browser for that.

One way would be to search for mstsc in Cortana or the start menu and connect with this.

neuquenfr • Jul 30 '20

Thank you so much, Robin, for your prompt response.

It works, now.

Great help!
Brett Morgan • Aug 15 '20

Awesome article, thanks! Helped clarify a few things after dismissing WSL2 a while back,
updates dont seem to work as well if I'm connected through my VPN service, any idea why
that is? It doesn't get all the repo packages but after i disconnect from the VPN it upgrades
fine, kind of weird!

Robin Kretzschmar • Aug 18 '20

This sounds strange. My first guess would be your VPN provider blocks some of the
needed DNS records from resolving or anything else that changes during your VPN
connection.

graziamk • Feb 11 '20

I just really wanted to thank you. Your post was tremendously helpful because it solved a
WSL problem that I've been working on for two days. I was getting very strange errors from
xfce4 and xrdp (no DISPLAY, no console, etc.), and read through hours' worth of posts, and
nothing solved my problem. I reinstalled WSL2 about 7 times, with different attempts, the
problem remained. The changes to the xrdp.ini script that you mentioned both solved the
issue AND allows me to use localhost to RDP into WSL2 (I certainly was tired of changing
the RDP IP almost daily). Can't get better than that. I owe you cofee!!

Robin Kretzschmar • Feb 11 '20 • Edited on

I'm really happy to read that my article was able to help you solve the problem, I know the
feeling of being stuck with such things and searching for days too well :)

Buy me a coffee

Matt Morrison • May 22 '21

Is there a way to modify this procedure to use GNOME instead of xfce? I've tried putting
gnome-session in ~/.xsession instead of startxfce4 , as well as anything else I can think of,
but it's not working.
hussainisaiduabubakar • Jan 25 '21

I have followed all the above instruction and it works till when I log in my credentials then
after that it output 'unable to contact settings server, failed to execute child process "dbus-
launch" (no such file or directory)' pls I need it been trying to fix it for months now,
thank u

Robin Kretzschmar • Jan 25 '21

This reddit thread seems to have a solution that worked for a couple of people, maybe try
it with this:

sudo apt-get install dbus-x11

hussainisaiduabubakar • Jan 25 '21

I have followed all the above instruction and it works till when I log in my credentials then
after that it output 'unable to contact settings server, failed to execute child process "dbus-
launch" (no such file or directory)' pls i need it been trying to fix it for months now,
thank u

hussainisaiduabubakar • Jan 25 '21

hello, pls I followed the procedure u gave up but when I log in to RDP after putting in my
credentials then it will go blank and output a message, 'unable to connect settings server.
failed to execute child process"dbus-launch" (no such file or directory)'

hussainisaiduabubakar • Jan 25 '21 • Edited on

pls i have followed all the procedure but after assigning my credentials is now showing
'unable to connect settings server, failed to execute child process "dbus-launch" (no such
file or directory)' can anyone help me solve this issue.
thank u

lefty-kreouzis • Dec 20 '20


I installed configured xrdp and xfce4
I started xrdp and can connect using remote desktop
I can log in but the session is not starting - just a blank green background and eventually an
error message

Connectiong to sessman ip 127.0.0.1 port 3350


sessman connect ok
sending login info to session manager, please wait...
started connecting
connection problem, giving up
some problem

neuquenfr • Jul 30 '20 • Edited on

Hi. I'm absolutely new in this and followed your instructions step by step.
The last line of the process shows:

Starting Remote Protocol server [OK]

However, trying to access my Localhost:3390 (or through my local IP address) returns an


ERR_CONNECTION_REFUSED error on Chrome ver. 84.0.4147.105
or
on Firefox ver. 79.0, a blank page with some special characters on it.
(Win 10 PRO / 2004)

Could you please help me?

Many thanks in advance!

View full discussion (61 comments)

Code of Conduct • Report abuse

🌚 Browsing with dark mode makes you a better


developer.
It's a scientific fact.
Robin Kretzschmar

Started coding at the age of 13, now a professional software engineer and Scrum Master, creating
and maintaining enterprise solutions. Eat - Sleep - Code - Lift - Repeat 💪🏾

LOCATION
Mannheim, Germany
WORK
Senior Software Engineer, SCRUM Master
JOINED
Nov 14, 2017

More from Robin Kretzschmar

Windows 10 FluentTerminal
#windows #terminal #productivity #wsl

How often do you switch your distro?


#discuss #linux

You might also like