VDI on Ubuntu 24.04 and ThinLinc: an alternative to Windows Terminal Server (RDP) | INTROSERV

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.

Info

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

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.

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.

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

Tip

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

Tip

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.

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.

Tip

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.

VAT

  • Other

    Other

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    %
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • Other
  • canada
  • poland
  • european-union
  • france
  • germany
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria
  • austria