VNC-Server mit Systemd starten

Vor einiger Zeit habe ich eine recht umfangreiche Anleitung zusammengestellt, wie man auf einem Raspberry Pi einen VNC-Server einrichtet. Diese Anleitung trifft zum größten Teil weiterhin zu. Da Raspbian Jessie nun aber Systemd als Init-System verwendet, liegt es nahe, den automatischen Start des VNC-Servers mittels Systemd zu konfigurieren.

Voraussetzungen

Zuerst installieren Sie den VNC-Server und probieren diesen aus, in dem Sie ihn manuell starten:

sudo apt-get install tightvncserver
vncserver
  Password: ******
  Verify:   ******
  Would you like to enter a view-only password? n
  New 'X' desktop is raspberrypi:1

Das beim ersten Start angegebene VNC-Passwort wird in der Datei .vnc/passwd in verschlüsselter Form gespeichert.

vncserver.service-Datei einrichten

Damit Systemd den VNC-Server starten kann, müssen Sie die service-Datei /etc/systemd/system/vncserver.service einrichten. Diese muss den folgenden Inhalt haben:

# neue Datei /etc/systemd/system/vncserver.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
User=pi
PAMName=login
PIDFile=/home/pi/.vnc/%H:1.pid
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :1 > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver -geometry 1300x800  -depth 16 :1
ExecStop=/usr/bin/vncserver -kill :1

[Install]
WantedBy=multi-user.target

Zum Ausprobieren führen Sie dieses Kommando aus:

sudo systemctl daemon-reload && systemctl start vncserver
systemctl status vncserver
  vncserver.service - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/vncserver.service; disabled)
   Active: active (running) since Fre 2016-01-29 21:09:32 CET; 10min ago
   Main PID: 14430 (Xtightvnc)
  Jän 29 21:09:30 pi2 systemd[14397]: 
    pam_exec(login:session): conversation failed
  Jän 29 21:09:30 pi2 systemd[14397]: pam_unix(login:session): 
    session opened for user pi by (uid=0)
  ...

Ich habe leider keinen Weg gefunden, die pam_exec-Fehlermeldung zu vermeiden. Sie scheint aber keine Auswirkung auf den erfolgreichen Start des VNC-Servers zu haben.

Um den VCN-Server wieder zu stoppen, führen Sie systemctl stop aus:

sudo systemctl stop vncserver

Wenn Sie möchten, dass der VNC-Server von nun an beim Rechnerstart automatisch aktiviert wird, führen Sie noch dieses Kommando aus:

sudo systemctl enable vncserver

Sonstige Konfigurationsdateien

Prinzipiell sollte der automatische Start des VNC-Servers nun funktionieren. Zwei Kleinigkeiten stören aber:

  • Solange sich der Mauscursor nicht über einem Fenster befindet, wird dieser als hässliches X-Symbol dargestellt.
  • In neuen Terminal-Fenstern ist / das aktive Verzeichnis, nicht /home/pi.

Die beiden Probleme lassen sich mit wenig Mühe beheben. Zuerst laden Sie die Datei /home/pi/.vnc/xstartup in einen Editor und ergänzen die bereits vorhandene Anweisung xsetroot -solid grey um -cursor_name left_ptr.

# in /home/pi/.vnc/xstartup
xsetroot -solid grey -cursor_name left_ptr
...

Anschließend laden Sie /home/pi/.bashrc und fügen am Ende der Datei die Anweisung cd $HOME ein:

# am Ende von /home/pi/.bashrc
...
cd $HOME

Quellen

10 Gedanken zu „VNC-Server mit Systemd starten“

  1. Hallo,

    es ist toll eine Sesion mit vncviewer machen. Ich habe manche Beschreibungen dazu gefunden. Aber selten oder kaum zu finden ist, wie kann ich gleichzeitigt mehrere vnc sesionenauf einem Raspi starten und benutzen?
    Anwendung – mehrere Win Clients arbeiten mit einem Lin Raspi.

    Werde Ihnen dankbar, fuer einen Hinweis, wo es zu finden ist.

    MFG
    trzetrzebinski

    1. Grundsätzlich können in der service-Datei ohne weiteres mehrere VNC-Server gestartet werden. Das Script lässt sich auch so modifizieren, dass quasi als Parameter die Nummer des VNC-Servers übergeben wird (siehe den archlinux-Link). Möglicherweise ist es für Ihre Zwecke aber besser, anstelle von VNC auf RDP (Remote Desktop Protocol) zu setzen. Pi-seitig ist dazu eigentlich nur `apt-get install xrdp` erforderlich. Ich habe vor, morgen oder übermorgen einen entsprechenden Blog-Beitrag zu verfassen.

  2. Die VNC-Verbindung hat bisher gut funktioniert. Nach einem update bekomme ich beim Start des vncserver folgende Meldung:
    pi@raspberrypi:~ $ systemctl status vncserver
    ● vncserver.service – Remote desktop service (VNC)
    Loaded: loaded (/etc/systemd/system/vncserver.service; enabled)
    Active: failed (Result: exit-code) since Mit 2016-08-10 11:17:06 CEST; 48s ago
    Process: 679 ExecStart=/usr/bin/vncserver -geometry 1300×800 -depth 16 :1 (code=exited, status=98)
    Process: 585 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)

    pi@raspberrypi:~ $ vncserver version
    TightVNC Server version 1.3.9

    Können Sie mir bitte helfen?

    1. Ad-hoc habe ich keine Ahnung, was da schief läuft. Ich habe aktuell auch keinen Pi mit VNC. Bin mitterlweile auf RDP umgestiegen, das macht weniger Ärger …

      Was liefert sudo journalctl | grep vnc?

    2. Hallo
      Walter Daser
      Ich bin gerade dabei ebenfalls eine vnc Verbindung zu machen. Funkt.auch.
      Nun etwas ganz anderes.
      Ich bin über Deinen Namen gestolpert.
      Mein Name ist Michael Daser und habe einen Bruder mit Deinem Namen.
      Das ist doch nicht alltäglich. Mein Bruder hat nämlich mit Computern rein gar nichts am Hut.
      Wäre nett von Dir zu hören.
      meine E-Mail m.daser@gmx.de

  3. Ist es weiterhin möglich den VNC-Server über einen SSH-Tunnel, wie in dem Kapitel 4.4 beschrieben, abzusichern?

  4. Nachdem ich nach der Anleitung die Installation durchgeführt hatte und vncserver gestartet, kamen Fehlermeldungen:

    Would you like to enter a view-only password (y/n)? n
    xauth: file /root/.Xauthority does not exist
    Couldn’t start Xtightvnc; trying default font path.
    Please set correct fontPath in the vncserver script.
    Couldn’t start Xtightvnc process.

    12/02/17 17:31:03 Xvnc version TightVNC-1.3.9
    12/02/17 17:31:03 Copyright (C) 2000-2007 TightVNC Group
    12/02/17 17:31:03 Copyright (C) 1999 AT&T Laboratories Cambridge
    12/02/17 17:31:03 All Rights Reserved.
    12/02/17 17:31:03 See http://www.tightvnc.com/ for information on TightVNC
    12/02/17 17:31:03 Desktop name ‚X‘ (osmc:1)
    12/02/17 17:31:03 Protocol versions supported: 3.3, 3.7, 3.8, 3.7t, 3.8t
    12/02/17 17:31:03 Listening for VNC connections on TCP port 5901
    Font directory ‚/usr/share/fonts/X11/misc/‘ not found – ignoring
    Font directory ‚/usr/share/fonts/X11/Type1/‘ not found – ignoring
    Font directory ‚/usr/share/fonts/X11/75dpi/‘ not found – ignoring
    Font directory ‚/usr/share/fonts/X11/100dpi/‘ not found – ignoring

    Fatal server error:
    could not open default font ‚fixed‘
    12/02/17 17:31:04 Xvnc version TightVNC-1.3.9
    12/02/17 17:31:04 Copyright (C) 2000-2007 TightVNC Group
    12/02/17 17:31:04 Copyright (C) 1999 AT&T Laboratories Cambridge
    12/02/17 17:31:04 All Rights Reserved.
    12/02/17 17:31:04 See http://www.tightvnc.com/ for information on TightVNC
    12/02/17 17:31:04 Desktop name ‚X‘ (osmc:1)
    12/02/17 17:31:04 Protocol versions supported: 3.3, 3.7, 3.8, 3.7t, 3.8t
    12/02/17 17:31:04 Listening for VNC connections on TCP port 5901
    Font directory ‚/usr/share/fonts/X11/misc/‘ not found – ignoring
    Font directory ‚/usr/share/fonts/X11/Speedo/‘ not found – ignoring
    Font directory ‚/usr/share/fonts/X11/Type1/‘ not found – ignoring
    Font directory ‚/usr/share/fonts/X11/75dpi/‘ not found – ignoring
    Font directory ‚/usr/share/fonts/X11/100dpi/‘ not found – ignoring

    Fatal server error:
    could not open default font ‚fixed‘

    Gibt es dazu eine Lösung?

    1. Haben Sie den vnc-Server zuerst einmal manuell gestartet und getestet? Dann müsste das Passwort gesetzt sein.

Kommentare sind geschlossen.