commit 69a765df2904af7be16f4417db3b134164953799 Author: overweight <5324761+overweight@user.noreply.gitee.com> Date: Mon Sep 30 11:18:26 2019 -0400 Package init diff --git a/10-libvnc.conf b/10-libvnc.conf new file mode 100644 index 0000000..259d718 --- /dev/null +++ b/10-libvnc.conf @@ -0,0 +1,19 @@ +# This file contains configuration of libvnc.so module +# +# To get libvnc.so module working, do this: +# 1. run "vncpasswd" from tigervnc-server package as root user +# 2. uncomment configuration lines below +# +# Please note you can specify any option which Xvnc accepts. +# Refer to `Xvnc -help` output for detailed list of options. + +#Section "Module" +# Load "vnc" +#EndSection + +#Section "Screen" +# Identifier "Screen0" +# DefaultDepth 16 +# Option "SecurityTypes" "VncAuth" +# Option "PasswordFile" "/root/.vnc/passwd" +#EndSection diff --git a/tigervnc-1.9.0.tar.gz b/tigervnc-1.9.0.tar.gz new file mode 100644 index 0000000..2b7cb5d Binary files /dev/null and b/tigervnc-1.9.0.tar.gz differ diff --git a/tigervnc-getmaster.patch b/tigervnc-getmaster.patch new file mode 100644 index 0000000..23c3d58 --- /dev/null +++ b/tigervnc-getmaster.patch @@ -0,0 +1,88 @@ +diff --git a/unix/xserver/hw/vnc/InputXKB.c b/unix/xserver/hw/vnc/InputXKB.c +index a9bd11d..7b54b43 100644 +--- a/unix/xserver/hw/vnc/InputXKB.c ++++ b/unix/xserver/hw/vnc/InputXKB.c +@@ -214,10 +214,7 @@ void vncPrepareInputDevices(void) + + unsigned vncGetKeyboardState(void) + { +- DeviceIntPtr master; +- +- master = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT); +- return XkbStateFieldFromRec(&master->key->xkbInfo->state); ++ return XkbStateFieldFromRec(&vncKeyboardDev->master->key->xkbInfo->state); + } + + unsigned vncGetLevelThreeMask(void) +@@ -238,7 +235,7 @@ unsigned vncGetLevelThreeMask(void) + return 0; + } + +- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc; ++ xkb = vncKeyboardDev->master->key->xkbInfo->desc; + + act = XkbKeyActionPtr(xkb, keycode, state); + if (act == NULL) +@@ -263,7 +260,7 @@ KeyCode vncPressShift(void) + if (state & ShiftMask) + return 0; + +- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc; ++ xkb = vncKeyboardDev->master->key->xkbInfo->desc; + for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { + XkbAction *act; + unsigned char mask; +@@ -303,7 +300,7 @@ size_t vncReleaseShift(KeyCode *keys, size_t maxKeys) + + count = 0; + +- master = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT); ++ master = vncKeyboardDev->master; + xkb = master->key->xkbInfo->desc; + for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { + XkbAction *act; +@@ -359,7 +356,7 @@ KeyCode vncPressLevelThree(void) + return 0; + } + +- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc; ++ xkb = vncKeyboardDev->master->key->xkbInfo->desc; + + act = XkbKeyActionPtr(xkb, keycode, state); + if (act == NULL) +@@ -390,7 +387,7 @@ size_t vncReleaseLevelThree(KeyCode *keys, size_t maxKeys) + + count = 0; + +- master = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT); ++ master = vncKeyboardDev->master; + xkb = master->key->xkbInfo->desc; + for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { + XkbAction *act; +@@ -433,7 +430,7 @@ KeyCode vncKeysymToKeycode(KeySym keysym, unsigned state, unsigned *new_state) + if (new_state != NULL) + *new_state = state; + +- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc; ++ xkb = vncKeyboardDev->master->key->xkbInfo->desc; + for (key = xkb->min_key_code; key <= xkb->max_key_code; key++) { + unsigned int state_out; + KeySym dummy; +@@ -511,7 +508,7 @@ int vncIsAffectedByNumLock(KeyCode keycode) + if (numlock_keycode == 0) + return 0; + +- xkb = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc; ++ xkb = vncKeyboardDev->master->key->xkbInfo->desc; + + act = XkbKeyActionPtr(xkb, numlock_keycode, state); + if (act == NULL) +@@ -545,7 +542,7 @@ KeyCode vncAddKeysym(KeySym keysym, unsigned state) + KeySym *syms; + KeySym upper, lower; + +- master = GetMaster(vncKeyboardDev, KEYBOARD_OR_FLOAT); ++ master = vncKeyboardDev->master; + xkb = master->key->xkbInfo->desc; + for (key = xkb->max_key_code; key >= xkb->min_key_code; key--) { + if (XkbKeyNumGroups(xkb, key) == 0) diff --git a/tigervnc-ignore-buttons-in-mouse-leave-event.patch b/tigervnc-ignore-buttons-in-mouse-leave-event.patch new file mode 100644 index 0000000..bf6a6d9 --- /dev/null +++ b/tigervnc-ignore-buttons-in-mouse-leave-event.patch @@ -0,0 +1,27 @@ +From be88293952175258992c1ed2f5a1b7d8f78fe7cc Mon Sep 17 00:00:00 2001 +From: Pierre Ossman +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: diff --git a/tigervnc-manpages.patch b/tigervnc-manpages.patch new file mode 100644 index 0000000..8e4b9c9 --- /dev/null +++ b/tigervnc-manpages.patch @@ -0,0 +1,28 @@ +diff --git a/unix/vncserver b/unix/vncserver +index 9e7a6ac..139f960 100755 +--- a/unix/vncserver ++++ b/unix/vncserver +@@ -684,6 +684,7 @@ sub Usage + " [-geometry x]\n". + " [-pixelformat rgbNNN|bgrNNN]\n". + " [-fp ]\n". ++ " [-cc ]\n". + " [-fg]\n". + " [-autokill]\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 - or off with -=0\n" + "Parameters which take a value can be specified as " diff --git a/tigervnc-passwd-crash-with-malloc-checks.patch b/tigervnc-passwd-crash-with-malloc-checks.patch new file mode 100644 index 0000000..0874b54 --- /dev/null +++ b/tigervnc-passwd-crash-with-malloc-checks.patch @@ -0,0 +1,41 @@ +diff --git a/common/rfb/Password.cxx b/common/rfb/Password.cxx +index 240c9d4..cf9362e 100644 +--- a/common/rfb/Password.cxx ++++ b/common/rfb/Password.cxx +@@ -55,7 +55,7 @@ PlainPasswd::~PlainPasswd() { + + void PlainPasswd::replaceBuf(char* b) { + if (buf) +- memset(buf, 0, strlen(buf)); ++ memset(buf, 0, length ? length : strlen(buf)); + CharArray::replaceBuf(b); + } + +diff --git a/common/rfb/util.h b/common/rfb/util.h +index b678b89..fffe322 100644 +--- a/common/rfb/util.h ++++ b/common/rfb/util.h +@@ -50,16 +50,21 @@ namespace rfb { + CharArray() : buf(0) {} + CharArray(char* str) : buf(str) {} // note: assumes ownership + CharArray(int len) { ++ length = len; + buf = new char[len]; + } + ~CharArray() { +- delete [] buf; ++ if (buf) { ++ delete [] buf; ++ buf = nullptr; ++ } + } + void format(const char *fmt, ...) __printf_attr(2, 3); + // Get the buffer pointer & clear it (i.e. caller takes ownership) + char* takeBuf() {char* tmp = buf; buf = 0; return tmp;} +- void replaceBuf(char* b) {delete [] buf; buf = b;} ++ void replaceBuf(char* b) {if (buf) delete [] buf; buf = b;} + char* buf; ++ int length = 0; + private: + CharArray(const CharArray&); + CharArray& operator=(const CharArray&); diff --git a/tigervnc-shebang.patch b/tigervnc-shebang.patch new file mode 100644 index 0000000..f76af87 --- /dev/null +++ b/tigervnc-shebang.patch @@ -0,0 +1,9 @@ +diff -up tigervnc-1.3.0/unix/vncserver.shebang tigervnc-1.3.0/unix/vncserver +--- tigervnc-1.3.0/unix/vncserver.shebang 2013-07-24 12:22:34.962158378 +0100 ++++ tigervnc-1.3.0/unix/vncserver 2013-07-24 12:22:41.593188190 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/env perl ++#!/usr/bin/perl + # + # Copyright (C) 2009-2010 D. R. Commander. All Rights Reserved. + # Copyright (C) 2005-2006 Sun Microsystems, Inc. All Rights Reserved. diff --git a/tigervnc-utilize-system-crypto-policies.patch b/tigervnc-utilize-system-crypto-policies.patch new file mode 100644 index 0000000..dbf0dab --- /dev/null +++ b/tigervnc-utilize-system-crypto-policies.patch @@ -0,0 +1,13 @@ +diff --git a/common/rfb/Security.cxx b/common/rfb/Security.cxx +index e623ab5..4987b29 100644 +--- a/common/rfb/Security.cxx ++++ b/common/rfb/Security.cxx +@@ -52,7 +52,7 @@ static LogWriter vlog("Security"); + #ifdef HAVE_GNUTLS + StringParameter Security::GnuTLSPriority("GnuTLSPriority", + "GnuTLS priority string that controls the TLS session’s handshake algorithms", +- "NORMAL"); ++ "@SYSTEM"); + #endif + + Security::Security() diff --git a/tigervnc-xserver120.patch b/tigervnc-xserver120.patch new file mode 100644 index 0000000..e7eae3c --- /dev/null +++ b/tigervnc-xserver120.patch @@ -0,0 +1,91 @@ +diff -up xserver/configure.ac.xserver116-rebased xserver/configure.ac +--- xserver/configure.ac.xserver116-rebased 2016-09-29 13:14:45.595441590 +0200 ++++ xserver/configure.ac 2016-09-29 13:14:45.631442006 +0200 +@@ -74,6 +74,7 @@ dnl forcing an entire recompile.x + AC_CONFIG_HEADERS(include/version-config.h) + + AM_PROG_AS ++AC_PROG_CXX + AC_PROG_LN_S + LT_PREREQ([2.2]) + LT_INIT([disable-static win32-dll]) +@@ -1863,6 +1864,10 @@ if test "x$XVFB" = xyes; then + AC_SUBST([XVFB_SYS_LIBS]) + fi + ++dnl Xvnc DDX ++AC_SUBST([XVNC_CPPFLAGS], ["-DHAVE_DIX_CONFIG_H $XSERVER_CFLAGS"]) ++AC_SUBST([XVNC_LIBS], ["$FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $DRI3_LIB $PRESENT_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $MAIN_LIB"]) ++AC_SUBST([XVNC_SYS_LIBS], ["$GLX_SYS_LIBS"]) + + dnl Xnest DDX + +@@ -1898,6 +1903,8 @@ if test "x$XORG" = xauto; then + fi + AC_MSG_RESULT([$XORG]) + ++AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) ++ + if test "x$XORG" = xyes; then + XORG_DDXINCS='-I$(top_srcdir)/hw/xfree86 -I$(top_srcdir)/hw/xfree86/include -I$(top_srcdir)/hw/xfree86/common' + XORG_OSINCS='-I$(top_srcdir)/hw/xfree86/os-support -I$(top_srcdir)/hw/xfree86/os-support/bus -I$(top_srcdir)/os' +@@ -2116,7 +2123,6 @@ if test "x$XORG" = xyes; then + AC_DEFINE(XORG_SERVER, 1, [Building Xorg server]) + AC_DEFINE(XORGSERVER, 1, [Building Xorg server]) + AC_DEFINE(XFree86Server, 1, [Building XFree86 server]) +- AC_DEFINE_UNQUOTED(XORG_VERSION_CURRENT, [$VENDOR_RELEASE], [Current Xorg version]) + AC_DEFINE(NEED_XF86_TYPES, 1, [Need XFree86 typedefs]) + AC_DEFINE(NEED_XF86_PROTOTYPES, 1, [Need XFree86 helper functions]) + AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server]) +@@ -2691,6 +2697,7 @@ hw/dmx/Makefile + hw/dmx/man/Makefile + hw/vfb/Makefile + hw/vfb/man/Makefile ++hw/vnc/Makefile + hw/xnest/Makefile + hw/xnest/man/Makefile + hw/xwin/Makefile +diff -up xserver/hw/Makefile.am.xserver116-rebased xserver/hw/Makefile.am +--- xserver/hw/Makefile.am.xserver116-rebased 2016-09-29 13:14:45.601441659 +0200 ++++ xserver/hw/Makefile.am 2016-09-29 13:14:45.631442006 +0200 +@@ -38,7 +38,8 @@ SUBDIRS = \ + $(DMX_SUBDIRS) \ + $(KDRIVE_SUBDIRS) \ + $(XQUARTZ_SUBDIRS) \ +- $(XWAYLAND_SUBDIRS) ++ $(XWAYLAND_SUBDIRS) \ ++ vnc + + DIST_SUBDIRS = dmx xfree86 vfb xnest xwin xquartz kdrive xwayland + +diff --git xserver/mi/miinitext.c xserver/mi/miinitext.c +index 5596e21..003fc3c 100644 +--- xserver/mi/miinitext.c ++++ xserver/mi/miinitext.c +@@ -107,8 +107,15 @@ SOFTWARE. + #include "os.h" + #include "globals.h" + ++#ifdef TIGERVNC ++extern void vncExtensionInit(INITARGS); ++#endif ++ + /* List of built-in (statically linked) extensions */ + static const ExtensionModule staticExtensions[] = { ++#ifdef TIGERVNC ++ {vncExtensionInit, "VNC-EXTENSION", NULL}, ++#endif + {GEExtensionInit, "Generic Event Extension", &noGEExtension}, + {ShapeExtensionInit, "SHAPE", NULL}, + #ifdef MITSHM +--- xserver/include/os.h~ 2016-10-03 09:07:29.000000000 +0200 ++++ xserver/include/os.h 2016-10-03 14:13:00.013654506 +0200 +@@ -621,7 +621,7 @@ + extern _X_EXPORT void + LogClose(enum ExitCode error); + extern _X_EXPORT Bool +-LogSetParameter(LogParameter param, int value); ++LogSetParameter(enum _LogParameter param, int value); + extern _X_EXPORT void + LogVWrite(int verb, const char *f, va_list args) + _X_ATTRIBUTE_PRINTF(2, 0); diff --git a/tigervnc-xstartup.patch b/tigervnc-xstartup.patch new file mode 100644 index 0000000..b2ed420 --- /dev/null +++ b/tigervnc-xstartup.patch @@ -0,0 +1,33 @@ +diff --git a/unix/vncserver b/unix/vncserver +index c4d0535..64c6744 100755 +--- a/unix/vncserver ++++ b/unix/vncserver +@@ -61,27 +61,7 @@ $defaultXStartup + = ("#!/bin/sh\n\n". + "unset SESSION_MANAGER\n". + "unset DBUS_SESSION_BUS_ADDRESS\n". +- "OS=`uname -s`\n". +- "if [ \$OS = 'Linux' ]; then\n". +- " case \"\$WINDOWMANAGER\" in\n". +- " \*gnome\*)\n". +- " if [ -e /etc/SuSE-release ]; then\n". +- " PATH=\$PATH:/opt/gnome/bin\n". +- " export PATH\n". +- " fi\n". +- " ;;\n". +- " esac\n". +- "fi\n". +- "if [ -x /etc/X11/xinit/xinitrc ]; then\n". +- " exec /etc/X11/xinit/xinitrc\n". +- "fi\n". +- "if [ -f /etc/X11/xinit/xinitrc ]; then\n". +- " exec sh /etc/X11/xinit/xinitrc\n". +- "fi\n". +- "[ -r \$HOME/.Xresources ] && xrdb \$HOME/.Xresources\n". +- "xsetroot -solid grey\n". +- "xterm -geometry 80x24+10+10 -ls -title \"\$VNCDESKTOP Desktop\" &\n". +- "twm &\n"); ++ "exec /etc/X11/xinit/xinitrc\n"); + + $defaultConfig + = ("## Supported server options to pass to vncserver upon invocation can be listed\n". diff --git a/tigervnc.spec b/tigervnc.spec new file mode 100644 index 0000000..24e08bd --- /dev/null +++ b/tigervnc.spec @@ -0,0 +1,271 @@ +%global _hardened_build 1 + +Name: tigervnc +Version: 1.9.0 +Release: 3 +Summary: A TigerVNC remote display system + +License: GPLv2+ +URL: http://www.tigervnc.com + +Source0: %{name}-%{version}.tar.gz +Source1: vncserver.service +Source2: vncserver.sysconfig +Source3: 10-libvnc.conf +Source4: xvnc.service +Source5: xvnc.socket + +Patch1: tigervnc-manpages.patch +Patch2: tigervnc-getmaster.patch +Patch3: tigervnc-shebang.patch +Patch4: tigervnc-xstartup.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 + +Patch100: tigervnc-xserver120.patch + +BuildRequires: gcc-c++ systemd cmake automake autoconf gettext gettext-autopoint pixman-devel fltk-devel >= 1.3.3 +BuildRequires: libX11-devel libtool libxkbfile-devel libpciaccess-devel libXinerama-devel libXfont2-devel +BuildRequires: libXext-devel xorg-x11-server-source libXi-devel libXdmcp-devel libxshmfence-devel +BuildRequires: xorg-x11-xtrans-devel xorg-x11-util-macros xorg-x11-server-devel libXtst-devel libdrm-devel libXt-devel +BuildRequires: openssl-devel mesa-libGL-devel freetype-devel desktop-file-utils java-devel jpackage-utils pam-devel gnutls-devel libjpeg-turbo-devel + +Requires(post): coreutils +Requires(postun):coreutils + +Requires: hicolor-icon-theme +Requires: tigervnc-license +Requires: tigervnc-icons + +%description +Virtual Network Computing (VNC) is a remote display system which +allows you to view a computing 'desktop' environment not only on the +machine where it is running, but from anywhere on the Internet and +from a wide variety of machine architectures. This package contains a +client which will allow you to connect to other desktops running a VNC +server. + +%package server +Summary: A TigerVNC server +Requires: perl-interpreter +Requires: tigervnc-server-minimal +Requires: xorg-x11-xauth +Requires: xorg-x11-xinit +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +Requires(post): systemd + +%description server +The VNC system allows you to access the same desktop from a wide +variety of platforms. This package includes set of utilities +which make usage of TigerVNC server more user friendly. It also +contains x0vncserver program which can export your active +X session. + +%package server-minimal +Summary: A minimal installation of TigerVNC server +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +Requires(post): systemd + +Requires: mesa-dri-drivers, xkeyboard-config, xorg-x11-xkb-utils +Requires: tigervnc-license + +%description server-minimal +The VNC system allows you to access the same desktop from a wide +variety of platforms. This package contains minimal installation +of TigerVNC server, allowing others to access the desktop on your +machine. + +%package server-module +Summary: TigerVNC module to Xorg +Requires: xorg-x11-server-Xorg %(xserver-sdk-abi-requires ansic) %(xserver-sdk-abi-requires videodrv) +Requires: tigervnc-license + +%description server-module +This package contains libvnc.so module to X server, allowing others +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 +Summary: License of TigerVNC suite +BuildArch: noarch + +%description license +This package contains license of the TigerVNC suite + +%package icons +Summary: Icons for TigerVNC viewer +BuildArch: noarch + +%description icons +This package contains icons for TigerVNC viewer + +%prep +%setup -q + +cp -r /usr/share/xorg-x11-server-source/* unix/xserver +pushd unix/xserver +for all in `find . -type f -perm -001`; do + chmod -x "$all" +done +%patch100 -p1 -b .xserver120-rebased +popd + +# Synchronise manpages and --help output (bug #980870). +%patch1 -p1 -b .manpages + +# libvnc.so: don't use unexported GetMaster function (bug #744881 again). +%patch2 -p1 -b .getmaster + +# Don't use shebang in vncserver script. +%patch3 -p1 -b .shebang + +# Clearer xstartup file (bug #923655). +%patch4 -p1 -b .xstartup + +# Utilize system-wide 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 + +%build +export CFLAGS="$RPM_OPT_FLAGS -fpic" +export CXXFLAGS="$CFLAGS" + +%{cmake} . +make %{?_smp_mflags} + +pushd unix/xserver +autoreconf -fiv +%configure \ + --disable-xorg --disable-xnest --disable-xvfb --disable-dmx --disable-xwin --disable-xephyr --disable-kdrive --disable-xwayland \ + --with-pic --disable-static --with-default-font-path="catalogue:%{_sysconfdir}/X11/fontpath.d,built-ins" \ + --with-fontdir=%{_datadir}/X11/fonts --with-xkb-output=%{_localstatedir}/lib/xkb --enable-install-libxf86config \ + --enable-glx --disable-dri --enable-dri2 --disable-dri3 --disable-unit-tests --disable-config-hal --disable-config-udev \ + --with-dri-driver-path=%{_libdir}/dri --without-dtrace --disable-devel-docs --disable-selective-werror + +make %{?_smp_mflags} +popd + +# Build icons +pushd media +make +popd + +# Build Java applet +pushd java +%{cmake} . +JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8" make +popd + +%install +%make_install +rm -f %{buildroot}%{_docdir}/%{name}-%{version}/{README.rst,LICENCE.TXT} + +pushd unix/xserver/hw/vnc +make install DESTDIR=%{buildroot} +popd + +# Install systemd unit file +mkdir -p %{buildroot}%{_unitdir} +install -m644 %{SOURCE1} %{buildroot}%{_unitdir}/vncserver@.service +install -m644 %{SOURCE4} %{buildroot}%{_unitdir}/xvnc@.service +install -m644 %{SOURCE5} %{buildroot}%{_unitdir}/xvnc.socket +rm -rf %{buildroot}%{_initrddir} + +mkdir -p %{buildroot}%{_sysconfdir}/sysconfig +install -m644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/vncservers + +# Install desktop stuff +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/{16x16,24x24,48x48}/apps + +pushd media/icons +for s in 16 24 48; do +install -m644 tigervnc_$s.png %{buildroot}%{_datadir}/icons/hicolor/${s}x$s/apps/tigervnc.png +done +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 + +# remove unwanted files +rm -f %{buildroot}%{_libdir}/xorg/modules/extensions/libvnc.la + +mkdir -p %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/ +install -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/X11/xorg.conf.d/10-libvnc.conf + +%post server +%systemd_post vncserver.service +%systemd_post xvnc.service +%systemd_post xvnc.socket + +%preun server +%systemd_preun vncserver.service +%systemd_preun xvnc.service +%systemd_preun xvnc.socket + +%postun server +%systemd_postun + +%files -f %{name}.lang +%doc README.rst +%{_bindir}/vncviewer +%{_datadir}/applications/* +%{_mandir}/man1/vncviewer.1* + +%files server +%config(noreplace) %{_sysconfdir}/sysconfig/vncservers +%{_unitdir}/vncserver@.service +%{_unitdir}/xvnc@.service +%{_unitdir}/xvnc.socket +%{_bindir}/x0vncserver +%{_bindir}/vncserver +%{_mandir}/man1/vncserver.1* +%{_mandir}/man1/x0vncserver.1* + +%files server-minimal +%{_bindir}/vncconfig +%{_bindir}/vncpasswd +%{_bindir}/Xvnc +%{_mandir}/man1/Xvnc.1* +%{_mandir}/man1/vncpasswd.1* +%{_mandir}/man1/vncconfig.1* + +%files server-module +%{_libdir}/xorg/modules/extensions/libvnc.so +%config %{_sysconfdir}/X11/xorg.conf.d/10-libvnc.conf + +%files server-applet +%doc java/com/tigervnc/vncviewer/README +%{_datadir}/vnc/classes/* + +%files license +%license LICENCE.TXT + +%files icons +%{_datadir}/icons/hicolor/*/apps/* + +%changelog +* Wed Jul 18 2018 openEuler Buildteam - 1.9.0-4 +- Package init diff --git a/vncserver.service b/vncserver.service new file mode 100644 index 0000000..2b8204b --- /dev/null +++ b/vncserver.service @@ -0,0 +1,52 @@ +# The vncserver service unit file +# +# Quick HowTo: +# 1. Copy this file to /etc/systemd/system/vncserver@.service +# 2. Replace with the actual user name and edit vncserver +# parameters appropriately +# 3. Run `systemctl daemon-reload` +# 4. Run `systemctl enable vncserver@:.service` +# +# 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 +WorkingDirectory=/home/ +User= +Group= + +PIDFile=/home//.vnc/%H%i.pid + +ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :' +ExecStart=/usr/bin/vncserver -autokill %i +ExecStop=/usr/bin/vncserver -kill %i + +Restart=on-success +RestartSec=15 + +[Install] +WantedBy=multi-user.target diff --git a/vncserver.sysconfig b/vncserver.sysconfig new file mode 100644 index 0000000..4d0489b --- /dev/null +++ b/vncserver.sysconfig @@ -0,0 +1 @@ +# THIS FILE HAS BEEN REPLACED BY /lib/systemd/system/vncserver@.service diff --git a/xvnc.service b/xvnc.service new file mode 100644 index 0000000..3471e1f --- /dev/null +++ b/xvnc.service @@ -0,0 +1,38 @@ +# The vncserver service unit file +# +# Quick HowTo: +# 1. Copy this file to /etc/systemd/system/xvnc@.service +# 2. Copy xvnc.socket to /etc/systemd/system/xvnc.socket +# 3. Run `systemctl daemon-reload` +# 4. Run `systemctl enable xvnc.socket` +# +# 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=XVNC Per-Connection Daemon + +[Service] +ExecStart=-/usr/bin/Xvnc -inetd -query localhost -geometry 1024x768 -depth 24 -once -SecurityTypes=None +User=nobody +StandardInput=socket +StandardError=syslog diff --git a/xvnc.socket b/xvnc.socket new file mode 100644 index 0000000..9b3f92d --- /dev/null +++ b/xvnc.socket @@ -0,0 +1,9 @@ +[Unit] +Description=XVNC Server + +[Socket] +ListenStream=5900 +Accept=yes + +[Install] +WantedBy=sockets.target