Fully implemented Multi User xrdp with xorgxrdp and pulseaudio on Ubuntu from 20.04 to 24.04 Copy/Paste and sound is working. Users can re-login in the same session. Xfce4, Firefox are pre installed.
- Matrix Build State
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 ghcr.io/lizenzfass78851/ubuntu-xrdp:latest
*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.
To automate the creation of users, supply a file users.list in the /etc directory of the container. The format is as follows:
id username password-hash list-of-supplemental-groups
The provided users.list file will create a sample user with sudo rights
Username: ubuntu Password: ubuntu
To generate the password hash use the following line
openssl passwd -1 'newpassword'
Run the xrdp container with your file
docker run -d -v $PWD/users.list:/etc/users.list
You can change your password in the rdp session in a terminal
passwd
No configuration is needed for new users just do
docker exec -ti uxrdp adduser mynewuser
After this the new user can login
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:
/etc/ssh/
holds the sshd host keys and config/home/
holds theubuntu/
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
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
.
git clone https://github.com/LizenzFass78851/ubuntu-xrdp.git
cd ubuntu-xrdp/
nano docker-compose.yml # if you want to override any default value
docker-compose up -d