Beim Einrichten von VNC unter Ubuntu bleiben die meisten an zwei Stellen hängen. Der Client verbindet sich, aber der Bildschirm bleibt schwarz.
Und es ist unklar, ob man Port 5901 ins Internet öffnen muss. Beide Ursachen waren einfacher, als ich dachte.
Der schwarze Bildschirm war kein Netzwerkproblem, sondern ein Problem der xstartup-Konfiguration. Den Port musste ich gar nicht öffnen.
Ich brauchte GUI-Tests auf einem Ubuntu-Server in AWS EC2. Deshalb habe ich TigerVNC selbst installiert. Hier der Ablauf, so wie er war.
Wann braucht man VNC auf einem Ubuntu-Server?
Für den Serverbetrieb reicht SSH. VNC brauchen Sie nur, wenn Sie den echten Bildschirm sehen müssen, etwa einen Login-Ablauf im Browser oder eine GUI-Anwendung.
Normalerweise habe ich Server per SSH verwaltet. VNC kam nicht dazu, weil ich dauerhaft einen Remote-Desktop brauchte.
Es gab eine Entwicklungs- und Testphase. Darin musste ich Browser und GUI-Anwendungen direkt auf einem Ubuntu in der Cloud prüfen.
Entweder musste ich Authentifizierungs- und Redirect-Abläufe mit eigenen Augen verfolgen. Oder ich musste prüfen, in welchem Zustand eine GUI-Anwendung tatsächlich war.
Deshalb habe ich TigerVNC und eine schlanke Desktop-Umgebung nur für die Zeit ergänzt, in der ich eine GUI brauchte.
Lässt sich eine Aufgabe per CLI erledigen, installiere ich VNC bis heute nicht.
Wie installiert man Xfce und TigerVNC?
Installieren Sie eine schlanke Desktop-Umgebung (Xfce) und den TigerVNC-Server. Danach legen Sie mit vncpasswd das Passwort für die Verbindung fest.
Meine Hauptumgebung war damals Ubuntu 22.04 LTS.
Viele Anleitungen gingen früher von 20.04 aus. Dessen Standard-Support endete am 31. Mai 2025.
Wenn Sie heute neu aufsetzen, halte ich 22.04 oder 24.04 LTS für die richtige Basis.
Pakete installieren (Xfce, TigerVNC)
Aktualisieren Sie zuerst die Paketliste und installieren Sie dann die Pakete.
sudo apt update sudo apt install -y xfce4 xfce4-goodies tigervnc-standalone-server
Die Installation selbst dauert nicht lange. Zeit kostet erst der nächste Schritt.
Verbindungspasswort mit vncpasswd festlegen
Nach der Installation erstellen Sie mit vncpasswd ein Passwort für VNC-Verbindungen.
vncpasswd
Dieses Passwort ist unabhängig vom Passwort Ihres Linux-Kontos. Sie geben es beim Verbinden im VNC-Client ein.
Warum zeigt TigerVNC nach dem Verbinden einen schwarzen Bildschirm?
Erscheint nach dem Verbinden nur ein schwarzer Bildschirm, ist das Netzwerk nicht der erste Verdacht. Prüfen Sie zuerst die Ausführungsrechte von ~/.vnc/xstartup und den Befehl, der die Desktop-Sitzung startet.
Genau das war mein erstes Problem.
Der VNC-Prozess lief, und der Client konnte sich verbinden. Deshalb hatte ich das Netzwerk anfangs gar nicht im Verdacht.
Beim Nachsehen zeigte sich: ~/.vnc/xstartup startete die Desktop-Sitzung nicht richtig.
Ich habe die Ausführungsrechte und den Startbefehl der Sitzung korrigiert. Nach einem Neustart der VNC-Sitzung war das Problem gelöst.

Seitdem gehe ich bei der Fehlersuche anders vor. Ich trenne zuerst zwei Fälle: Die Verbindung klappt gar nicht, oder sie klappt, aber der Bildschirm bleibt schwarz.
Im ersten Fall prüfe ich zuerst Netzwerk, Firewall und Dienststatus. Im zweiten Fall schaue ich zuerst in xstartup.

Beim ersten Durchlauf habe ich inklusive Versuch und Irrtum etwa 40–50 Minuten gebraucht.
Das war die Gesamtzeit von der VNC-Installation bis zur tatsächlichen Verbindung.
Darin steckten die Desktop-Umgebung, das Schreiben von xstartup, der schwarze Bildschirm, die Korrektur von Rechten und Sitzung und der SSH-Tunnel.
Bei der zweiten Umgebung kannte ich die Ursache schon. Da war ich in weniger als 20 Minuten fertig.
Ausführungsrechte und Startbefehl in xstartup korrigieren
Geben Sie ~/.vnc/xstartup Ausführungsrechte. Prüfen Sie dann, ob die Datei einen Befehl zum Start der Desktop-Sitzung enthält.
chmod +x ~/.vnc/xstartup
In xstartup muss der Befehl für die Xfce-Sitzung so stehen, dass er sauber ausgeführt wird.
Ist diese Datei fehlerhaft, kann der VNC-Server normal laufen, während der Bildschirm schwarz bleibt.
Muss man Port 5901 öffnen? Ein SSH-Tunnel reicht
Nein, den VNC-Port (5901) müssen Sie nicht ins Internet öffnen. Mit einem SSH-Tunnel vom lokalen Port zum Server brauchen Sie keine VNC-Regel in der Sicherheitsgruppe.
Das RFB-Protokoll, das VNC nutzt, verschlüsselt den Datenverkehr selbst nicht. Bildschirmdaten und Authentifizierung liegen also ungeschützt offen.
Deshalb packt man VNC in einen SSH-Tunnel, statt den Port ins Internet zu öffnen.
Einmal dachte ich, ich müsse Port 5901 öffnen. Deshalb wollte ich zuerst die AWS-Sicherheitsgruppe ändern.
Am Ende habe ich das nicht getan. Statt den VNC-Port direkt ins Internet zu öffnen, habe ich einen SSH-Tunnel genutzt.
Die Verbindung lief ungefähr so: lokal localhost:5901 → SSH → localhost:5901 auf dem Server.
Port 5901 für VNC habe ich in der Sicherheitsgruppe nicht für das ganze Internet geöffnet.

Nur weil VNC nicht lief, musste ich nicht damit anfangen, 5901 ins Internet zu öffnen.
Ich brauchte keinen öffentlichen Port. Ich brauchte eine funktionierende Desktop-Sitzung und einen SSH-Tunnel.
Wie richtet man den VNC-Server als systemd-Dienst ein?
Registrieren Sie den VNC-Server als systemd-Dienst. Dann müssen Sie vncserver nach einem Neustart des Servers nicht mehr von Hand starten.
Legen Sie eine Unit-Datei in der Form [email protected] an und aktivieren Sie sie mit systemctl.
Nach einem Neustart des Servers startet die VNC-Sitzung dann automatisch wieder. Sie müssen sich nicht mehr jedes Mal per SSH anmelden und vncserver eingeben.
sudo systemctl enable [email protected] sudo systemctl start [email protected] sudo systemctl status [email protected]
Mit dem Statusbefehl sehen Sie sofort, ob die Sitzung sauber gestartet ist.

Würde ich VNC heute noch empfehlen? Alternativen und Kriterien
Für Code-Arbeit eignen sich SSH oder eine Remote-Entwicklungsumgebung, für Web-UI-Ergebnisse ein Headless-Browser. VNC halte ich nur für sinnvoll, wenn Sie die komplette Linux-GUI brauchen.
Ich wähle je nach Zweck.
| Zweck | Empfohlenes Tool |
|---|---|
| Server verwalten, Code ändern | SSH, VS Code Remote SSH, devcontainer, code-server |
| Web-UI prüfen, Browser automatisieren | Headless-Browser |
| Linux-Desktop-Sitzung selbst prüfen | VNC |
Kurz: Code läuft über SSH, reine Bildschirmergebnisse über einen Headless-Browser. VNC nutze ich nur, wenn ich die Desktop-Sitzung selbst brauche.
Auch X11-Forwarding habe ich genutzt. Bei mehreren GUI-Fenstern über längere Zeit war VNC, das eine vollständige Desktop-Sitzung hält, manchmal bequemer.
Ich vertrete also nicht die Position, dass ein Ubuntu-Server eine GUI braucht. Im Gegenteil: Lässt sich eine Aufgabe per CLI erledigen, installiere ich VNC lieber nicht.
Heute lasse ich VNC auf dieser EC2-Instanz nicht dauerhaft laufen. Ich richte die GUI-Umgebung nur noch bei Bedarf ein.
Nehmen wir einen öffentlich erreichbaren Server mit dauerhaft laufendem VNC-Daemon und Desktop-Umgebung. Gibt es dafür keinen Grund, vergrößert das aus meiner Sicht nur die Angriffsfläche und die Zahl der Komponenten.
Häufige Fragen
Die VNC-Verbindung klappt, aber der Bildschirm ist schwarz. Warum?
Meist liegt es nicht am Netzwerk, sondern an der Konfiguration von ~/.vnc/xstartup. Prüfen Sie zuerst die Ausführungsrechte (chmod +x) und ob der Startbefehl der Sitzung richtig drinsteht.
Muss ich Port 5901 in der Sicherheitsgruppe öffnen?
Nein. Verbinden Sie einen lokalen Port per SSH-Tunnel mit dem Server. Port 5901 direkt ins Internet zu öffnen, ist nicht nötig.
Gibt es außer VNC andere Wege für den Fernzugriff?
Das hängt vom Zweck ab. Für Code-Arbeit sind SSH oder eine Remote-Entwicklungsumgebung einfacher, für Web-UI-Ergebnisse ein Headless-Browser.
VNC kommt nur in Frage, wenn Sie die gesamte Linux-GUI sehen müssen.
Quellen
- RFC 6143: The Remote Framebuffer Protocol (englisch): Primärquelle dafür, dass VNC (RFB) die Sitzung nicht verschlüsselt
- Canonical: Ende des Standard-Supports für Ubuntu 20.04 LTS (englisch): Primärquelle für das Support-Ende von 20.04 (31. Mai 2025)
Dieser Artikel wurde auf Basis des koreanischen Originals lokalisiert: https://jjeongil.tistory.com/2090.