79

I have been trying to set up a RDP terminal server on precise using xrdp and have been having significant trouble getting a working configuration. When a user logs on, I need it to connect to that users existing session if it exists, otherwise starting a new session, and any started session must start LXDE. What changes to the default configuration do I need to make in order for this to work?

2
  • 1
    On my XRDP config (except I'm running Unity on desktop sessions and Unity2D for remote sessions), logging in as a user automatically picks up their old sessions. Is each user getting a new session every time they connect?
    – agc93
    May 31, 2012 at 11:58
  • 1
    The best explanation/solution I've found on the internet can be found at this location c-nergy.be/blog/?p=2879 Give it a try I hope this information help
    – gyest
    Jul 21, 2013 at 7:59

11 Answers 11

56

I had this same problem, and I just found an easy solution. I originally just installed xrdp using the standard proceedure:

apt-get install xrdp

After that, its all about your xrdp.ini file, which is located here:

/etc/xrdp/xrdp.ini

To open and edit the xrdp's configuration file use:

sudo nano /etc/xrdp/xrdp.ini

by default the first xrdp session handling script looks like this:

[xrdp1]
name=sesman-vnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1

The important line is port=-1, this makes xrdp always look for a free port to connect. If you set a fixed port here, the xrdp will always go back and connect to the same session. I changed mine so it looks like this:

[xrdp1]
name=customsessionname
lib=libvnc.so
username=myusername
password=ask
ip=127.0.0.1
port=5912

Thats it, I think you could get away with just changing the port=-1 to port=5912. My xrdp always re-connects to existing session always using the same port.

9
  • 2
    This solution works well for me, but I should point out that anyone who connects to the same machine will get the same session, even if someone else logged in under that session. Nov 17, 2013 at 22:29
  • 11
    that only works if there's already an existing session though. The first time in, there's no session so it fails to connect to port 5912.
    – stu
    Nov 2, 2014 at 0:04
  • 4
    got the same issue.. seems that by default it tries to open a connection using 5911port (you can notice it when xrpd is connecting). So I changed from port=-1 to port=ask5911. This way 5911 is used by default but you can change that port when you enter user/password while connecting (so no need to reconfigure anything in case of errors..)
    – Maxym
    Apr 16, 2015 at 8:28
  • 2
    This behavior depends strictly on vnc server implementation. Under centos i'm using tigervnc, which always joins to existing session or creates one with port=-1 setting. However, under ubuntu the default is tightvncserver, which doesn't have same behavior. Just play with vnc implementations, if anything.
    – Denys S.
    Nov 5, 2015 at 16:59
  • 1
    The default port is 5910, see askubuntu.com/a/527975/592751
    – Peter T.
    Dec 12, 2017 at 15:52
28

I'd like to improve on an existing answer. The top voted answer was to edit the xrdp.ini file to change port to a fixed value in place of the -1 wildcard to find an open port.

I tried that, but got an error connecting the first time, so ended up switching back to the -1 value. Frustration quickly set in though with the issue remaining of not resuming so I looked at the ini file again.

What worked for me, and was really just something I was curious about was this:

Edit the /etc/xrdp/xrdp.ini

Under [xrdp1] where port=-1 I noticed user name and password were set to ASK. If you set port=ask you will be given the option at the login prompt with username and password to choose a port.

Rather than install additional packages I found the easiest fix to be to set the ask option, connect the FIRST session (if I don't have one running already) on port -1 at the login with username and password.
After disconnecting the session, to resume an existing session always log in on the default port: 5910 and you will resume your existing session until you restart the remote computer or end the session when logging off.

To summarize:

  • Edit the xrdp.ini file
  • set port = ask
  • connect from the remote machine, and at login if you have no existing session, specify port -1
  • to resume a session enter the default of 5910
7
  • Worked for me. Although I will not remember 5910 going forward.
    – Vesanto
    Apr 30, 2016 at 19:04
  • 13
    I was able to successfully change the entry to: [xrdp1] . . . port=ask5910 This defaults the port to 5910 so you don't have to remember it like Vesanto said (I would never remember it either, Vesanto!) but also gives you the option to change it if you wanted to spawn a new desktop session on, say port 5911. I tested this on Ubuntu 16.04.
    – hoekma
    Nov 28, 2016 at 18:04
  • 2
    ^that is the best solution i have found as well.
    – Nacht
    Jan 6, 2017 at 0:55
  • On a freshly booted Rpi3 I started a new session with port -1 and I then came in with a different computer and used port 5910 - it picked up the same session. When you move things on one computer you can see it happen on the other.
    – SDsolar
    Jan 29, 2017 at 20:23
  • If you then do it again but give it a port number of -1 it gives you a new session.
    – SDsolar
    Jan 29, 2017 at 20:24
4

Problem is that xrdp does not always connect to the same port. In case it didn't and you forgot the port number, you could login a ssh session and find out the number by

netstat -tulpn | grep vnc

and you will get something like the following

tcp        0      0 127.0.0.1:5911          0.0.0.0:*               LISTEN      5365/Xvnc

and then you know 5911 was the port you connected to.

1
2

on the log in screen with the xrdp box when you first connect to the remote desktop there should be a drop down box, from here choose "vnc-any" then input the ip address of the computer and the password but leave the port at what it is, this should help :)

1
  • That looks like the easiest one and works for me. Great. No complicated install, compile etc.
    – josef
    Nov 24, 2013 at 8:48
2

If you encountered the problem of "password failed", you might take a look at the two issues in GitHub

Reconnect to old vnc session - VNC password failed

VNC Password failed when picking existing session

In short, they mention that specifying port number no longer works in latest design.

1

1. Modifiy you xrdp.ini:

sudo vi /etc/xrdp/xrdp.ini

2.Change the port setting port=ask-1 in your connection rule:

[xrdp1]
name=sesman-Xvnc
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=ask-1

3.Restart your xrdp Service

sudo service xrdp restart

You should see the following picture when you login by remote desktop. enter image description here

1. At first login you can see this port number. Example:5912 : enter image description here

If you forget this port number, you can using the following command to check:

netstat -peant | grep 59 | grep Xvnc

2. You can re-connect the last session by your port number. enter image description here


Ref: http://c-nergy.be/blog/?p=5305

1

As of Linux Mint/Ubuntu 20, to solve general problems with xrdp I've always found it useful to avoid installing the pre-compiled packages, and building them from source instead.

Not all the features are enabled in the stock packages: for instance the sound and the clipboard channels have to be explicitly enabled with configure switches, plus the keyboard mapping files are often outdated and some keys like the curly brackets didn't work for me. Most of the problems magically disappeared when I installed the custom compiled version.

You might want to compile and install xrdp and xorgxrdp (the xrdp session manager similar to x11rdp), following the instructions here and here, then tweak the /etc/xrdp.ini and /etc/xrdp/sesman.ini files, the latter used by Xorg(xrdp). I recommend disabling dynamic channels in the first one to lower the client and server CPU consumption.

For good measure, I use a compiled version of the client too (Remmina), just to make sure that both fit my machines like a glove.

2
  • That might be good to know, but is completely unrelated to the question. Personally, I use ms rdp client with Ubuntu 20 xrdp package just fine. Jun 8, 2021 at 12:28
  • 1
    I deemed this answer as pertinent to the question, because what the OP is trying to attain should be the out-of-the-box behavior, and if some problems arise, in many cases it could be due to outdated/incomplete configuration files or protocols or even build errors in the cross-compiled package. Jul 15, 2021 at 8:36
0

I ran into this problem on a Debian machine. Used X11RDP-o-Matic to build xrdp 0.7 packages. Prior to upgrading to systemd, xrdp session reconnect worked fine.

Looking at the process tree I could see that the sessions were no longer children of xrdp-sesman. Turned out to be a permissions issue when using systemd. Google found a patch that fixes the problem.

How do you identify a working reconnect? Run ps axf and look at the process tree for xrdp-sesman. X11rdp, xrdp-chansrv, xrdp-sessvc should all be running as a child. If they are not, xrdp-sesman will not know how to reconnect to the session.

Here's what it looks like when working:

good xrdp session process

0

Here's what I did. Make sure tigervnc-server is installed so we can use Xvnc. Launch a VNC session with the default configuration (I actually followed the Arch Linux setup guide for TigerVNC). Then configure your Xrdp to use that VNC session every time. Also set TigerVNC to startup on boot or something. This is the only VNC section in my xrdp.ini file:

[vnc-any]
name=vnc-any
lib=libvnc.so
ip=localhost
port=5901
username=na
password=YOURPASSWORD
#pamusername=asksame
#pampassword=asksame
#pamsessionmng=127.0.0.1
#delay_ms=2000
0

If using Windows Remote Desktop Client to connect to a Linux session, I've found that maintaining the same display configuration and color depth will reconnect a user to the same session. Those parameters can be adjusted by selecting "Show Options" at bottom left of the startup screen and then select the "Display" tab.

If you don't know what your display parameters were of your existing session, start a new session and then from a terminal window run ps axf | grep vnc. Your display parameters of your existing and new rdp sessions will show something like -geometry 1920x1080 -depth 16. Make note of these values, logout from your new session and then attempt another xrdp login using your discovered values.

-1

This UbuntuForum thread looks useful - I havent tested this myself - however I've copied the solution given here to complete this answer.

RealVNC setup

1. Uninstallation of the default Ubuntu VNC server (Vino):

Go to: System --> Administration --> Synaptic Package Manager Search for the "Vino" package, Mark For Removal, Apply.

2. Installation of TightVNC and XRDP:

While you are using Synaptic Package Manager, seacrh for "tightvnc" package (be careful, not "xtightvnc") and Mark For Installation. Likewise, search for the "xrdp" package and Mark also For Installation. Apply. PS: if you want, you may discard any other "vnc" package that you don't need!

3. Configuration of XRDP (Optional)

Open a terminal and type the three following commands:

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

Remove Xrdp2-Xrdp6 sections, leave only the Xrdp1 section. Your xrdp.ini should look like this:

[globals]
bitmap_cache=yes
bitmap_compression=yes
port=3389
crypt_level=low
channel_code=1

[xrdp1]
name=RDP_To_TightVNC
lib=libvnc.so
username=ask
password=ask
ip=127.0.0.1
port=-1

4. Connecting

Restart the system and you are ready to connect!

To connect from another Ubuntu machine, use: Applications --> Internet --> Terminal Server Client, type the IP of your Ubuntu VNC machine, use RDPv5 or RDP, click Connect!

To connect from a Windows-based machine, use: Start --> Run --> mstsc, type the IP of your Ubuntu VNC machine, click Connect.

When connected, use your Ubuntu user account credentials (u/n and p/w) and remotely login to your desktop.

3
  • Have you actually tested this? It looks like you have just copy and pasted the link verbatim. If you do copy and paste, please acknowledge the source in your answer.
    – fossfreedom
    May 28, 2012 at 5:56
  • @fossfreedom nope, I haven't tested but tried to help. BTW I have already mentioned source in this may help you. May 28, 2012 at 7:24
  • You perhaps should be more explicit then as to your source and the veracity of the answer. See my edit.
    – fossfreedom
    May 28, 2012 at 8:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .