How to deploy a full-fledged VDI on Ubuntu Linux and ThinLinc: an alternative to Windows Terminal Server
Introduction
If you're looking for a way to set up a remote desktop for your employees and need an alternative to RDP on Linux, ThinLinc is one of the most stable solutions for building a VDI infrastructure.
ThinLinc is a professional solution for organizing Linux-based terminal servers from the Swedish company Cendio, which has been developing solutions for terminal servers since 1992. Unlike standard VNC, it provides high-speed graphics rendering, full sound support, and forwarding of local resources (printers, smart cards, folders).
Key licensing features:
- Free version: Fully functional and free forever for up to 10 concurrent users. Ideal for small businesses or personal use.
- Unified functionality: The free version has no limitations in terms of capabilities compared to the paid version.
- LDAP Support: Use Active Directory users to log in to the terminal server
- Concurrent licenses: Not users created in the system are licensed, but concurrent sessions.
Example: You may have 50 created users, but if only 10 are working at the same time, the free version is enough for you.
Technical stack of this guide
All actions outlined in this manual were validated using the following software/hardware stack:
Component |
Version / Specification |
operating system |
Ubuntu Server 24.04.3 LTS (Noble Numbat) |
Graphical shell |
KDE Plasmashell 5.27.12 (kde-standard package) |
Terminal server |
Cendio ThinLinc v4.20.0 |
Virtual machine |
4 Core CPU, 8 GB RAM, NVMe SSD |
User |
Standard user in the sudo group |
Step 1: Prepare and update the system
Create a standard user and add it to the sudo group if it does not already exist in the system:
sudo adduser USERNAME
Replace USERNAME with your username.
Adding a user to the sudo group:
sudo usermod -aG sudo USERNAME
Replace USERNAME with your username.
System update:
sudo apt update && sudo apt upgrade -y
Installing and enabling the CUPS printing system:
sudo apt install cups ghostscript -y sudo systemctl enable --now cups
Step 2: Installing the KDE Desktop Environment
sudo apt install kde-standard -y
If you want the full suite of applications (games, office, etc.), use kde-full, but for a server, kde-standard is usually sufficient.
If a blue window appears during installation asking you to select a display manager, select sddm (native to KDE).
Reboot: After installing all packages, it is best to reboot to ensure that the X server and shell start correctly.
sudo reboot now
Step 3: Get the installation package link
Go to Cendio we bsite -> Download tab -> For administrators -> Download ThinLinc server software -> Fill out the form to receive the link

In the window that opens, right-click on Download server software to get a link to the latest version of ThinLinc. You can save it in Notepad for later installation.
.jpg)
Step 4: Download ThinLinc
ThinLinc isn't distributed through the standard Ubuntu repositories, so download it from the official Cendio website using the link you saved earlier:
wget https://www.cendio.com/downloads/server/tl-4.20.0-server.zip
Replace the link with the one you got in step #3.
Step 5: Unzip the archive and go to the folder with the unzipped files
sudo apt install unzip -y unzip tl-4.20.0-server.zip cd tl-4.20.0-server
Where tl-4.20.0-server– is the name of the archive you downloaded
Step 6: Installing ThinLinc Server
Launching the installer:ThinLinc comes with a convenient installation script that will automatically pull in the necessary dependencies.
sudo ./install-server
The installer will ask for input at certain points, for example, to 'Press Enter to continue' or to confirm specific options.
ThinLinc Server Configuration Utility
After ThinLinc installation, the server setup utility will immediately follow. It is recommended to continue with the setup.
During setup, you will be prompted to install missing packages and confirm your settings:
- Run ThinLinc setup now [Yes/no]? Yes
- Server type [Master/agent]? Master
- Automatically install the necessary packages [Yes/no]? Yes
- Do you want to continue with installation [Yes/no]? Yes
Install LDAP components so that you can log in to the system using an account within AD.
Automatically install the necessary packages [Yes/no]? Yes
Specify what should be used for external access:
Externally reachable address to use [ip/hostname/manual]? ip
Please enter the system administrator's email address:
Administrator email []? Please provide your contact email.
ThinLink offers a web interface for administering the terminal server. You can disable it later. However, for now, please enter a strong password:
Web Administration password? YOURS_RELIABLE_PASSWORD
Installing AppArmor configuration is recommended:
Install AppArmor configuration [Yes/no]? Yes
Once the installation and configuration is complete, you will receive a message confirming successful installation.
Step 7: Adding the path to sudo
To ensure that the system always finds ThinLinc commands, you need to edit the file visudo
sudo visudo
and replace the value in the line “Defaults secure_path=” with
“/sbin:/bin:/usr/sbin:/usr/bin:/opt/thinlinc/bin:/opt/thinlinc/sbin”
Step 8: Checking and Configuring Access Ports
ThinLinc operates over SSH (port 22) for primary traffic and uses ports 1010 (web administration interface) and 300 (web client).
If you have ufw enabled, allow access:
sudo ufw default deny incoming && \ sudo ufw default allow outgoing && sudo ufw allow 22/tcp && \ sudo ufw allow 300/tcp && \ sudo ufw reload
Step 9: Optimize GUI performance for remote access
A command that will create a global configuration file and force compositing and animations to be disabled for all users to improve remote desktop responsiveness.
sudo cp /etc/xdg/kwinrc /etc/xdg/kwinrc.backup 2>/dev/null ||true sudo bash -c 'cat > /etc/xdg/kwinrc << EOF [Compositing] Enabled=false OpenGLIsUnsafe=true [Plugins] blurEnabled=false contrastEnabled=false kwin4_effect_translucencyEnabled=false slideEnabled=false zoomEnabled=false [Windows] ElectricBorderDelay=0 ElectricBorderCooldown=0 [Effect-PresentWindows] BorderActivate=9 [KWin] AnimationDurationFactor=0 EOF'
Step 10: Connection
You can connect to a remote desktop in two ways: through the native ThinLinc client or directly in the browser https://YOUR_SERVER_IP:300
The client can be downloaded from the Cendio -> Download -> For users page.
.jpg)
As you can see, the client is very similar to the MS RDP client. The settings allow you to configure device forwarding and shared clipboard. Remote desktop display quality settings are also quite advanced.
Step 11 (Optional) Disabling access to the server via a web browser
Since browser access creates additional attack vectors, it is best to disable access to the web admin panel on port 1010 and access to the remote desktop web client.
This can be done by disabling the relevant services + closing ports in the firewall.
Disabling services:
# Stop the web client and admin panel sudo systemctl stop tlwebclient tlwebadm # We prohibit their autostart sudo systemctl disable tlwebclient tlwebadm
Deny access to port 300:
sudo ufw deny 300/tcp sudo ufw reload
Remember that ThinLinc uses SSH as a transport. This means that all SSH security mechanisms automatically protect your graphical desktop.
Potential problems and recommendations for hardware
Even with proper installation, there may be some nuances specific to remote desktops.
Problem #1: No sound or video lags in the browser
Reason: Ubuntu 24.04 installs browsers (Firefox, Chromium) in Snap format by default. These packages run in an isolated sandbox, which:
- Doesn't see ThinLinc virtual sound channels.
- Slower UI rendering due to containerization layers.
Example of installing Google Chrome from a .deb package:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo apt install ./google-chrome-stable_current_amd64.deb
For proper sound and smooth graphics, always install browsers from .deb packages or official repositories. Avoid Snap versions for terminal servers.
Problem #2: Image "crumbling" or lag
Reason: Weak internet connection or insufficient processor resources to compress the video stream.
- Solution: Make sure that optimization (Adaptive Compression) is enabled in the ThinLinc Client settings.
- Solution: Make sure you are using a KDE Plasma (X11) session and not Wayland.
Recommended system requirements
To ensure a truly comfortable experience when working with KDE via ThinLinc (without stuttering sound or freezing when opening browser tabs), we recommend the following VPS specifications:
Parameter |
Minimal |
Recommended (1 user) |
Processor (CPU) |
2 virtual cores |
4 virtual cores |
Memory (RAM) |
4 GB |
4 GB + |
Disk (Storage) |
40 GB SSD |
40 GB SSD / NVMe |
OS |
Ubuntu 24.04 |
Ubuntu 24.04 |
Even with a minimal configuration, a dedicated server will deliver significantly higher VDI performance. If you plan to use a terminal server as part of a business infrastructure, it's best to consider dedicated resources to ensure stable performance for a multi-user system.
ThinLinc can also use the GPU for 3D graphics processing using VirtualGL. This requires installing proprietary GPU drivers and running the vglrun command to launch applications that require GPU processing.
If you plan to use your VPS for multiple users at the same time, add 2GB of RAM and 1 vCPU core for each additional active user.