Update to 1.9.90 (1.10 beta)

This commit is contained in:
Jan Grulich 2019-10-18 14:51:23 +02:00
parent 0f57494169
commit 0838880d2e
8 changed files with 163 additions and 129 deletions

View File

@ -1,8 +1,8 @@
diff --git a/unix/xserver/hw/vnc/InputXKB.c b/unix/xserver/hw/vnc/InputXKB.c diff --git a/unix/xserver/hw/vnc/InputXKB.c b/unix/xserver/hw/vnc/InputXKB.c
index a9bd11d..7b54b43 100644 index f84a6e4..4eac939 100644
--- a/unix/xserver/hw/vnc/InputXKB.c --- a/unix/xserver/hw/vnc/InputXKB.c
+++ b/unix/xserver/hw/vnc/InputXKB.c +++ b/unix/xserver/hw/vnc/InputXKB.c
@@ -214,10 +214,7 @@ void vncPrepareInputDevices(void) @@ -226,10 +226,7 @@ void vncPrepareInputDevices(void)
unsigned vncGetKeyboardState(void) unsigned vncGetKeyboardState(void)
{ {
@ -14,7 +14,7 @@ index a9bd11d..7b54b43 100644
} }
unsigned vncGetLevelThreeMask(void) unsigned vncGetLevelThreeMask(void)
@@ -238,7 +235,7 @@ unsigned vncGetLevelThreeMask(void) @@ -250,7 +247,7 @@ unsigned vncGetLevelThreeMask(void)
return 0; return 0;
} }
@ -23,7 +23,7 @@ index a9bd11d..7b54b43 100644
act = XkbKeyActionPtr(xkb, keycode, state); act = XkbKeyActionPtr(xkb, keycode, state);
if (act == NULL) if (act == NULL)
@@ -263,7 +260,7 @@ KeyCode vncPressShift(void) @@ -275,7 +272,7 @@ KeyCode vncPressShift(void)
if (state & ShiftMask) if (state & ShiftMask)
return 0; return 0;
@ -32,7 +32,7 @@ index a9bd11d..7b54b43 100644
for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) {
XkbAction *act; XkbAction *act;
unsigned char mask; unsigned char mask;
@@ -303,7 +300,7 @@ size_t vncReleaseShift(KeyCode *keys, size_t maxKeys) @@ -315,7 +312,7 @@ size_t vncReleaseShift(KeyCode *keys, size_t maxKeys)
count = 0; count = 0;
@ -41,7 +41,7 @@ index a9bd11d..7b54b43 100644
xkb = master->key->xkbInfo->desc; xkb = master->key->xkbInfo->desc;
for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) {
XkbAction *act; XkbAction *act;
@@ -359,7 +356,7 @@ KeyCode vncPressLevelThree(void) @@ -371,7 +368,7 @@ KeyCode vncPressLevelThree(void)
return 0; return 0;
} }
@ -50,7 +50,7 @@ index a9bd11d..7b54b43 100644
act = XkbKeyActionPtr(xkb, keycode, state); act = XkbKeyActionPtr(xkb, keycode, state);
if (act == NULL) if (act == NULL)
@@ -390,7 +387,7 @@ size_t vncReleaseLevelThree(KeyCode *keys, size_t maxKeys) @@ -402,7 +399,7 @@ size_t vncReleaseLevelThree(KeyCode *keys, size_t maxKeys)
count = 0; count = 0;
@ -59,16 +59,16 @@ index a9bd11d..7b54b43 100644
xkb = master->key->xkbInfo->desc; xkb = master->key->xkbInfo->desc;
for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) {
XkbAction *act; XkbAction *act;
@@ -433,7 +430,7 @@ KeyCode vncKeysymToKeycode(KeySym keysym, unsigned state, unsigned *new_state) @@ -447,7 +444,7 @@ KeyCode vncKeysymToKeycode(KeySym keysym, unsigned state, unsigned *new_state)
if (new_state != NULL)
*new_state = state; *new_state = state;
fallback = 0;
- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc; - xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
+ xkb = vncKeyboardDev->master->key->xkbInfo->desc; + xkb = vncKeyboardDev->master->key->xkbInfo->desc;
for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) {
unsigned int state_out; unsigned int state_out;
KeySym dummy; KeySym dummy;
@@ -511,7 +508,7 @@ int vncIsAffectedByNumLock(KeyCode keycode) @@ -551,7 +548,7 @@ int vncIsAffectedByNumLock(KeyCode keycode)
if (numlock_keycode == 0) if (numlock_keycode == 0)
return 0; return 0;
@ -77,7 +77,7 @@ index a9bd11d..7b54b43 100644
act = XkbKeyActionPtr(xkb, numlock_keycode, state); act = XkbKeyActionPtr(xkb, numlock_keycode, state);
if (act == NULL) if (act == NULL)
@@ -545,7 +542,7 @@ KeyCode vncAddKeysym(KeySym keysym, unsigned state) @@ -585,7 +582,7 @@ KeyCode vncAddKeysym(KeySym keysym, unsigned state)
KeySym *syms; KeySym *syms;
KeySym upper, lower; KeySym upper, lower;

View File

@ -1,27 +0,0 @@
From be88293952175258992c1ed2f5a1b7d8f78fe7cc Mon Sep 17 00:00:00 2001
From: Pierre Ossman <ossman@cendio.se>
Date: Tue, 31 Jul 2018 16:06:59 +0200
Subject: Ignore buttons in mouse leave events
For KDE we can sometimes get a bunch of stray FL_LEAVE events before
gaining focus. Sending their included button information gets things
in the incorrect order with regard to other synchronisation we do on
focus. So just ignore buttons as the only information we want out of
the leave information is a position update.
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index ff27f7bf..7b5df572 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -587,7 +587,10 @@ int Viewport::handle(int event)
case FL_LEAVE:
window()->cursor(FL_CURSOR_DEFAULT);
- // Fall through as we want a last move event to help trigger edge stuff
+ // We want a last move event to help trigger edge stuff
+ handlePointerEvent(Point(Fl::event_x() - x(), Fl::event_y() - y()), 0);
+ return 1;
+
case FL_PUSH:
case FL_RELEASE:
case FL_DRAG:

View File

@ -1,8 +1,8 @@
diff --git a/unix/vncserver b/unix/vncserver diff --git a/unix/vncserver b/unix/vncserver
index 9e7a6ac..139f960 100755 index 68be032..ac0e993 100755
--- a/unix/vncserver --- a/unix/vncserver
+++ b/unix/vncserver +++ b/unix/vncserver
@@ -684,6 +684,7 @@ sub Usage @@ -678,6 +678,7 @@ sub Usage
" [-geometry <width>x<height>]\n". " [-geometry <width>x<height>]\n".
" [-pixelformat rgbNNN|bgrNNN]\n". " [-pixelformat rgbNNN|bgrNNN]\n".
" [-fp <font-path>]\n". " [-fp <font-path>]\n".
@ -10,19 +10,3 @@ index 9e7a6ac..139f960 100755
" [-fg]\n". " [-fg]\n".
" [-autokill]\n". " [-autokill]\n".
" [-noxstartup]\n". " [-noxstartup]\n".
diff --git a/vncviewer/vncviewer.cxx b/vncviewer/vncviewer.cxx
index f076565..05669a4 100644
--- a/vncviewer/vncviewer.cxx
+++ b/vncviewer/vncviewer.cxx
@@ -352,6 +352,11 @@ static void usage(const char *programName)
" %s [parameters] -listen [port] [parameters]\n"
" %s [parameters] [.tigervnc file]\n",
programName, programName, programName);
+ fprintf(stderr,"\n"
+ "Options:\n\n"
+ " -display Xdisplay - Specifies the X display for the viewer window\n"
+ " -geometry geometry - Standard X position and sizing specification.\n");
+
fprintf(stderr,"\n"
"Parameters can be turned on with -<param> or off with -<param>=0\n"
"Parameters which take a value can be specified as "

View File

@ -1,5 +1,5 @@
diff --git a/common/rfb/Password.cxx b/common/rfb/Password.cxx diff --git a/common/rfb/Password.cxx b/common/rfb/Password.cxx
index 240c9d4..cf9362e 100644 index 240c9d4..eb830d9 100644
--- a/common/rfb/Password.cxx --- a/common/rfb/Password.cxx
+++ b/common/rfb/Password.cxx +++ b/common/rfb/Password.cxx
@@ -55,7 +55,7 @@ PlainPasswd::~PlainPasswd() { @@ -55,7 +55,7 @@ PlainPasswd::~PlainPasswd() {
@ -12,15 +12,15 @@ index 240c9d4..cf9362e 100644
} }
diff --git a/common/rfb/util.h b/common/rfb/util.h diff --git a/common/rfb/util.h b/common/rfb/util.h
index b678b89..fffe322 100644 index 8503519..d463316 100644
--- a/common/rfb/util.h --- a/common/rfb/util.h
+++ b/common/rfb/util.h +++ b/common/rfb/util.h
@@ -50,16 +50,21 @@ namespace rfb { @@ -51,16 +51,21 @@ namespace rfb {
CharArray() : buf(0) {} CharArray() : buf(0) {}
CharArray(char* str) : buf(str) {} // note: assumes ownership CharArray(char* str) : buf(str) {} // note: assumes ownership
CharArray(int len) { CharArray(int len) {
+ length = len; + length = len;
buf = new char[len]; buf = new char[len]();
} }
~CharArray() { ~CharArray() {
- delete [] buf; - delete [] buf;

View File

@ -1,6 +1,6 @@
Name: tigervnc Name: tigervnc
Version: 1.9.0 Version: 1.9.90
Release: 7%{?dist} Release: 1%{?dist}
Summary: A TigerVNC remote display system Summary: A TigerVNC remote display system
%global _hardened_build 1 %global _hardened_build 1
@ -9,18 +9,19 @@ License: GPLv2+
URL: http://www.tigervnc.com URL: http://www.tigervnc.com
Source0: %{name}-%{version}.tar.gz Source0: %{name}-%{version}.tar.gz
Source1: vncserver.service Source1: vncserver-system.service
Source2: vncserver.sysconfig Source2: vncserver-user.service
Source3: 10-libvnc.conf Source3: vncserver.sysconfig
Source4: xvnc.service Source4: 10-libvnc.conf
Source5: xvnc.socket Source5: xvnc.service
Source6: xvnc.socket
Source7: vncserver_wrapper
Patch1: tigervnc-manpages.patch Patch1: tigervnc-manpages.patch
Patch2: tigervnc-getmaster.patch Patch2: tigervnc-getmaster.patch
Patch3: tigervnc-shebang.patch Patch3: tigervnc-shebang.patch
Patch4: tigervnc-xstartup.patch Patch4: tigervnc-xstartup.patch
Patch5: tigervnc-utilize-system-crypto-policies.patch Patch5: tigervnc-utilize-system-crypto-policies.patch
Patch6: tigervnc-ignore-buttons-in-mouse-leave-event.patch
Patch7: tigervnc-passwd-crash-with-malloc-checks.patch Patch7: tigervnc-passwd-crash-with-malloc-checks.patch
Patch100: tigervnc-xserver120.patch Patch100: tigervnc-xserver120.patch
@ -32,10 +33,9 @@ BuildRequires: xorg-x11-xtrans-devel, xorg-x11-util-macros, libXtst-devel
BuildRequires: libxkbfile-devel, openssl-devel, libpciaccess-devel BuildRequires: libxkbfile-devel, openssl-devel, libpciaccess-devel
BuildRequires: mesa-libGL-devel, libXinerama-devel, BuildRequires: mesa-libGL-devel, libXinerama-devel,
BuildRequires: freetype-devel, libXdmcp-devel, libxshmfence-devel BuildRequires: freetype-devel, libXdmcp-devel, libxshmfence-devel
BuildRequires: desktop-file-utils, java-devel, jpackage-utils
BuildRequires: libjpeg-turbo-devel, gnutls-devel, pam-devel BuildRequires: libjpeg-turbo-devel, gnutls-devel, pam-devel
BuildRequires: libdrm-devel, libXt-devel, pixman-devel BuildRequires: libdrm-devel, libXt-devel, pixman-devel
BuildRequires: systemd, cmake BuildRequires: systemd, cmake, desktop-file-utils,
%if 0%{?fedora} > 24 || 0%{?rhel} >= 7 %if 0%{?fedora} > 24 || 0%{?rhel} >= 7
BuildRequires: libXfont2-devel BuildRequires: libXfont2-devel
%else %else
@ -105,15 +105,6 @@ Requires: tigervnc-license
This package contains libvnc.so module to X server, allowing others This package contains libvnc.so module to X server, allowing others
to access the desktop on your machine. to access the desktop on your machine.
%package server-applet
Summary: Java TigerVNC viewer applet for TigerVNC server
Requires: tigervnc-server, java, jpackage-utils
BuildArch: noarch
%description server-applet
The Java TigerVNC viewer applet for web browsers. Install this package to allow
clients to use web browser when connect to the TigerVNC server.
%package license %package license
Summary: License of TigerVNC suite Summary: License of TigerVNC suite
BuildArch: noarch BuildArch: noarch
@ -154,8 +145,6 @@ popd
# Utilize system-wide crypto policies # Utilize system-wide crypto policies
%patch5 -p1 -b .utilize-system-crypto-policies %patch5 -p1 -b .utilize-system-crypto-policies
%patch6 -p1 -b .ignore-buttons-in-mouse-leave-event
%patch7 -p1 -b .tigervnc-passwd-crash-with-malloc-checks %patch7 -p1 -b .tigervnc-passwd-crash-with-malloc-checks
%build %build
@ -196,12 +185,6 @@ pushd media
make make
popd popd
# Build Java applet
pushd java
%{cmake} .
JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make
popd
%install %install
%make_install %make_install
rm -f %{buildroot}%{_docdir}/%{name}-%{version}/{README.rst,LICENCE.TXT} rm -f %{buildroot}%{_docdir}/%{name}-%{version}/{README.rst,LICENCE.TXT}
@ -212,11 +195,16 @@ popd
# Install systemd unit file # Install systemd unit file
mkdir -p %{buildroot}%{_unitdir} mkdir -p %{buildroot}%{_unitdir}
mkdir -p %{buildroot}%{_userunitdir}
install -m644 %{SOURCE1} %{buildroot}%{_unitdir}/vncserver@.service install -m644 %{SOURCE1} %{buildroot}%{_unitdir}/vncserver@.service
install -m644 %{SOURCE2} %{buildroot}%{_userunitdir}/vncserver@.service
install -m644 %{SOURCE4} %{buildroot}%{_unitdir}/xvnc@.service install -m644 %{SOURCE4} %{buildroot}%{_unitdir}/xvnc@.service
install -m644 %{SOURCE5} %{buildroot}%{_unitdir}/xvnc.socket install -m644 %{SOURCE5} %{buildroot}%{_unitdir}/xvnc.socket
rm -rf %{buildroot}%{_initrddir} rm -rf %{buildroot}%{_initrddir}
# Install vncserver wrapper script
install -m744 %{SOURCE7} %{buildroot}%{_bindir}/vncserver_wrapper
mkdir -p %{buildroot}%{_sysconfdir}/sysconfig mkdir -p %{buildroot}%{_sysconfdir}/sysconfig
install -m644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/vncservers install -m644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/vncservers
@ -229,14 +217,6 @@ install -m644 tigervnc_$s.png %{buildroot}%{_datadir}/icons/hicolor/${s}x$s/apps
done done
popd popd
# Install Java applet
pushd java
mkdir -p %{buildroot}%{_datadir}/vnc/classes
install -m755 VncViewer.jar %{buildroot}%{_datadir}/vnc/classes
install -m644 com/tigervnc/vncviewer/index.vnc %{buildroot}%{_datadir}/vnc/classes
popd
%find_lang %{name} %{name}.lang %find_lang %{name} %{name}.lang
# remove unwanted files # remove unwanted files
@ -268,11 +248,13 @@ install -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-libvnc.c
%files server %files server
%config(noreplace) %{_sysconfdir}/sysconfig/vncservers %config(noreplace) %{_sysconfdir}/sysconfig/vncservers
%{_userunitdir}/vncserver@.service
%{_unitdir}/vncserver@.service %{_unitdir}/vncserver@.service
%{_unitdir}/xvnc@.service %{_unitdir}/xvnc@.service
%{_unitdir}/xvnc.socket %{_unitdir}/xvnc.socket
%{_bindir}/x0vncserver %{_bindir}/x0vncserver
%{_bindir}/vncserver %{_bindir}/vncserver
%{_bindir}/vncserver_wrapper
%{_mandir}/man1/vncserver.1* %{_mandir}/man1/vncserver.1*
%{_mandir}/man1/x0vncserver.1* %{_mandir}/man1/x0vncserver.1*
@ -288,10 +270,6 @@ install -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-libvnc.c
%{_libdir}/xorg/modules/extensions/libvnc.so %{_libdir}/xorg/modules/extensions/libvnc.so
%config %{_sysconfdir}/X11/xorg.conf.d/10-libvnc.conf %config %{_sysconfdir}/X11/xorg.conf.d/10-libvnc.conf
%files server-applet
%doc java/com/tigervnc/vncviewer/README
%{_datadir}/vnc/classes/*
%files license %files license
%license LICENCE.TXT %license LICENCE.TXT
@ -299,10 +277,15 @@ install -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-libvnc.c
%{_datadir}/icons/hicolor/*/apps/* %{_datadir}/icons/hicolor/*/apps/*
%changelog %changelog
* Fri Oct 18 2019 Jan Grulich <jgrulich@redhat.com> - 1.9.90-1
- Update to 1.9.90 (1.10 beta)
- Add systemd user service file
- Use a wrapper for systemd system service file to workaround systemd limitations
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.0-7 * Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.9.0-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Wed Jul 19 2019 Dan Horák <dan[at]danny.cz> - 1.9.0-6 * Fri Jul 19 2019 Dan Horák <dan[at]danny.cz> - 1.9.0-6
- drop the s390x special handling (related #1727029) - drop the s390x special handling (related #1727029)
* Wed Jun 12 2019 Jan Grulich <jgrulich@redhat.com> - 1.9.0-5 * Wed Jun 12 2019 Jan Grulich <jgrulich@redhat.com> - 1.9.0-5

View File

@ -3,7 +3,7 @@
# Quick HowTo: # Quick HowTo:
# 1. Copy this file to /etc/systemd/system/vncserver@.service # 1. Copy this file to /etc/systemd/system/vncserver@.service
# 2. Replace <USER> with the actual user name and edit vncserver # 2. Replace <USER> with the actual user name and edit vncserver
# parameters appropriately # parameters in the wrapper script located in /usr/bin/vncserver_wrapper
# 3. Run `systemctl daemon-reload` # 3. Run `systemctl daemon-reload`
# 4. Run `systemctl enable vncserver@:<display>.service` # 4. Run `systemctl enable vncserver@:<display>.service`
# #
@ -34,19 +34,12 @@ Description=Remote desktop service (VNC)
After=syslog.target network.target After=syslog.target network.target
[Service] [Service]
Type=forking Type=simple
WorkingDirectory=/home/<USER>
User=<USER>
Group=<USER>
PIDFile=/home/<USER>/.vnc/%H%i.pid
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver -autokill %i ExecStart=/usr/bin/vncserver_wrapper <USER> %i
ExecStop=/usr/bin/vncserver -kill %i ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
Restart=on-success
RestartSec=15
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

59
vncserver-user.service Normal file
View File

@ -0,0 +1,59 @@
# The vncserver service unit file
#
# Quick HowTo: As the User wanting to have this functionality
#
# 1. Copy this file to ~/.config/systemd/user/ (Optional, in case default settings are not suitable)
#
# $ mkdir -p ~/.config/systemd/user
# $ cp /usr/lib/systemd/user/vncserver@.service ~/.config/systemd/user/
#
# 2. Reload user's systemd
#
# $ systemctl --user daemon-reload
#
# 3. Start the service immediately and enable it at boot
#
# $ systemctl --user enable vncserver@:<display>.service --now
#
# 4. Enable lingering
#
# $ loginctl enable-linger
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted! For a secure way of using VNC, you should
# limit connections to the local host and then tunnel from
# the machine you want to view VNC on (host A) to the machine
# whose VNC output you want to view (host B)
#
# [user@hostA ~]$ ssh -v -C -L 590N:localhost:590M hostB
#
# this will open a connection on port 590N of your hostA to hostB's port 590M
# (in fact, it ssh-connects to hostB and then connects to localhost (on hostB).
# See the ssh man page for details on port forwarding)
#
# You can then point a VNC client on hostA at vncdisplay N of localhost and with
# the help of ssh, you end up seeing what hostB makes available on port 590M
#
# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.
#
# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel. See the "-via" option in the
# `man vncviewer' manual page.
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver %i
ExecStop=/usr/bin/vncserver -kill %i
Restart=on-success
RestartSec=15
[Install]
WantedBy=default.target

42
vncserver_wrapper Executable file
View File

@ -0,0 +1,42 @@
#!/bin/sh
USER="$1"
INSTANCE="$2"
die() {
echo "FATAL: ${@:-}" >&2
exit 2
}
cleanup() {
[ -n "$VNCPID" ] || return
if kill -0 $VNCPID 2>/dev/null; then
kill $VNCPID
fi
}
trap cleanup TERM INT HUP
[ -n "$USER" -a -n "$INSTANCE" ] || die "Invalid usage!"
/usr/sbin/runuser -l "$USER" -c "/usr/bin/vncserver ${INSTANCE}"
[ $? -eq 0 ] || die "'runuser -l $USER' failed!"
# Wait up to 5 seconds for vncserver to be up
for tries in $(seq 1 50); do
[ -e "~$USER/.vnc/$(hostname)${INSTANCE}.pid" ] && break
sleep 0.1
done
eval HOME=~$USER
VNCPID=$(cat "$HOME/.vnc/$(hostname)${INSTANCE}.pid" 2>/dev/null || true)
[ -n "$VNCPID" ] || die "'vncserver ${INSTANCE}' failed to start after 5 seconds!"
echo "'vncserver ${INSTANCE}' has PID $VNCPID, waiting until it exits ..."
while kill -0 $VNCPID 2>/dev/null; do
sleep 5
done
echo "PID $VNCPID exited, exiting ..."