If you’ve just spun up a fresh Ubuntu server and want a full desktop you can reach over RDP — with proper Korean (Hangul) rendering and Chrome ready to go — here’s the complete, copy-paste-friendly walkthrough. Every command below uses environment variables for the server IP, the new user’s name, and password, so you can paste the whole block in one shot without editing anything except the variables at the top.
What you’ll end up with
- Ubuntu 24.04 LTS with a full XFCE desktop
- xrdp listening on port 3389, reachable from Windows’ built-in Remote Desktop Connection
- A non-root user you can log in as
- Google Chrome, with Korean fonts installed so Hangul actually renders instead of showing as boxes
Step 0 — Set your variables
Run this on your local machine first — it just defines the values the rest of the guide reuses.
export SERVER_IP="203.0.113.10" # your server's public IP
export NEW_USER="myuser" # the desktop login you want to create
export NEW_USER_PASSWORD="ChangeMe123!" # a strong password for that userStep 1 — SSH into the server as root
ssh root@$SERVER_IPEverything from here runs on the server. Since you’re now in a root shell there, re-export the variables you’ll need (SSH doesn’t carry your local shell’s env vars over automatically):
export NEW_USER="myuser"
export NEW_USER_PASSWORD="ChangeMe123!"Step 2 — Install xrdp and a desktop environment
apt update
DEBIAN_FRONTEND=noninteractive apt install -y xrdp xfce4 xfce4-goodiesXFCE is a lightweight desktop that plays nicely with xrdp — GNOME/Unity tend to be flakier over RDP.
Step 3 — Create the desktop user
useradd -m -s /bin/bash "$NEW_USER"
echo "$NEW_USER:$NEW_USER_PASSWORD" | chpasswdStep 4 — Point the session at XFCE
echo "xfce4-session" > /home/$NEW_USER/.xsession
chown $NEW_USER:$NEW_USER /home/$NEW_USER/.xsessionStep 5 — Fix the xrdp/ssl-cert permission gotcha
This one trips almost everybody up: on a fresh install, the xrdp system user usually isn’t in the ssl-cert group, so it can’t read the TLS private key it needs for the RDP handshake. Symptom: the client fails to connect at all, sometimes reported as a generic “I/O error.” Fix:
usermod -aG ssl-cert xrdp
systemctl restart xrdpStep 6 — Enable and start xrdp, open the firewall
systemctl enable --now xrdp
ufw allow 3389/tcp # skip if ufw isn't in useIf your server is on a cloud provider (AWS/GCP/Azure/OpenStack/etc.), remember the local firewall isn’t the only gate — you also need to open 3389/tcp inbound in the provider’s security group / firewall rules panel.
Step 7 — Install Google Chrome
cd /tmp
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
DEBIAN_FRONTEND=noninteractive apt install -y ./google-chrome-stable_current_amd64.deb
rm -f google-chrome-stable_current_amd64.debStep 8 — Install Korean fonts and locale
Without this step, Hangul text in Chrome (and everywhere else) renders as empty boxes (tofu). This installs Noto Sans/Serif CJK, Nanum fonts, and the Korean locale:
DEBIAN_FRONTEND=noninteractive apt install -y fonts-noto-cjk fonts-nanum language-pack-ko
fc-cache -f
locale-gen ko_KR.UTF-8
update-localeStep 9 — Connect
From Windows, open Remote Desktop Connection (mstsc) and connect to:
$SERVER_IP:3389Log in with $NEW_USER / $NEW_USER_PASSWORD.
The one-shot script
If you want to run steps 2–8 in a single paste (after SSH’ing in as root and exporting NEW_USER/NEW_USER_PASSWORD), here’s the whole thing back to back:
apt update
DEBIAN_FRONTEND=noninteractive apt install -y xrdp xfce4 xfce4-goodies
useradd -m -s /bin/bash "$NEW_USER"
echo "$NEW_USER:$NEW_USER_PASSWORD" | chpasswd
echo "xfce4-session" > /home/$NEW_USER/.xsession
chown $NEW_USER:$NEW_USER /home/$NEW_USER/.xsession
usermod -aG ssl-cert xrdp
systemctl enable --now xrdp
systemctl restart xrdp
ufw allow 3389/tcp
cd /tmp
wget -q https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
DEBIAN_FRONTEND=noninteractive apt install -y ./google-chrome-stable_current_amd64.deb
rm -f google-chrome-stable_current_amd64.deb
DEBIAN_FRONTEND=noninteractive apt install -y fonts-noto-cjk fonts-nanum language-pack-ko
fc-cache -f
locale-gen ko_KR.UTF-8
update-localeTroubleshooting: “the desktop connects but immediately closes”
If your first RDP login works fine but every login after that just flashes and disconnects, it’s almost always a stale session: closing the RDP window (instead of logging out from the XFCE menu) leaves the old desktop session running in the background, and the new session’s xfce4-session collides with it over the same D-Bus session bus and exits instantly.
Fix, run as root:
pkill -9 -u "$NEW_USER"
rm -f /tmp/.X11-unix/X10…and going forward, always Log Out from the desktop menu rather than just closing the RDP client window.
Environment used in this guide: Ubuntu 24.04.4 LTS, xrdp + XFCE4, Google Chrome stable.