Overview

Running a full graphical desktop on a server might seem counterintuitive, but with xrdp and a lightweight environment like MATE, you get the best of both worlds: a minimal-footprint Ubuntu 24.04 base plus a familiar GUI accessible via any RDP client. In this guide, we’ll walk through each step—from enabling required repositories to installing browsers—while addressing common pitfalls such as blank blue screens, authorization errors, missing panels, and more. By the end, you’ll have a smooth, responsive RDP session perfect for remote administration or light desktop tasks.

Enable the Universe Repository

Ubuntu’s minimal server install doesn’t always enable universe by default, which houses MATE and many useful packages. Add it now:

sudo apt update
sudo apt install software-properties-common -y
sudo add-apt-repository universe
sudo apt update

This ensures you can install mate-core, xrdp, and community-maintained tools without “package not found” errors.

Install the MATE Desktop

For a minimal footprint, install only core MATE components and D-Bus support:

sudo apt install --no-install-recommends \
mate-core \
mate-desktop-environment-core \
dbus-x11 -y

If you’d like the full Ubuntu MATE experience (with file manager, panel applets, and default applications), simply:

sudo apt install mate-desktop-environment -y

Both options give you mate-session, the command that launches the MATE desktop.

Install & Configure xrdp

xrdp provides an open-source RDP server for Linux. We’ll install it with the Xorg backend to avoid slow VNC fallbacks:

sudo apt install xrdp xorgxrdp -y
sudo adduser xrdp ssl-cert
sudo systemctl enable --now xrdp
  • xorgxrdp: Ensures sessions use native Xorg instead of Xvnc (no more painfully slow VNC).
  • ssl-cert: Grants xrdp permission to read its TLS certificate, avoiding silent startup failures.

Check status with sudo systemctl status xrdp and sudo journalctl -u xrdp-sesman -n20.

Launch MATE via xrdp

xrdp by default tries a generic Xsession script. You can direct it to launch MATE in two ways:

a) Per-User via ~/.xsession

For each RDP user (e.g. rdpuser), create:

echo "mate-session" > /home/rdpuser/.xsession
chmod +x /home/rdpuser/.xsession
chown rdpuser:rdpuser /home/rdpuser/.xsession

This file tells xrdp exactly which session to start.

b) System-Wide Override in /etc/xrdp/startwm.sh

sudo cp /etc/xrdp/startwm.sh /etc/xrdp/startwm.sh.bak
sudo sed -i '/^test -x \/etc\/X11\/Xsession/,$d' /etc/xrdp/startwm.sh
echo "exec mate-session" | sudo tee -a /etc/xrdp/startwm.sh
sudo systemctl restart xrdp

Now every xrdp connection runs MATE directly, without reliance on user-level scripts.

Create and Prepare a Non-Root RDP User

Never log in over RDP as root—create a dedicated account:

sudo adduser rdpuser
sudo usermod -aG sudo rdpuser
  • adduser auto-generates /home/rdpuser, copies /etc/skel, and sets correct permissions.
  • Adding to sudo allows GUI package installs from within the session.

For new accounts, you can seed a default .xsession by placing it in /etc/skel/.xsession.

Open the RDP Port

Allow incoming RDP connections on TCP port 3389:

sudo ufw allow 3389/tcp
sudo ufw reload

Also verify any external or cloud-provider firewall permits TCP/3389 to your server’s IP.

Browser Installation

With MATE and xrdp in place, add your favorite browsers. Always install from inside your MATE session (so your terminal inherits the correct $DISPLAY and $XAUTHORITY).

Firefox (APT or Snap)

sudo apt update
sudo apt install firefox # Deb package (snapd will be auto-installed and disabled)
# or, if you prefer snaps:
sudo snap install firefox

Google Chrome

curl -fsSL https://dl.google.com/linux/linux_signing_key.pub \
| gpg --dearmor | sudo tee /usr/share/keyrings/google-chrome.gpg >/dev/null
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] \
http://dl.google.com/linux/chrome/deb/ stable main' \
| sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt update
sudo apt install google-chrome-stable -y

Brave Browser

sudo apt install apt-transport-https curl gnupg -y
sudo curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg \
https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg] \
https://brave-browser-apt-release.s3.brave.com/ stable main' \
| sudo tee /etc/apt/sources.list.d/brave-browser-release.list
sudo apt update
sudo apt install brave-browser -y

Troubleshooting Common Errors

Even a robust setup can hit snags. Here are fixes for the most frequent roadblocks:

Blue Background without Panel or Windows

  • Cause: MATE never started (window manager missing).
  • Fix: Ensure mate-session appears in ~/.xsession or /etc/xrdp/startwm.sh, then sudo systemctl restart xrdp.

sesman_data_in: scp_process_msg failed & trans_check_wait_objs failed

These internal handshake messages can generally be ignored if a session ultimately launches.

Window manager exited quickly (0 secs)

  • Cause: Incorrect startup command or missing packages.
  • Fix: Verify you installed mate-core (or full mate-desktop-environment) and the startup script calls exec mate-session.

Cannot open display: :10.0 & Authorization Errors

  • Cause: Launching GUI apps from a root or SSH shell without proper $DISPLAY/$XAUTHORITY.
  • Fix: Always open a mate-terminal in your RDP session (Ctrl+Alt+T) as rdpuser, then run firefox & or other commands. No extra exports needed.
  • Optional: To allow sudo firefox &, add Defaults env_keep += "DISPLAY XAUTHORITY" via sudo visudo.

Could not obtain desk path or name

  • Cause: Missing XDG user-dirs configuration.
  • Fix:
    sudo apt install xdg-user-dirs -y
    su - rdpuser
    xdg-user-dirs-update --force
    

E: Unable to locate package mate-desktop-commons

  • Fix: Use the correct meta-package names:
    mate-desktop-environment-core or full mate-desktop-environment.

User Doesn’t Have a Home Directory or Not in sudoers

  • Home Missing: Check getent passwd rdpuser to find the home path. Create and seed it with:
    sudo mkdir -p /home/rdpuser
    sudo cp -a /etc/skel/. /home/rdpuser
    sudo chown -R rdpuser:rdpuser /home/rdpuser
    
  • Not in sudoers: As root, run:
    usermod -aG sudo rdpuser
    

    Then reconnect the RDP session.

Best Practices & Performance Tips

  • Use Native Xorg Backend: Avoid VNC by installing xorgxrdp.
  • Lightweight Panel: If you want the full MATE panel, install:
    sudo apt install mate-panel mate-menu mate-terminal mate-control-center mate-power-manager -y
    
  • Panel Reset:
    dconf reset -f /org/mate/panel/
    mate-panel --reset --replace &
    
  • Client Settings: Lower color depth to 16-bit, disable background, font smoothing, and window animations in your RDP client for snappier performance.
  • Resource Monitoring: Use top, free -h, and iostat to watch CPU, memory, and I/O during your session.

Conclusion

By following this comprehensive guide, you’ve transformed an Ubuntu 24.04 minimal server into a fully functional, RDP-accessible MATE desktop. You now know how to enable repositories, install just the right MATE components, configure xrdp for a native Xorg session, open firewall ports, add popular browsers, and troubleshoot every major snag—from blue screens and missing panels to authorization and display errors. With these steps in hand, you can confidently deploy a lightweight, secure, and fully featured remote desktop environment.

Leave a Reply

Your email address will not be published. Required fields are marked *