TigerVNC auf Ubuntu 22.04 und 24.04 installieren und konfigurieren

Virtual Network Computing (VNC) ist ein Protokoll für den grafischen Fernzugriff. Dabei werden Änderungen am Framebuffer an den lokalen Bildschirm übertragen, während Tastatur- und Mauseingaben an das entfernte System gesendet werden. Dadurch eignet sich VNC beispielsweise für Administratoren, die Dateien verwalten, Browser verwenden oder Desktop-Anwendungen und andere grafische Werkzeuge nutzen möchten, ohne direkt vor dem jeweiligen Rechner arbeiten zu müssen.

Diese Anleitung richtet sich an Systeme mit Ubuntu 22.04 und Ubuntu 24.04 LTS. Die Installation erfolgt über die Kommandozeile mit den TigerVNC-Paketen aus den Ubuntu-Paketquellen. Für ressourcenschonende grafische Sitzungen wird TigerVNC mit Xfce kombiniert. Optional kann GNOME eingesetzt werden, wenn GNOME über Xorg verwendet werden soll. TigerVNC entstand ursprünglich als Abspaltung des historischen TightVNC-Projekts und wird innerhalb von Ubuntu weiterhin mit Aktualisierungen versorgt. Damit stellt es heute den modernen Ersatz für TightVNC dar, während bekannte Abläufe mit vncserver erhalten bleiben. Im Verlauf der Anleitung wird mit vncpasswd ein VNC-Passwort eingerichtet, das Display :1 verwendet, die Verbindung über einen SSH-Tunnel abgesichert und eine systemd-Unit eingerichtet, damit sich der VNC-Server zuverlässig verwalten und neu starten lässt.

VNC unterscheidet sich vom Remote Desktop Protocol (RDP), weil VNC in erster Linie Framebuffer-Daten überträgt und nicht auf die stärker Windows-orientierten Aushandlungsmechanismen typischer RDP-Clients setzt. Beim SSH-X-Forwarding werden einzelne X11-Anwendungen über SSH weitergeleitet, während VNC eine vollständige Desktop-Sitzung bereitstellt, die auch dann bestehen bleibt, wenn der Client getrennt wird. VNC bietet sich deshalb an, wenn ein vollständiger und dauerhaft verfügbarer Remote-Desktop benötigt wird und die rechteckbasierte Komprimierung akzeptabel ist. SSH-X-Forwarding eignet sich dagegen eher, wenn lediglich einige wenige grafische Anwendungen benötigt werden und die X11-Sicherheit innerhalb des Netzwerks bereits als vertrauenswürdig gilt.

Während dieser gesamten Anleitung bleibt TigerVNC an 127.0.0.1 gebunden. Der Zugriff erfolgt über SSH-Portweiterleitung, sodass TCP-Port 5901 nicht direkt nach außen freigegeben werden muss.

Die wichtigsten Punkte im Überblick

  • TigerVNC ist die empfohlene VNC-Server-Lösung für Ubuntu 22.04 und Ubuntu 24.04. Die Pakete stehen in den standardmäßigen Paketquellen zur Verfügung, erhalten Sicherheitskorrekturen aus dem Upstream-Projekt und ersetzen die älteren TightVNC-Pakete aus historischen Anleitungen.
  • VNC-Verkehr ist standardmäßig nicht verschlüsselt. TigerVNC sollte deshalb mit -localhost yes an 127.0.0.1 gebunden und über einen SSH-Tunnel erreicht werden. Port 5901 sollte nicht direkt veröffentlicht werden.
  • Wayland ist mit dieser TigerVNC-Konfiguration nicht kompatibel. Auf Ubuntu-22.04- oder Ubuntu-24.04-Systemen mit GDM3 muss vor der VNC-Konfiguration WaylandEnable=false in /etc/gdm3/custom.conf gesetzt werden. Headless-Server ohne GDM3 benötigen diese Änderung nicht.
  • Die Nummer eines VNC-Displays bestimmt den verwendeten TCP-Port nach dem Schema 5900 plus Display-Nummer. Display :1 verwendet somit Port 5901, Display :2 Port 5902 und so weiter.
  • Eine systemd-Template-Unit mit dem Namen vncserver@.service ermöglicht den automatischen Start und die Verwaltung über systemctl. Die Zahl hinter @ steht für die Display-Nummer und nicht für den Benutzernamen.

Voraussetzungen für die TigerVNC-Installation

Für diese Anleitung werden folgende Voraussetzungen benötigt:

  • Ein Server oder eine virtuelle Maschine mit Ubuntu 22.04 oder Ubuntu 24.04, sudo-Berechtigungen, einem Benutzerkonto ohne Root-Anmeldung sowie einer eingerichteten UFW-Firewall. Falls noch nicht erfolgt, sollte zunächst die übliche Grundkonfiguration eines Ubuntu-Servers durchgeführt werden.
  • SSH-Zugriff auf den Server. Für zusätzliche Sicherheit kann außerdem eine schlüsselbasierte SSH-Authentifizierung eingerichtet werden.
  • Ein lokaler Computer mit TigerVNC Viewer, RealVNC Viewer, Remmina oder einem anderen kompatiblen VNC-Client. Die Verbindung wird hergestellt, sobald der SSH-Tunnel aktiv ist. Unter macOS kann ebenfalls die Bildschirmfreigabe verwendet werden, wenn sie auf den weitergeleiteten lokalen Port zugreift.

Geeigneten VNC-Server für Ubuntu auswählen

Welcher VNC-Server geeignet ist, hängt davon ab, welche Art von grafischem Desktop bereitgestellt werden soll. Virtuelle Desktop-Sitzungen eignen sich besonders gut für Headless-Systeme und virtualisierte Server. Lösungen, die einen bereits vorhandenen Bildschirm spiegeln, passen dagegen besser zu physischen Arbeitsplatzrechnern.

TigerVNC als empfohlene Lösung

TigerVNC steht in den Ubuntu-Paketquellen unter den Paketnamen tigervnc-standalone-server und tigervnc-common zur Verfügung und profitiert von der laufenden Sicherheitswartung des Upstream-Projekts. Auf Headless-Systemen lässt sich TigerVNC sinnvoll mit XFCE kombinieren, insbesondere wenn ein geringer Speicherverbrauch im Leerlauf wichtig ist.

TightVNC

Anleitungen für TightVNC sind weiterhin in älterer Dokumentation zu finden. Bei aktuellen Ubuntu-Installationen wurde diese Lösung jedoch weitgehend durch TigerVNC ersetzt. Normalerweise sollte daher TigerVNC eingesetzt werden, sofern keine konkrete Anforderung eine Kompatibilität mit älteren TightVNC-Konfigurationen voraussetzt.

RealVNC

RealVNC richtet sich unter anderem an Umgebungen, die verwaltete Cloud-Verbindungen und unternehmensbezogene Richtlinienfunktionen benötigen. Wenn solche Funktionen erforderlich sind, können die vom Anbieter bereitgestellten .deb-Pakete verwendet werden. Wenn dagegen ausschließlich Pakete aus den Paketquellen des Betriebssystems gewünscht sind, eignet sich TigerVNC.

x11vnc

x11vnc verbindet sich mit einem bereits bestehenden Xorg-Display, anstatt einen neuen Xvnc-Framebuffer zu erzeugen. Diese Variante eignet sich, wenn eine vorhandene physische Konsolensitzung gemeinsam genutzt werden soll. Für Headless-Server, auf denen ein neuer virtueller Desktop bereitgestellt werden soll, ist sie dagegen weniger geeignet.

Vergleich verbreiteter VNC-Server

VNC-Server Ubuntu-22.04-Unterstützung Ubuntu-24.04-Unterstützung Wayland-Unterstützung Authentifizierung Lizenz Wartungsstatus Hinweise
TigerVNC Ja (Standard-Paketquellen) Ja (Standard-Paketquellen) Nein (nur Xorg) VNC-Passwort, X.509 GPL-2.0 Aktiv Für Headless-Server empfohlen
TightVNC Ja (Universe, Upstream nicht mehr gepflegt) Ja (Universe, Upstream nicht mehr gepflegt) Nein (nur Xorg) VNC-Passwort GPL-2.0 Veraltet (letzte Upstream-Version 2009) Weiterhin funktionsfähig, jedoch ohne aktuelle Sicherheitskorrekturen vom Upstream-Projekt
x11vnc Ja (Standard-Paketquellen) Ja (Standard-Paketquellen) Nein (nur Xorg) VNC-Passwort, optional SSL GPL-2.0 Eingeschränkt Benötigt eine bestehende Xorg-Sitzung und ist für typische Headless-Installationen weniger geeignet
RealVNC Ja (manuelle .deb-Installation) Ja (manuelle .deb-Installation) Teilweise (Direktmodus unter Xorg; Cloud-Relay verfügbar) VNC-Passwort, RealVNC-Konto Kommerziell (kostenlose persönliche Variante) Aktiv Für das Cloud-Relay ist ein Konto erforderlich; der Direktmodus kann ohne Konto verwendet werden

Hinweis: Falls zuvor eine Anleitung für Ubuntu 20.04 verwendet wurde, ersetzen die folgenden Schritte TightVNC durch TigerVNC und gelten sowohl für Ubuntu 22.04 als auch für Ubuntu 24.04. Ältere Ubuntu-20.04-Anleitungen sind nur noch als Referenz für bestehende Legacy-Konfigurationen relevant.

Schritt 1 – Desktop-Umgebung installieren

In diesem Schritt wird die grafische Umgebung installiert, die später innerhalb der VNC-Sitzung gestartet wird. Xfce benötigt vergleichsweise wenig Arbeitsspeicher und CPU-Leistung. Dadurch bleiben XFCE-Sitzungen auch auf kleineren Servern und virtuellen Maschinen reaktionsfähig.

Zunächst werden die Paketinformationen aktualisiert:


Hit:1 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy InRelease
Reading package lists... Done

Der in der Ausgabe angezeigte Codename hängt von der verwendeten Ubuntu-Version ab. Ubuntu 22.04 verwendet jammy, Ubuntu 24.04 dagegen noble. Beide Ausgaben sind für die jeweilige Version korrekt.

Anschließend werden Xfce und die zugehörigen Zusatzprogramme installiert:


sudo apt install xfce4 xfce4-goodies


Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  xfce4 xfce4-goodies
0 upgraded, 2 newly installed, 0 to remove, 0 not upgraded.
Need to get 12.4 MB of archives.
After this operation, 45.2 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Falls das Installationsprogramm nach einem standardmäßigen Display-Manager fragt, kann auf einem Headless-Server grundsätzlich eine der angebotenen Optionen gewählt werden, sofern Xfce ausschließlich über VNC gestartet werden soll.

Für eine GNOME-basierte Konfiguration können alternativ ubuntu-desktop oder gnome-session installiert werden. Dabei müssen jedoch der höhere Speicherbedarf sowie die in Schritt 2 beschriebene Xorg-Anforderung berücksichtigt werden.

Schritt 2 – Wayland unter Ubuntu 22.04 und 24.04 berücksichtigen

Ubuntu 22.04 und Ubuntu 24.04 verwenden normalerweise Wayland, sobald GNOME und GDM3 installiert sind. TigerVNC erzeugt dagegen virtuelle Xorg-Displays und kann die Wayland-Sitzung in dieser Konfiguration nicht gemeinsam verwenden. Deshalb wird GDM3 in diesem Schritt auf Xorg umgestellt. Dadurch verwenden ein lokal ausgeführter GNOME-Desktop und TigerVNC dasselbe Anzeigeprotokoll, was insbesondere bei der Fehlersuche direkt am System leere oder schwarze Bildschirme vermeiden kann.

Zunächst wird geprüft, ob GDM3 aktiv ist:


Falls als Ergebnis inactive oder Unit gdm3.service could not be found erscheint, wird GDM3 auf diesem System nicht ausgeführt. In diesem Fall kann der restliche Teil dieses Schritts übersprungen und direkt mit Schritt 3 fortgefahren werden.

Nun wird die GDM-Konfigurationsdatei geöffnet:

sudo nano /etc/gdm3/custom.conf

Im Abschnitt [daemon] muss sich folgende Einstellung befinden:

/etc/gdm3/custom.conf

Damit die Änderung übernommen wird, wird das System neu gestartet:


Connection to your_server_ip closed by remote host.

Sobald der Server wieder verfügbar ist, kann – sofern vorhanden – eine Anmeldung über die physische oder serielle Konsole erfolgen. Anschließend wird in einem Terminal überprüft, welcher Sitzungstyp verwendet wird:


Hinweis: Dieser Schritt kann übersprungen werden, wenn Ubuntu Server ohne GDM installiert wurde und ausschließlich virtuelle TigerVNC-Sitzungen genutzt werden. Wenn gdm3 installiert ist und GNOME zusätzlich lokal auf derselben virtuellen Maschine oder demselben Server läuft, sollte die Konfiguration beibehalten werden.

Schritt 3 – TigerVNC Server installieren

Für Ubuntu 22.04 und Ubuntu 24.04 kann derselbe Installationsbefehl verwendet werden. Ubuntu 22.04 stellt TigerVNC 1.12.x bereit, während Ubuntu 24.04 TigerVNC 1.13.x enthält.


sudo apt install tigervnc-standalone-server tigervnc-common


Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
  tigervnc-common tigervnc-standalone-server
0 upgraded, 2 newly installed, 0 to remove, 0 not upgraded.
Need to get 1,284 kB of archives.
After this operation, 4,980 kB of additional disk space will be used.
Do you want to continue? [Y/n]

Nach der Installation können die Informationen zur installierten Version angezeigt werden:

Unter Ubuntu 22.04 sollte die Ausgabe ungefähr wie im folgenden Beispiel aussehen. Unter Ubuntu 24.04 wird stattdessen eine Version aus der 1.13.x-Reihe mit einem neueren Build-Datum angezeigt:

TigerVNC Server version 1.12.0, built Apr  8 2022 00:00:00
Copyright (C) 1999-2022 TigerVNC Team and many others (see README.rst)
See https://www.tigervnc.org for information on TigerVNC.
Underlying X server release 12101004, The X.Org Foundation

Die exakte Versionsangabe kann sich ändern, wenn Ubuntu neue Sicherheits-Builds veröffentlicht. Nach einer erfolgreichen Installation sollte der Befehl jedoch in jedem Fall Informationen zu TigerVNC ausgeben.

Schritt 4 – VNC-Server konfigurieren

In diesem Schritt werden die Zugangsdaten sowie die Startskripte eingerichtet, die benötigt werden, damit die grafische Desktop-Umgebung für jedes VNC-Display zuverlässig gestartet werden kann.

VNC-Passwort festlegen

Zunächst wird das interaktive Werkzeug zur Passwortvergabe ausgeführt:


Password:
Verify:
Would you like to enter a view-only password (y/n)? n

TigerVNC speichert das Passwort als verschleierte Bytefolge in ~/.vnc/passwd. Das VNC-Protokoll berücksichtigt unabhängig von der eingegebenen Länge lediglich die ersten acht Zeichen des Passworts. Deshalb sollte ein eigenes VNC-Passwort gewählt und nicht das Passwort des Systembenutzers wiederverwendet werden.

Die Datei ~/.vnc/xstartup erstellen

Bevor die Startkonfiguration bearbeitet wird, sollte eine möglicherweise bereits laufende Sitzung auf Display :1 beendet werden:


Killing Xvnc process ID 17555

Falls stattdessen die Meldung Can't find erscheint, war keine entsprechende VNC-Sitzung aktiv. Die Einrichtung kann in diesem Fall einfach fortgesetzt werden.

XFCE-Startskript

Die VNC-Startdatei wird geöffnet:

Folgende Konfiguration wird eingetragen:

~/.vnc/xstartup

#!/bin/bash
xrdb $HOME/.Xresources 2>/dev/null
startxfce4 &

GNOME-Startskript ausschließlich für Xorg

Für eine GNOME-Sitzung wird dieselbe Startdatei geöffnet:

In diesem Fall wird folgende Konfiguration verwendet:

~/.vnc/xstartup

#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
exec dbus-run-session -- gnome-session

GNOME benötigt mehr Arbeitsspeicher als Xfce. Bei Verwendung dieser Desktop-Umgebung sollten deshalb der verfügbare Arbeitsspeicher und der Swap-Speicher überwacht werden.

Ausführungsrechte für das Startskript setzen

Damit die Startdatei ausgeführt werden kann, erhält sie die entsprechende Berechtigung:

Bei erfolgreicher Ausführung gibt chmod keine Meldung aus. Die gesetzten Berechtigungen können anschließend mit ls -la ~/.vnc/xstartup überprüft werden.


-rwxr-xr-x 1 user user 60 May  3 14:00 /home/user/.vnc/xstartup

Schritt 5 – VNC-Server starten und testen

In diesem Schritt wird kontrolliert, ob TigerVNC ordnungsgemäß startet und auf Verbindungen wartet, bevor anschließend der automatische Start eingerichtet wird.

Zunächst wird Display :1 gestartet. Dieses Display verwendet TCP-Port 5901, da sich der VNC-Port aus 5900 plus der Display-Nummer zusammensetzt:


vncserver :1 -geometry 1920x1080 -depth 24 -localhost yes


New 'server.example.com:1 (user)' desktop is server.example.com:1

Starting applications specified in /home/user/.vnc/xstartup
Log file is /home/user/.vnc/server.example.com:1.log

Die aktuell laufenden VNC-Sitzungen lassen sich folgendermaßen anzeigen:


TigerVNC server sessions:

X DISPLAY #     PROCESS ID
:1              18442

Anschließend wird überprüft, ob der Dienst ausschließlich an der Loopback-Adresse lauscht:


LISTEN 0      5            127.0.0.1:5901      0.0.0.0:*    users:(("Xvnc",pid=18442,fd=9))

Falls ss keinen passenden Listener anzeigt, sollten die Dateien unter ~/.vnc/*.log untersucht werden. Diese Protokolldateien liefern Hinweise zu den meisten Problemen, die einen erfolgreichen Start von TigerVNC verhindern.

Schritt 6 – systemd-Dienst für VNC erstellen

In diesem Schritt wird die Prozessverwaltung von TigerVNC an systemd übergeben. Dadurch kann der VNC-Server nach Neustarts oder Systemaktualisierungen automatisch wieder gestartet werden.

Zuerst wird eine systemd-Template-Unit erstellt:

sudo nano /etc/systemd/system/vncserver@.service

Folgende Service-Definition wird eingefügt:

/etc/systemd/system/vncserver@.service

[Unit]
Description=TigerVNC for display %i
After=network.target

[Service]
Type=forking
User=user
Group=user
WorkingDirectory=/home/user
PIDFile=/home/user/.vnc/%H:%i.pid

ExecStartPre=-/usr/bin/vncserver -kill :%i >/dev/null 2>&1
ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -depth 24 -localhost yes
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

Der Eintrag ExecStart muss -localhost yes enthalten und nicht lediglich -localhost. Dadurch werden TCP-Verbindungen von entfernten Rechnern abgewiesen, wenn sie nicht über SSH zum lokalen VNC-Port weitergeleitet werden.

Die systemd-Konfiguration wird anschließend neu eingelesen:

sudo systemctl daemon-reload

Nun wird der Dienst für Display 1 aktiviert:


sudo systemctl enable vncserver@1.service


Created symlink /etc/systemd/system/multi-user.target.wants/vncserver@1.service → /etc/systemd/system/vncserver@.service.

Danach wird der Dienst gestartet:

sudo systemctl start vncserver@1.service

Ein erfolgreicher Start erzeugt normalerweise keine Ausgabe. Direkt danach kann mit systemctl status überprüft werden, ob der Dienst korrekt ausgeführt wird.

Der aktuelle Status wird mit folgendem Befehl angezeigt:


sudo systemctl status vncserver@1.service


● vncserver@1.service - TigerVNC for display 1
     Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
     Active: active (running) since <day> <date> <time> UTC; 5s ago
    Process: 20111 ExecStartPre=/usr/bin/vncserver -kill :1 (code=exited, status=2)
    Process: 20115 ExecStart=/usr/bin/vncserver :1 -geometry 1920x1080 -depth 24 -localhost yes (code=exited, status=0/SUCCESS)
   Main PID: 20126 (vncserver)
      Tasks: 86 (limit: 4647)
     Memory: 168.2M
        CPU: 4.932s
     CGroup: /system.slice/system-vncserver.slice/vncserver@1.service
             └─20126 /usr/bin/Xvnc :1 -localhost=yes ...

Für weitere Verwaltungsaufgaben können die üblichen systemctl-Befehle verwendet werden, wenn dieses Service-Modell erweitert oder im laufenden Betrieb verwaltet werden soll.

Schritt 7 – VNC sicher über einen SSH-Tunnel verbinden

Dieser Schritt sorgt dafür, dass TigerVNC nicht direkt aus dem öffentlichen Netzwerk erreichbar ist. Der lokale VNC-Client kann den entfernten Desktop dennoch über eine abgesicherte SSH-Verbindung erreichen.

Warnung: TCP-Port 5901 sollte weder in UFW noch in einer anderen vorgeschalteten Firewall direkt geöffnet werden. Automatisierte Scanner suchen regelmäßig nach öffentlich erreichbaren VNC-Diensten. Der VNC-Port sollte deshalb für externe Verbindungen geschlossen bleiben und der Zugriff stattdessen über SSH-Portweiterleitung erfolgen. Wenn Firewall-Regeln geändert werden, sollte die UFW-Konfiguration entsprechend überprüft werden.

Auf einem lokalen Linux- oder macOS-System wird folgender Befehl ausgeführt:

ssh -L 59000:localhost:5901 -C -N -f user@your_server_ip

  • -L 59000:localhost:5901 leitet den lokalen Port 59000 nach erfolgreicher SSH-Authentifizierung an localhost:5901 auf dem entfernten Server weiter.
  • -C aktiviert die Komprimierung und kann insbesondere bei langsameren Netzwerkverbindungen hilfreich sein.
  • -N verhindert, dass SSH eine entfernte Shell öffnet. Dadurch wird die Sitzung ausschließlich für die Portweiterleitung verwendet.
  • -f verschiebt den SSH-Prozess nach erfolgreicher Anmeldung in den Hintergrund. Das lokale Terminal steht anschließend wieder zur Verfügung, während der Tunnel aktiv bleibt.
  • user@your_server_ip bezeichnet den Benutzernamen und den entfernten Host im üblichen Format user@host.

Der Weiterleitungsweg lässt sich folgendermaßen darstellen:

[Laptop]  VNC viewer --> localhost:59000 --> SSH session --> server localhost:5901 --> Xvnc display :1

Windows 10 und neuere Windows-Versionen enthalten OpenSSH. Deshalb kann derselbe SSH-Befehl auch in PowerShell oder der Eingabeaufforderung verwendet werden, ohne die Optionen anzupassen.

Wenn PuTTY unter Windows verwendet wird, kann mit der rechten Maustaste auf die Titelleiste des PuTTY-Fensters geklickt und anschließend Change Settings… ausgewählt werden.

Danach wird Connection geöffnet, SSH erweitert und Tunnels ausgewählt. Unter Source port wird 59000 eingetragen, während unter Destination localhost:5901 angegeben wird. Anschließend werden Add und danach Apply gewählt.

Für komplexere Umgebungen können außerdem weitere SSH-Tunnelkonfigurationen verwendet werden, beispielsweise Reverse-Forwarding oder Verbindungen über Jump Hosts.

Unabhängig vom eingesetzten VNC-Client verbindet sich der Viewer immer mit dem lokalen Ende der Portweiterleitung. In diesem Beispiel lautet die Adresse localhost:59000. Der VNC-Client sollte nicht direkt mit der öffentlichen IP-Adresse des Servers verbunden werden.

Der VNC-Viewer wird auf localhost:59000 eingestellt. Falls eine Warnung zum Host-Schlüssel erscheint, kann diese entsprechend bestätigt werden. Anschließend erfolgt die Anmeldung mit dem in Schritt 4 eingerichteten VNC-Passwort. Danach sollte die standardmäßige Xfce-Arbeitsumgebung angezeigt werden.

Dateien lassen sich innerhalb der grafischen Sitzung beispielsweise über Thunar oder über einen beliebigen Terminal-Emulator verwalten.

Wird der VNC-Viewer geschlossen, endet lediglich die Verbindung des Clients. Die grafische Sitzung läuft auf dem Server weiter. Anwendungen und geöffnete Fenster bleiben dadurch zwischen den einzelnen Verbindungen erhalten. Für eine erneute Verbindung muss bei Bedarf lediglich der SSH-Tunnel wiederhergestellt und anschließend der VNC-Viewer erneut geöffnet werden. Der folgende pkill-Befehl dient dazu, den SSH-Tunnel selbst zu beenden, wenn er nicht mehr benötigt wird. Er beendet nicht lediglich eine einzelne VNC-Client-Sitzung.

Da -f den SSH-Prozess in den Hintergrund verschiebt, wird der Tunnel über seine Befehlszeile beendet und nicht mit CTRL+C:

pkill -f 'ssh -L 59000:localhost:5901'

Wird die Option -f bewusst weggelassen, bleibt die SSH-Sitzung im Vordergrund. In diesem Fall beendet CTRL+C den Tunnel unmittelbar.

Häufige VNC-Probleme unter Ubuntu beheben

Die Fehlersuche sollte zunächst auf dem Server beginnen, bevor die lokale Netzwerkverbindung als Ursache angenommen wird. Zuerst wird systemctl status geprüft, anschließend werden die Dateien unter ~/.vnc untersucht und danach die SSH-Portweiterleitung auf dem lokalen Rechner kontrolliert. Diese Reihenfolge verhindert unnötige Änderungen an der Firewall, wenn TigerVNC selbst gar nicht gestartet wurde. Bestätigt ss, dass der Listener vorhanden ist, Verbindungen funktionieren aber weiterhin nicht, sollten zusätzlich UFW und weitere eingesetzte Firewalls überprüft werden.

VNC-Server startet nicht

Nach jedem fehlgeschlagenen Start sollte die Datei ~/.vnc/<hostname>:<display>.log untersucht werden. Ein mögliches Beispiel ist /home/user/.vnc/server.example.com:1.log. Anschließend kann vncserver -kill :1 ausgeführt, die Konfiguration in xstartup korrigiert und danach der systemd-Dienst erneut gestartet werden.

Schwarzer Bildschirm nach der Verbindung

Es sollte überprüft werden, ob chmod +x ~/.vnc/xstartup erfolgreich ausgeführt wurde und ob weiterhin entweder startxfce4 & oder die GNOME-Konfiguration mit dbus-run-session vorhanden ist. Fehlen die Ausführungsrechte für die Startdatei, kann TigerVNC bei einem leeren oder schwarzen Framebuffer verbleiben.

Authentifizierung schlägt fehl

In diesem Fall wird vncpasswd erneut ausgeführt. Danach wird der Dienst mit sudo systemctl restart vncserver@1.service neu gestartet, ein neuer SSH-Tunnel aufgebaut und die Verbindung erneut versucht.

Verbindung zu Port 5901 wird abgelehnt

Zur Überprüfung werden sudo systemctl status vncserver@1.service, ss -tlnp | grep 5901 und journalctl -u vncserver@1.service -n 50 ausgeführt. Wenn der VNC-Listener korrekt arbeitet, sollte geprüft werden, ob der SSH-Tunnel weiterhin aktiv ist. Der VNC-Viewer greift auf localhost des Rechners zu, auf dem sich der Endpunkt des SSH-Tunnels befindet.

Anzeigeprobleme durch Wayland

Die Datei /etc/gdm3/custom.conf wird erneut geöffnet und darauf geprüft, ob WaylandEnable=false gesetzt ist. Anschließend wird das System neu gestartet. Danach kann echo $XDG_SESSION_TYPE in der Konsolensitzung ausgeführt werden, bis als Ergebnis x11 erscheint.

FAQ zu TigerVNC unter Ubuntu

Wie installiere und konfiguriere ich einen VNC-Server unter Ubuntu 24.04?

Ubuntu 24.04 verwendet dieselben TigerVNC-Paketnamen, enthält jedoch neuere Patch-Versionen. Zunächst wird tigervnc-standalone-server installiert. Wenn GNOME zusätzlich lokal läuft, wird die entsprechende Änderung in /etc/gdm3/custom.conf vorgenommen. Danach wird ~/.vnc/xstartup erstellt und der Server mit vncserver :1 -localhost yes gestartet. Nach der Paketinstallation sollte außerdem vncserver --version ausgeführt werden, da sich kleinere Versionsnummern zwischen Ubuntu-Aktualisierungen ändern können.

Welcher VNC-Server eignet sich am besten für Ubuntu?

TigerVNC bietet für die meisten Ubuntu-Installationen eine ausgewogene Kombination aus Verfügbarkeit in den Paketquellen, vorhandener Dokumentation und aktiver Wartung. TightVNC ist weiterhin in älteren Anleitungen zu finden, erhält jedoch deutlich weniger Aktualisierungen. RealVNC eignet sich für Organisationen, die kommerzielle oder verwaltete Verbindungsfunktionen benötigen. x11vnc ist vor allem dann sinnvoll, wenn eine bestehende Xorg-Konsolensitzung gespiegelt werden soll, statt einen separaten virtuellen Framebuffer bereitzustellen.

Wie lässt sich prüfen, ob vncserver unter Ubuntu läuft?

Mit vncserver -list werden die aktiven Sitzungs-IDs angezeigt. Zusätzlich können ss -tlnp | grep vnc oder ss -tlnp | grep 590 verwendet werden, um die geöffneten Listener zu prüfen. Wenn systemd den Prozess verwaltet, liefert systemctl status vncserver@1.service weitere Informationen. Auch das Systemjournal kann Fehler sichtbar machen, die beispielsweise unmittelbar nach Paketaktualisierungen auftreten.

Funktioniert VNC mit Wayland unter Ubuntu 22.04 oder 24.04?

Die meisten TigerVNC-Konfigurationen dieser Art basieren weiterhin auf X11-Verhalten, auch wenn Xvnc einen eigenen Framebuffer bereitstellt. Wayland wird deshalb in /etc/gdm3/custom.conf deaktiviert. Nach einem Neustart sollte mit echo $XDG_SESSION_TYPE überprüft werden, ob interaktive GNOME-Konsolensitzungen x11 verwenden. Dadurch lassen sich Konflikte zwischen unterschiedlichen Sitzungstypen vermeiden.

Gibt es in den Ubuntu-Paketquellen eine Open-Source-Alternative zu RealVNC?

Ja. TigerVNC kann mit sudo apt install tigervnc-standalone-server installiert werden und benötigt kein Benutzerkonto bei einem externen Anbieter. Eine speziell auf RealVNC zugeschnittene Konfiguration gehört nicht zum Umfang dieser Anleitung und sollte entsprechend der jeweiligen Lizenz- und Installationsdokumentation vorgenommen werden. Für die meisten Ubuntu-Konfigurationen ist TigerVNC die empfohlene Variante.

Wie verbinde ich mich sicher mit einem VNC-Server unter Ubuntu?

Mit ssh -L 59000:localhost:5901 -C -N -f user@your_server_ip wird ein SSH-Tunnel erstellt. Anschließend wird der VNC-Viewer auf localhost:59000 eingestellt. SSH verschlüsselt den durch den Tunnel übertragenen Datenverkehr, während TigerVNC ausschließlich an die Loopback-Schnittstelle gebunden bleibt. Für zusätzliche Sicherheit kann auch eine SSH-Authentifizierung mit Schlüsseln verwendet werden.

Wie stoppe oder beende ich eine VNC-Server-Sitzung unter Ubuntu?

Eine Sitzung kann mit vncserver -kill :1 beendet werden. Dabei wird :1 durch die Display-Nummer ersetzt, die von vncserver -list angezeigt wird. Wenn systemd den Lebenszyklus des VNC-Servers verwaltet, sollte stattdessen sudo systemctl stop vncserver@1.service verwendet werden, damit Dienstverwaltung und Protokollierung konsistent bleiben.

Welche Desktop-Umgebung eignet sich für VNC auf einem Ubuntu Server?

XFCE ist für Headless-Server eine praktische Standardlösung, da CPU-, Arbeitsspeicher- und Bandbreitenbedarf vergleichsweise niedrig ausfallen. GNOME kann ebenfalls verwendet werden, wenn dessen Anwendungen und Desktop-Funktionen benötigt werden. Dafür müssen jedoch zusätzliche Systemressourcen eingeplant werden. Außerdem sollte GNOME für die hier beschriebene TigerVNC-Konfiguration weiterhin über Xorg betrieben werden.

Fazit

TigerVNC wurde unter Ubuntu 22.04 oder Ubuntu 24.04 installiert und xstartup für Xfce beziehungsweise optional für GNOME konfiguriert. Außerdem wurden die VNC-Listener mit vncserver -list und ss überprüft und ein systemd-Dienst eingerichtet, damit der VNC-Server nach einem Neustart automatisch wieder zur Verfügung steht. Damit entsteht ein moderner Kommandozeilen-Workflow, der an frühere TightVNC-Konfigurationen anknüpft, gleichzeitig jedoch auf weiterhin gepflegte Pakete aus den aktuellen Ubuntu-Paketquellen setzt.

TigerVNC bleibt ausschließlich an die Loopback-Schnittstelle gebunden, während die Verbindungen über SSH-Portweiterleitung hergestellt werden. Dadurch entsteht ein abgesichertes Verbindungsmodell, ohne zusätzliche VNC-Ports in UFW oder einer anderen Firewall freigeben zu müssen. Wenn bereits eine schlüsselbasierte SSH-Authentifizierung eingerichtet wurde, nutzt der SSH-Tunnel diese automatisch und benötigt keine zusätzliche VNC-spezifische Konfiguration. Eine passwortbasierte SSH-Anmeldung kann auf dieselbe Weise verwendet werden.

SSH kann zusätzlich durch eine schlüsselbasierte Authentifizierung abgesichert werden. Für komplexere Netzwerkkonfigurationen können weitere SSH-Tunnelvarianten eingesetzt werden. Sobald sich die Netzwerkumgebung ändert, sollte außerdem die Konfiguration der UFW-Firewall erneut überprüft werden.

Quelle: digitalocean.com

Jetzt 200€ Guthaben sichern

Registrieren Sie sich jetzt in unserer ccloud³ und erhalten Sie 200€ Startguthaben für Ihr Projekt.

Das könnte Sie auch interessieren:

Moderne Hosting Services mit Cloud Server, Managed Server und skalierbarem Cloud Hosting für professionelle IT-Infrastrukturen

OpenSSL: SSL-Zertifikate, private Schlüssel & CSRs

Security, Tutorial
Vijona20 Aug. um 15:08 Uhr OpenSSL-Grundlagen: SSL-Zertifikate, private Schlüssel und Certificate Signing Requests OpenSSL ist ein Kommandozeilen-Werkzeug, das Administratoren häufig verwenden, um Schlüssel zu erzeugen, Certificate Signing Requests (CSRs) zu erstellen,…