Ubuntu Server To Desktop

Ubuntu Server To Desktop

Reading time1 min
#Linux#Ubuntu#OpenSource#UbuntuServer#DesktopEnvironment#XFCE

Converting Ubuntu Server to a Responsive Desktop: Engineering Notes

Upgrading an existing Ubuntu Server environment to support desktop workflows doesn’t necessarily mandate a fresh install. In production and lab setups, retaining the minimal, hardened server build—while layering on only essential desktop components—can minimize resource overhead and avoid undoing careful server customizations. This guide targets Ubuntu Server 20.04 LTS and later, but most steps work identically on newer releases.


Context: Why Overlay a Desktop on Ubuntu Server?

System administrators may encounter edge cases: need to run a software package requiring a GUI, provide local troubleshooting capability, or reuse old hardware as a hybrid server/desktop. Reinstalling from scratch or deploying a parallel Ubuntu Desktop instance can be wasteful. Instead, extend the server.

“Don’t solve with a new VM what you can achieve by adapting the current image.”


Pre-requisites

  • Ubuntu Server 20.04 LTS or newer (tested up to 22.04.4)
  • sudo access
  • Stable network connectivity
  • Basic storage allocation (minimum 2.5GB free advised; more for heavier desktop environments)
  • Ensure no mission-critical loads are running during major package upgrades

1. Update All Repositories Before Proceeding

Out-of-date repositories or packages often trigger conflicts with GUI meta-packages. To avoid partial installs:

sudo apt update
sudo apt upgrade -y

Scan output for held packages or dependency errors. Address before continuing.
Example problem:

E: Unmet dependencies. Try 'apt --fix-broken install' with no packages.

2. Desktop Environment (DE) Selection

Several lightweight DEs deploy cleanly onto servers. The XFCE stack offers a strong balance: mature codebase, low memory overhead, customization, and active maintenance.

EnvironmentRAM (idle)Comment
XFCE~400MBStable, widely used
LXQt~320MBLowest footprint, less features
MATE~500MBFamiliar, moderately heavier
GNOME~900MBFeature-rich, resource-heavy

Notably, mixing GNOME or KDE onto a minimal server can cause excessive package pulls and regression in performance. For headless VMs, even XFCE may be overkill.


3. Installing XFCE

Core XFCE desktop and utilities (“xfce4-goodies”) together create a useable, uncluttered workspace.

sudo apt install xfce4 xfce4-goodies -y

Note: This does not include a display/login manager. Also, XFCE will not automatically configure systemd’s default target—fix below.


4. Display Manager (Login Screen)

lightdm is the logical default for XFCE due to its modularity and stability. Install:

sudo apt install lightdm -y

If prompted:

Default display manager: 
[*] lightdm
    gdm3

Choose lightdm.
Switch later with:

sudo dpkg-reconfigure lightdm

Known issue: Conflicts can arise if another DM is running (e.g., previous gdm3 install). Remove conflicting DMs if startup fails:

sudo apt purge gdm3 sddm

5. Set the Graphical Systemd Target

By default, Ubuntu Server remains in multi-user (console-only) target.

sudo systemctl set-default graphical.target

To revert:

sudo systemctl set-default multi-user.target

Gotcha: If the system is headless (no GPU/monitor), enabling graphical.target may hang boot on some cloud VM types.


6. Reboot and Initial Test

sudo reboot

If setup succeeded: lightdm greeter should appear at login.
If system drops to text console (tty1), possible display manager or driver issue. Inspect logs:

journalctl -u lightdm

Example failure:

Failed to start Light Display Manager: No screens found.

Check for missing X server / GPU driver.


7. Add Core Desktop Applications

A practical desktop isn’t just a window manager. Baseline tooling, often overlooked in server-to-desktop conversions:

FunctionPackage Example
Browserfirefox
File managerthunar (included)
Terminalxfce4-terminal
Editormousepad or vim-gtk
Office suitelibreoffice
Screenshotxfce4-screenshooter

Sample install:

sudo apt install firefox mousepad libreoffice xfce4-screenshooter -y

Side note: If using minimal server images, dependencies must be resolved manually (fonts, theme engines, printer drivers as needed).


Remote Access: RDP on a Server-Desktop Hybrid

To enable GUI logins remotely:

sudo apt install xrdp -y
sudo systemctl enable --now xrdp

Open port 3389/tcp on ufw if firewalling:

sudo ufw allow 3389/tcp

Connect using standard RDP clients (mstsc.exe on Windows, Remmina on Linux).
Non-obvious tip: xrdp’s default session sometimes launches a failsafe (not XFCE). Fix by creating ~/.xsession:

echo "startxfce4" > ~/.xsession
chmod +x ~/.xsession

Security Posture

Adding a desktop stack expands attack surface (X11, DBus, cups, Avahi, etc.).
Recommendation:

  • Keep ufw active
  • Remove/disable non-essential networked desktop services (e.g., Avahi if not using mDNS)
  • Run monthly unattended-upgrades
  • Audit with lynis or clamav for desk-side shared systems

Observations and Trade-offs

  • This conversion doesn’t completely replicate Ubuntu Desktop defaults (no Snapd auto-install, minimal media codec presence).
  • Hardware acceleration (GPU) on servers may be hit/miss, especially on virtual machines. For remote workflows, expect degraded graphical performance.
  • Some remote RDP/X11 setups may expose session to systemd session limits—review /etc/systemd/logind.conf as needed.

Example: Minimal XFCE Build for Low-Memory VMs

For test or dev boxes (<1GB RAM):

sudo apt install xfce4 --no-install-recommends -y
sudo apt install lightdm --no-install-recommends -y

Reduces package bloat at the expense of “goodies” (calculator, clipboard manager, etc.).


In Closing

Migrating Ubuntu Server to a desktop-capable system is powerful—provided you understand both the opportunities and limitations. Don’t over-provision desktop features on under-resourced hardware. But when done judiciously, this repurposes infrastructure with minimal overhead and maximum flexibility.

Note: For ongoing deployments, consider using a configuration management tool (e.g., Ansible) to automate and standardize the transformation process.


Deploy, iterate, adjust—Linux gives you the tools.