VNC-Server mit Systemd starten

Vor einiger Zeit habe ich eine recht umfangreiche Anleitung zusammengestellt, wie man auf einem Raspberry Pi einen VCN-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