Skip to content
Docker fully implemented Multi User xrdp with xorgxrdp and pulseaudio on Ubuntu 16.04/18.04
Branch: master
Clone or download
danielguerra69 Merge pull request #16 from fbartels/master
Make it possible to add additional packages at build time
Latest commit 007996a Mar 7, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
autostart reduce layers Dec 7, 2018
bin passwordhash improvement Jan 8, 2019
etc multistage May 8, 2018
LICENSE Create LICENSE Sep 10, 2018 add docker-compose.override.yml Mar 7, 2019

Ubuntu 18.04/16.04 Multi User Remote Desktop Server

Fully implemented Multi User xrdp with xorgxrdp and pulseaudio on Ubuntu 16.04/18.04. Copy/Paste and sound is working. Users can re-login in the same session. Xfce4, Firefox are pre installed.


danielguerra/ubuntu-xrdp:16.04 danielguerra/ubuntu-xrdp:18.04 or latest


Start the rdp server (WARNING: use the --shm-size 1g or firefox/chrome will crash)

docker run -d --name uxrdp --hostname terminalserver --shm-size 1g -p 3389:3389 -p 2222:22 danielguerra/ubuntu-xrdp

*note if you already use a rdp server on 3389 change -p :3389 -p 2222:22 is for ssh access ( ssh -p 2222 ubuntu@ )

Connect with your remote desktop client to the docker server. Use the Xorg session (leave as it is), user and pass.

Sample user

There is a sample user with sudo rights

Username: ubuntu Password: ubuntu

You can set a PASSWORDHASH

First create a password hash

openssl passwd -1 'newpassword'

Run the xrdp container with your hash

docker run -d -e PASSWORDHASH='$1$Cm8EQjXg$7dJeRsw6TLvgxsl3.pBRZ1'

You can change your password in the rdp session in a terminal


Add new users

No configuration is needed for new users just do

docker exec -ti uxrdp adduser mynewuser

After this the new user can login

Add new services

To make sure all processes are working supervisor is installed. The location for services to start is /etc/supervisor/conf.d

Example: Add mysql as a service

apt-get -yy install mysql-server
echo "[program:mysqld] \
command= /usr/sbin/mysqld \
user=mysql \
autorestart=true \
priority=100" > /etc/supervisor/conf.d/mysql.conf
supervisorctl update


This image uses two volumes:

  1. /etc/ssh/ holds the sshd host keys and config
  2. /home/ holds the ubuntu/ default user home directory

When bind-mounting /home/, make sure it contains a folder ubuntu/ with proper permission, otherwise no login will be possible.

mkdir -p ubuntu
chown 999:999 ubuntu

Installing additional packages during build

The Dockerfile has support for the build argument ADDITIONAL_PACKAGES to install additional packages during build. Either pass it with --build-arg during docker build or add it as args in your docker-compose.override.yml and run docker-compose build.

To run with docker-compose

git clone
cd ubuntu-xrdp/
vi docker-compose.override.yml # if you want to override any default value
docker-compose up -d
You can’t perform that action at this time.