How to Change the Theme in Xrdp When Using Xfce

If your remote desktop session through Xrdp looks bland, uses a basic grey window style, or doesn't match your locally configured Xfce theme, you're not alone. Theme rendering in Xrdp sessions behaves differently than on a local desktop — and understanding why is the first step to fixing it.

Why Xrdp Sessions Don't Always Reflect Your Local Theme

When you connect to a Linux machine via Xrdp, you're not inheriting your local desktop environment directly. Xrdp starts a new session, typically governed by a startup script (~/.xsession or ~/.xinitrc), rather than resuming your logged-in graphical session. This means your personal Xfce theme settings — set through the Appearance manager on your local desktop — may not carry over automatically.

Xfce stores theme preferences in configuration files under ~/.config/xfce4/ and applies GTK settings through files like ~/.config/gtk-3.0/settings.ini and ~/.gtkrc-2.0. If those files exist and are correctly written, Xrdp sessions can pick them up — but only if the session is launched in a way that reads them.

Understanding What "Theme" Actually Covers in Xfce 🎨

Before changing anything, it helps to know what you're changing. In Xfce, "theme" refers to several separate layers:

LayerControlsWhere It's Set
GTK themeWindow widget colors, button stylesAppearance Manager → Style
Window decorationsTitle bars, borders, resize handlesWindow Manager → Style
Icon themeFolder/file/app iconsAppearance Manager → Icons
Cursor themeMouse pointer styleMouse and Touchpad → Theme
Font settingsSystem-wide font renderingAppearance Manager → Fonts

Each of these can behave independently in a remote session. You might fix your GTK theme but still see default window decorations — because they're controlled by a different config.

Method 1: Set the Theme Through Config Files Directly

The most reliable way to ensure your Xrdp session uses your preferred Xfce theme is to write the settings into the relevant config files rather than relying solely on the GUI Appearance tool.

For GTK 3 applications, edit or create ~/.config/gtk-3.0/settings.ini:

[Settings] gtk-theme-name=Adwaita-dark gtk-icon-theme-name=Papirus gtk-font-name=Sans 10 gtk-cursor-theme-name=Adwaita 

Replace the values with your chosen theme names. Theme names must match exactly — including capitalisation — and the theme must be installed on the server (the machine running Xrdp), not just your local client machine.

For GTK 2 applications, edit or create ~/.gtkrc-2.0:

gtk-theme-name="Adwaita-dark" gtk-icon-theme-name="Papirus" 

Method 2: Use xfconf-query to Set Theme Values Programmatically

Xfce stores settings in its xfconf database. You can query and set these values from the terminal, which is particularly useful when you're already connected via Xrdp and want to test changes:

xfconf-query -c xsettings -p /Net/ThemeName -s "Adwaita-dark" xfconf-query -c xsettings -p /Net/IconThemeName -s "Papirus" xfconf-query -c xfwm4 -p /general/theme -s "Adwaita-dark" 

The first two commands adjust GTK appearance settings. The third adjusts the window manager (xfwm4) decoration theme, which is a separate config channel.

Changes made this way write to ~/.config/xfce4/xfconf/xfce-perchannel-xml/ and will persist across Xrdp sessions as long as xfsettingsd (the Xfce settings daemon) is running in your remote session.

Making Sure the Settings Daemon Runs in Your Xrdp Session

A common reason themes don't apply in Xrdp is that xfsettingsd — the process that reads and applies Xfce settings — isn't starting in the remote session. Without it, GTK apps won't pick up your theme preferences even if the config files are correctly set.

Check your Xrdp session startup file. If you're using ~/.xsession, it should include:

xfsettingsd & startxfce4 

Or if you use ~/.xinitrc, the same applies. The & ensures xfsettingsd runs in the background before the desktop launches. Some minimal Xfce setups launched through Xrdp skip this daemon entirely, which produces the "unstyled" look many users encounter.

Where Installed Themes Need to Live 🖥️

Themes must be installed on the server — the machine hosting the Xrdp session. Client-side themes are irrelevant. Themes can live in two places:

  • System-wide:/usr/share/themes/ (requires root/sudo to install)
  • User-level:~/.themes/ (no elevated permissions needed)

Icon themes follow the same pattern: /usr/share/icons/ or ~/.icons/.

To verify a theme is available to your user account on the server:

ls ~/.themes/ ls /usr/share/themes/ 

If your chosen theme doesn't appear in either location, it won't apply — regardless of what you put in the config files.

Variables That Affect the Outcome

Getting themes to render correctly in Xrdp sessions depends on several factors that vary by setup:

  • Xrdp version — newer versions handle session initialisation differently
  • Whether you're using a shared session or a new session — some Xrdp configurations reconnect to an existing session (like a VNC session), while others start fresh
  • Display manager in use — LightDM, GDM, and others interact with Xrdp differently, affecting which startup scripts run
  • Xfce version — config file paths and xfconf channel names have changed across major Xfce releases
  • Whether xfsettingsd is in your session autostart — its absence is the single most common cause of themes not applying remotely

A setup running Xrdp with a clean ~/.xsession file on a recent Ubuntu or Debian system will behave differently than a stripped-down Rocky Linux server with minimal packages installed. The right approach for your environment depends on exactly which of these variables applies to your situation.