From 586c33a4545b335ba0b41d87e1f6e58aee68fd35 Mon Sep 17 00:00:00 2001 From: Ryan Kuba Date: Wed, 11 Dec 2024 19:28:44 +0000 Subject: [PATCH] Resolve KASM-6760 "Feature/ latest xorg" --- builder/build.sh | 6 +- builder/dockerfile.alpine_317.build | 2 +- builder/dockerfile.alpine_318.build | 2 +- builder/dockerfile.alpine_319.build | 2 +- builder/dockerfile.alpine_320.build | 2 +- builder/dockerfile.alpine_321.build | 2 +- builder/dockerfile.debian_bookworm.build | 2 +- builder/dockerfile.kali_kali-rolling.build | 2 +- builder/dockerfile.oracle_8.build | 2 +- builder/dockerfile.oracle_9.build | 2 +- builder/dockerfile.ubuntu_jammy.build | 2 +- builder/dockerfile.ubuntu_noble.build | 2 +- unix/xserver/hw/vnc/xorg-version.h | 4 +- unix/xserver/hw/vnc/xvnc.c | 8 +- unix/xserver21.patch | 115 +++++++++++++++++++++ 15 files changed, 140 insertions(+), 15 deletions(-) create mode 100644 unix/xserver21.patch diff --git a/builder/build.sh b/builder/build.sh index e2842eb..cb0541b 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -46,7 +46,11 @@ EOF cd /tmp # default to the version of x in Ubuntu 18.04, otherwise caller will need to specify XORG_VER=${XORG_VER:-"1.19.6"} -XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##') +if [[ "${XORG_VER}" == 21* ]]; then + XORG_PATCH=21 +else + XORG_PATCH=$(echo "$XORG_VER" | grep -Po '^\d.\d+' | sed 's#\.##') +fi wget --no-check-certificate https://www.x.org/archive/individual/xserver/xorg-server-${XORG_VER}.tar.gz #git clone https://kasmweb@bitbucket.org/kasmtech/kasmvnc.git diff --git a/builder/dockerfile.alpine_317.build b/builder/dockerfile.alpine_317.build index 2fdecd3..0b23bcb 100644 --- a/builder/dockerfile.alpine_317.build +++ b/builder/dockerfile.alpine_317.build @@ -2,7 +2,7 @@ FROM alpine:3.17 ENV KASMVNC_BUILD_OS alpine ENV KASMVNC_BUILD_OS_CODENAME 317 -ENV XORG_VER 1.20.14 +ENV XORG_VER 21.1.8 RUN \ echo "**** install build deps ****" && \ diff --git a/builder/dockerfile.alpine_318.build b/builder/dockerfile.alpine_318.build index f446764..8a01ac8 100644 --- a/builder/dockerfile.alpine_318.build +++ b/builder/dockerfile.alpine_318.build @@ -2,7 +2,7 @@ FROM alpine:3.18 ENV KASMVNC_BUILD_OS alpine ENV KASMVNC_BUILD_OS_CODENAME 318 -ENV XORG_VER 1.20.14 +ENV XORG_VER 21.1.10 RUN \ echo "**** install build deps ****" && \ diff --git a/builder/dockerfile.alpine_319.build b/builder/dockerfile.alpine_319.build index ee618be..a73670b 100644 --- a/builder/dockerfile.alpine_319.build +++ b/builder/dockerfile.alpine_319.build @@ -2,7 +2,7 @@ FROM alpine:3.19 ENV KASMVNC_BUILD_OS alpine ENV KASMVNC_BUILD_OS_CODENAME 319 -ENV XORG_VER 1.20.14 +ENV XORG_VER 21.1.12 RUN \ echo "**** install build deps ****" && \ diff --git a/builder/dockerfile.alpine_320.build b/builder/dockerfile.alpine_320.build index 609f702..42995f1 100644 --- a/builder/dockerfile.alpine_320.build +++ b/builder/dockerfile.alpine_320.build @@ -2,7 +2,7 @@ FROM alpine:3.20 ENV KASMVNC_BUILD_OS alpine ENV KASMVNC_BUILD_OS_CODENAME 320 -ENV XORG_VER 1.20.14 +ENV XORG_VER 21.1.14 RUN \ echo "**** install build deps ****" && \ diff --git a/builder/dockerfile.alpine_321.build b/builder/dockerfile.alpine_321.build index 69954a5..e73d31f 100644 --- a/builder/dockerfile.alpine_321.build +++ b/builder/dockerfile.alpine_321.build @@ -2,7 +2,7 @@ FROM alpine:3.21 ENV KASMVNC_BUILD_OS alpine ENV KASMVNC_BUILD_OS_CODENAME 321 -ENV XORG_VER 1.20.14 +ENV XORG_VER 21.1.14 RUN \ echo "**** install build deps ****" && \ diff --git a/builder/dockerfile.debian_bookworm.build b/builder/dockerfile.debian_bookworm.build index 6c9b412..8c0e8de 100644 --- a/builder/dockerfile.debian_bookworm.build +++ b/builder/dockerfile.debian_bookworm.build @@ -2,7 +2,7 @@ FROM debian:bookworm-slim ENV KASMVNC_BUILD_OS debian ENV KASMVNC_BUILD_OS_CODENAME bookworm -ENV XORG_VER 1.20.10 +ENV XORG_VER 21.1.7 ENV DEBIAN_FRONTEND noninteractive RUN \ diff --git a/builder/dockerfile.kali_kali-rolling.build b/builder/dockerfile.kali_kali-rolling.build index ece61b0..0812308 100644 --- a/builder/dockerfile.kali_kali-rolling.build +++ b/builder/dockerfile.kali_kali-rolling.build @@ -2,7 +2,7 @@ FROM kalilinux/kali-rolling:latest ENV KASMVNC_BUILD_OS kali ENV KASMVNC_BUILD_OS_CODENAME kali-rolling -ENV XORG_VER 1.20.10 +ENV XORG_VER 21.1.14 ENV DEBIAN_FRONTEND noninteractive RUN grep '^deb' /etc/apt/sources.list | sed 's#^deb#deb-src#' >> /etc/apt/sources.list diff --git a/builder/dockerfile.oracle_8.build b/builder/dockerfile.oracle_8.build index d3cc907..4a98a19 100644 --- a/builder/dockerfile.oracle_8.build +++ b/builder/dockerfile.oracle_8.build @@ -2,7 +2,7 @@ FROM oraclelinux:8 ENV KASMVNC_BUILD_OS oracle ENV KASMVNC_BUILD_OS_CODENAME 8 -ENV XORG_VER 1.20.10 +ENV XORG_VER 1.20.11 # Install from stock repos RUN \ diff --git a/builder/dockerfile.oracle_9.build b/builder/dockerfile.oracle_9.build index 2b4a102..ca94b69 100644 --- a/builder/dockerfile.oracle_9.build +++ b/builder/dockerfile.oracle_9.build @@ -2,7 +2,7 @@ FROM oraclelinux:9 ENV KASMVNC_BUILD_OS oracle ENV KASMVNC_BUILD_OS_CODENAME 9 -ENV XORG_VER 1.20.10 +ENV XORG_VER 1.20.11 # Install from stock repos RUN \ diff --git a/builder/dockerfile.ubuntu_jammy.build b/builder/dockerfile.ubuntu_jammy.build index ee120cb..933fc90 100644 --- a/builder/dockerfile.ubuntu_jammy.build +++ b/builder/dockerfile.ubuntu_jammy.build @@ -2,7 +2,7 @@ FROM ubuntu:jammy ENV KASMVNC_BUILD_OS ubuntu ENV KASMVNC_BUILD_OS_CODENAME jammy -ENV XORG_VER 1.20.8 +ENV XORG_VER 21.1.3 ENV DEBIAN_FRONTEND noninteractive RUN sed -i 's$# deb-src$deb-src$' /etc/apt/sources.list diff --git a/builder/dockerfile.ubuntu_noble.build b/builder/dockerfile.ubuntu_noble.build index 2375253..a71ad86 100644 --- a/builder/dockerfile.ubuntu_noble.build +++ b/builder/dockerfile.ubuntu_noble.build @@ -2,7 +2,7 @@ FROM ubuntu:noble ENV KASMVNC_BUILD_OS ubuntu ENV KASMVNC_BUILD_OS_CODENAME noble -ENV XORG_VER 1.20.8 +ENV XORG_VER 21.1.12 ENV DEBIAN_FRONTEND noninteractive RUN sed -i 's$Types: deb$Types: deb deb-src$' /etc/apt/sources.list.d/ubuntu.sources diff --git a/unix/xserver/hw/vnc/xorg-version.h b/unix/xserver/hw/vnc/xorg-version.h index 1614571..255a17c 100644 --- a/unix/xserver/hw/vnc/xorg-version.h +++ b/unix/xserver/hw/vnc/xorg-version.h @@ -54,8 +54,10 @@ #define XORG 119 #elif XORG_VERSION_CURRENT < ((1 * 10000000) + (20 * 100000) + (99 * 1000)) #define XORG 120 +#elif XORG_VERSION_CURRENT < ((1 * 10000000) + (21 * 100000) + (99 * 1000)) +#define XORG 121 #else -#error "X.Org newer than 1.20 is not supported" +#error "X.Org newer than 21 is not supported" #endif #endif diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c index 0323d2e..cc500f4 100644 --- a/unix/xserver/hw/vnc/xvnc.c +++ b/unix/xserver/hw/vnc/xvnc.c @@ -94,7 +94,6 @@ from the X Consortium. #undef VENDOR_RELEASE #undef VENDOR_STRING #include "version-config.h" -#include "site.h" #define XVNCVERSION "KasmVNC 1.3.3" #define XVNCCOPYRIGHT ("Copyright (C) 1999-2018 KasmVNC Team and many others (see README.me)\n" \ @@ -164,7 +163,7 @@ const char *driNode = NULL; static Bool displaySpecified = FALSE; static char displayNumStr[16]; -static int vncVerbose = DEFAULT_LOG_VERBOSITY; +static int vncVerbose = 0; int unixrelays[MAX_UNIX_RELAYS]; char unixrelaynames[MAX_UNIX_RELAYS][MAX_UNIX_RELAY_NAME_LEN]; @@ -283,8 +282,13 @@ vncPrintBanner(void) ErrorF("\nXvnc %s%s - built %s\n%s", XVNCVERSION, sizeof(XVNCEXTRAVERSION) > 2 ? XVNCEXTRAVERSION : "", buildtime, XVNCCOPYRIGHT); + // VENDOR_STRING was removed in 21 + #ifdef VENDOR_STRING ErrorF("Underlying X server release %d, %s\n\n", VENDOR_RELEASE, VENDOR_STRING); + #else + ErrorF("Underlying X server release %d\n\n", VENDOR_RELEASE); + #endif } static void diff --git a/unix/xserver21.patch b/unix/xserver21.patch new file mode 100644 index 0000000..68164cc --- /dev/null +++ b/unix/xserver21.patch @@ -0,0 +1,115 @@ +diff -urpN xorg-server-1.20.0/configure.ac xorg-server-1.20.0/configure.ac +--- xorg-server-1.20.0/configure.ac 2018-05-10 09:32:34.000000000 -0700 ++++ xorg-server-1.20.0/configure.ac 2018-06-13 19:04:47.536413626 -0700 +@@ -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]) +@@ -1777,6 +1778,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 + +@@ -1812,6 +1817,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' +@@ -2029,7 +2036,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]) +@@ -2565,6 +2571,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 -urpN xorg-server-1.20.0/hw/Makefile.am xorg-server-1.20.0/hw/Makefile.am +--- xorg-server-1.20.0/hw/Makefile.am 2018-05-10 09:32:34.000000000 -0700 ++++ xorg-server-1.20.0/hw/Makefile.am 2018-06-13 19:04:47.536413626 -0700 +@@ -44,3 +44,5 @@ + + relink: + $(AM_V_at)for i in $(SUBDIRS) ; do $(MAKE) -C $$i relink || exit 1 ; done ++ ++SUBDIRS += vnc +diff -urpN xorg-server-1.20.0/mi/miinitext.c xorg-server-1.20.0/mi/miinitext.c +--- xorg-server-1.20.0/mi/miinitext.c 2018-05-10 09:32:37.000000000 -0700 ++++ xorg-server-1.20.0/mi/miinitext.c 2018-06-13 19:05:14.742200675 -0700 +@@ -107,8 +107,15 @@ SOFTWARE. + #include "os.h" + #include "globals.h" + ++#ifdef KASMVNC ++extern void vncExtensionInit(void); ++#endif ++ + /* List of built-in (statically linked) extensions */ + static const ExtensionModule staticExtensions[] = { ++#ifdef KASMVNC ++ {vncExtensionInit, "VNC-EXTENSION", NULL}, ++#endif + {GEExtensionInit, "Generic Event Extension", &noGEExtension}, + {ShapeExtensionInit, "SHAPE", NULL}, + #ifdef MITSHM +--- xserver.orig/present/present.c 2019-02-26 21:28:50.000000000 +0200 ++++ xserver/present/present.c 2023-01-20 11:32:27.175493594 +0200 +@@ -27,6 +27,8 @@ + #include "present_priv.h" + #include + ++void xvnc_sync_dri3_pixmap(PixmapPtr pixmap); ++ + /* + * Returns: + * TRUE if the first MSC value is equal to or after the second one +@@ -79,6 +81,8 @@ + ScreenPtr screen = drawable->pScreen; + GCPtr gc; + ++ xvnc_sync_dri3_pixmap(pixmap); ++ + gc = GetScratchGC(drawable->depth, screen); + if (update) { + ChangeGCVal changes[2]; +--- xserver.orig/damageext/damageext.c 2019-02-26 21:28:50.000000000 +0200 ++++ xserver/damageext/damageext.c 2023-03-21 12:52:58.411647186 +0200 +@@ -87,6 +87,8 @@ + *h = draw->height; + } + ++void xvnc_sync_dri3_textures(void); ++ + static void + DamageExtNotify(DamageExtPtr pDamageExt, BoxPtr pBoxes, int nBoxes) + { +@@ -97,6 +99,8 @@ + + damageGetGeometry(pDrawable, &x, &y, &w, &h); + ++ xvnc_sync_dri3_textures(); ++ + UpdateCurrentTimeIf(); + ev = (xDamageNotifyEvent) { + .type = DamageEventBase + XDamageNotify,