Windows and a graphical desktop on GPU and Arm64 servers
Run Windows or a Linux desktop on a GPU or Arm64 server: connect over Remote Desktop, let sessions use the GPU and set up Xfce with xrdp on Ubuntu or Debian.
- Beginner
- 20 min read
- Updated
This guide is not available in your language yet, so it is shown in English.
On this page
- Before you start
- Windows: connect and use the GPU
- Step 1: Connect over Remote Desktop
- Step 2: Check the GPU (GPU servers)
- Step 3: Let Remote Desktop sessions use the GPU
- Windows on Arm64 servers
- Linux: a desktop with Xfce and xrdp
- Step 1: Install the desktop and xrdp
- Step 2: Create a desktop user
- Step 3: Keep port 3389 private
- Step 4: Connect
- Troubleshooting
- Next steps
GPU VPS, GPU VDS, GPU dedicated servers and Arm64 VPS and VDS run Linux or Windows, and a Linux server can also run a graphical desktop. This guide shows how to connect to a Windows server, let Remote Desktop sessions use the GPU, and set up a Linux desktop that you open with the same Remote Desktop app.
Before you start
- The operating system you want: choose it in the order form, or reinstall the server with another image from the client area. Reinstalling erases the server's disk, so take a backup first.
- Your server's IP address and login details from the welcome email.
- A Remote Desktop app: Remote Desktop Connection (
mstsc) on Windows, Windows App on macOS, or an RDP client such as Remmina on Linux.
Windows: connect and use the GPU
Step 1: Connect over Remote Desktop
Connect with your Remote Desktop app to the server's IP address and sign in as Administrator: first steps on a Windows server over RDP.
Step 2: Check the GPU (GPU servers)
Open Task Manager › Performance. The GPU appears in the list with its name. If it does not, or Device Manager shows it with a warning sign, follow GPU servers: getting started for the driver your GPU type needs.
Step 3: Let Remote Desktop sessions use the GPU
Remote Desktop sessions render on the CPU until you enable the GPU for them. Open the Local Group Policy Editor (gpedit.msc) and go to Computer Configuration › Administrative Templates › Windows Components › Remote Desktop Services › Remote Desktop Session Host › Remote Session Environment. Set these policies to Enabled:
| Policy | What it does |
|---|---|
| Use hardware graphics adapters for all Remote Desktop Services sessions | Sessions render on the GPU instead of the CPU |
| Prioritize H.264/AVC 444 graphics mode for Remote Desktop Connections | Sharper image for text and fine detail |
| Configure H.264/AVC hardware encoding for Remote Desktop Connections | The GPU encodes the picture sent to you |
Apply the policies, then sign out and connect again:
gpupdate /forceVerify: start a 3D or video program in the session. Task Manager › Performance › GPU shows activity.
Windows on Arm64 servers
Windows on Arm runs programs built for Arm64 natively. Many x64 and x86 programs also run, through emulation built into Windows, but more slowly. Drivers cannot be emulated: a driver must be built for Arm64. Choose the Arm64 download of a program where the vendor offers one.
Linux: a desktop with Xfce and xrdp
Xfce is a light desktop and xrdp lets you open it with any Remote Desktop app. The steps are the same on x86 and Arm64, on Ubuntu and Debian.
Step 1: Install the desktop and xrdp
sudo apt update
sudo apt install -y xfce4 xfce4-goodies xrdp
sudo adduser xrdp ssl-cert
sudo systemctl enable --now xrdpStep 2: Create a desktop user
Sign in to the desktop with a normal user, not root. Create one and start Xfce for it:
sudo adduser desk
echo xfce4-session | sudo tee /home/desk/.xsession
sudo chown desk:desk /home/desk/.xsessionStep 3: Keep port 3389 private
Do not leave the Remote Desktop port open to the whole internet. Choose one way:
Allow only your IP address
With the ufw firewall, allow port 3389 only from your own address (replace 203.0.113.10):
sudo ufw allow from 203.0.113.10 to any port 3389 proto tcpUse an SSH tunnel
Leave port 3389 closed in the firewall and forward it over SSH from your computer, then connect your Remote Desktop app to localhost:
ssh -L 3389:localhost:3389 desk@SERVER_IPStep 4: Connect
Connect your Remote Desktop app to the server's IP address (or to localhost with the tunnel), choose the Xorg session if xrdp asks, and sign in as desk.
Verify: the Xfce desktop opens with its panel.
On a GPU server, programs that compute on the GPU, such as CUDA, ROCm or oneAPI applications, use it as usual from the desktop's terminal. The desktop itself is drawn by the CPU.
Troubleshooting
xrdp shows a black screen after login, or the session closes at once. The same user is still signed in to a local console session, or .xsession is missing. Sign out of the other session, check ~/.xsession, and read ~/.xsession-errors and /var/log/xrdp-sesman.log.
Remote Desktop cannot connect. Check the firewall rule, the IP address and the port: Remote Desktop connection problems.
The GPU is not used in a Windows session. The policies are not applied yet: run gpupdate /force, then sign out and connect again.
The GPU shows Code 43 in Device Manager. The driver does not match the GPU type: see GPU troubleshooting.
Next steps
- Change the Remote Desktop port on Windows: change the RDP port.
- Software for Arm64 servers: Arm64 VPS and VDS: getting started.
Frequently asked questions
Which operating systems can I choose?
The images your package offers, listed in the order form and in the client area when you reinstall: Linux distributions and Windows, on GPU servers and on Arm64 servers.
Do I need a desktop on a Linux server?
Only for graphical programs. AI models, containers and command-line tools run without one, and a desktop uses memory and CPU of its own.
Does a remote desktop use the GPU?
On Windows, after you enable the GPU policies in this guide. On Linux, xrdp draws the desktop with the CPU, while programs that compute on the GPU use it as usual.
Do x64 programs run on Windows on Arm?
Many do, through the emulation built into Windows on Arm. Programs built for Arm64 run natively and faster, and drivers must always be built for Arm64.