Get remote access without setting your desktop or sanity on fire.
So you’ve got a box running Ubuntu Server 22.04, and you want GUI access from afar, not just a terminal, but actual windows, apps, and maybe even a browser or two. Enter: VNC. But if you’re expecting “just works”, well, welcome to Linux.
This guide walks through the exact process to set up a VNC server using tightvncserver, paired with the Xfce desktop, and wrapped with systemd for sanity. No command changes. Just straight-up instructions with some commentary that won’t bore you to sleep.
1. Install the VNC Server
You’ll be doing this as user: dumbass. (Replace that with your actual username later.)
sudo apt update
sudo apt -y install tightvncserver
2. Install a Desktop Environment
You’ll need something to see when you remote in. Xfce is lightweight and just works.
sudo apt install xfce4 xfce4-goodies
You can swap in another desktop environment (GNOME, KDE, MATE) if you’re into that sort of thing, just update the startup line later.
3. Set a VNC Password
Let’s keep the door locked.
vncpasswd
Follow the prompt, enter a secure password (you’ll use it in your VNC viewer), and verify it.
4. Start and Kill VNC
Spin up your first session:
vncserver :1
This creates a virtual desktop on display :1, which maps to port 5901.
Need to stop it?
vncserver -kill :1
Clean, easy, controlled chaos.
5. Configure the VNC Startup Environment
By default, VNC doesn’t know what desktop to start. You’ll tell it.
sudo nano ~/.vnc/xstartup
Append this line at the end:
exec /usr/bin/startxfce4 &
This tells VNC to boot into Xfce when it starts.
6. Start It With Display Settings
Let’s give it a good-looking resolution.
vncserver :1 -geometry 1920x1080 -depth 24
7. Open the Right Port and Connect Remotely
If ufw isn’t installed, install it first:
sudo apt install ufw
Then allow VNC traffic:
sudo ufw allow 5901
Now grab a VNC client like RealVNC Viewer from the machine you’ll connect from.
Use your server’s IP and port 5901.
8. Set Up a systemd Service
So you don’t have to start VNC manually every time the server reboots.
Create a new service definition:
sudo nano /etc/systemd/system/vncserver@.service
Paste this in, replace [Add your user name] with your actual Linux username (like dumbass):
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=[Add your user name]
Group=[Add your user name]
WorkingDirectory=/home/green
PIDFile=/home/[Add your user name]/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
9. Reload systemd and Start VNC the Right Way
sudo systemctl daemon-reload
sudo systemctl enable --now vncserver@1
If your VNC session from earlier is still running, shut it down first:
vncserver -kill :1
Then restart it via systemd:
sudo systemctl start vncserver@1
Want to make sure it’s alive?
systemctl status vncserver@1
Final Thoughts
You now have a clean, working, GUI-ready remote desktop setup running on Ubuntu 22.04.
You can reboot, connect, and manage the box visually, without babysitting terminal windows.
Got Feedback?
Did this actually work for you? Any wild configs or DE swaps?
Share your tweaks or pain in the thread, someone out there will thank you later.