From patchwork Mon Oct 10 16:05:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Mehmet Tekman X-Patchwork-Id: 43304 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id D65E827BBE9; Mon, 10 Oct 2022 17:12:18 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI, SPF_HELO_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id EF10127BBEA for ; Mon, 10 Oct 2022 17:12:14 +0100 (BST) Received: from localhost ([::1]:55046 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ohvO2-0007CP-0P for patchwork@mira.cbaines.net; Mon, 10 Oct 2022 12:12:14 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56514) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ohvJ0-0003mh-9K for guix-patches@gnu.org; Mon, 10 Oct 2022 12:07:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:50541) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ohvIz-0005Rb-Tc for guix-patches@gnu.org; Mon, 10 Oct 2022 12:07:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ohvIz-0000lU-IL for guix-patches@gnu.org; Mon, 10 Oct 2022 12:07:01 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#58341] [PATCH] Add x11vnc recipe Resent-From: Mehmet Tekman Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 10 Oct 2022 16:07:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 58341 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: moreinfo patch To: Maxim Cournoyer Cc: 58341@debbugs.gnu.org Received: via spool by 58341-submit@debbugs.gnu.org id=B58341.16654179962896 (code B ref 58341); Mon, 10 Oct 2022 16:07:01 +0000 Received: (at 58341) by debbugs.gnu.org; 10 Oct 2022 16:06:36 +0000 Received: from localhost ([127.0.0.1]:49619 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohvIZ-0000kc-8c for submit@debbugs.gnu.org; Mon, 10 Oct 2022 12:06:36 -0400 Received: from mail-lf1-f44.google.com ([209.85.167.44]:40546) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ohvIW-0000kI-7f for 58341@debbugs.gnu.org; Mon, 10 Oct 2022 12:06:34 -0400 Received: by mail-lf1-f44.google.com with SMTP id b1so12283504lfs.7 for <58341@debbugs.gnu.org>; Mon, 10 Oct 2022 09:06:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=9AoZ5RXQPJmfgXa2gRonFK0Q5NqS4HAeUvnolrqOAWg=; b=kDOSYD4dEbFjv7qCkws+tLnFK6vzV6hV9T5XEHki3wAQC397PsCePmz3tJ73HlXc38 d45SlrvgfZi7F0/B4730VP74+RNO910/Mfni/sLqfROseR0gs4o7JzNX+I7InuhCxHyI lneUswUlVhfsj0JgI4zXpCvz2f/XoNx5QqF5cXvjZ3R6+MRF+80pBb8sXDOl4xDVTNqR ElRVlmyW+fjDxFyEH6PChHCIv0xk07eG3uhu7MbK5Ei5drR1+3KaBbMNdfV220jSsG3s qaXm1pMz0Q0wRwHVJ7jYXFXiS6w9J1LQrJNna+rtyyElzsYCnj5/5lkWryswqe2DH2h8 tXKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9AoZ5RXQPJmfgXa2gRonFK0Q5NqS4HAeUvnolrqOAWg=; b=EheG+GmJN7GCLe40Udfs8lMU55m8vyZKzA+Om/XrYtTuh95i6QNGg0352ONpsc+DJo 3SLlMCRUhcFNNrnwbN2I3vgWR5s5DdUIjDlkWwuNSgPMa6FP69bC4dbCx7+4Z2z4tjAd xULy477dAErO5iiOJacacWKvKumEe0wFZetX6kJo/wQacaXdNzoWd9B7gcJheNeUAQkY 2LKrtg561WiDQ/zAAp5U6WaGK9jCIjcTq0iYgwn7u86yewrvM3NUhSOGSP+OABiE8ecH kvtdrV/Y/DUjCfS4fSQDgsY4MlnVICVC92dJX70lppEEX0MXNbGNQUMPf+H7nyBRMlZc VXCw== X-Gm-Message-State: ACrzQf0r4hvZuVs0ELuQUGGH3L3yWUG5UqqrqF7Pa6FwpsLzBJaVPlHx kxY47NZWNoiMmyNeFgCx2p2Ga962PtGJdWxIIVY= X-Google-Smtp-Source: AMsMyM7qKO+f31uzLqkUMbsVOpwiaQHl40JvOWdwqUSh3WfNZ5LCvAfzoyqNWZhDWYKLaAjPqya/3nEPYumyks68cyk= X-Received: by 2002:a05:6512:462:b0:4a2:22ff:e628 with SMTP id x2-20020a056512046200b004a222ffe628mr7378467lfd.4.1665417985792; Mon, 10 Oct 2022 09:06:25 -0700 (PDT) MIME-Version: 1.0 References: <874jwf2atx.fsf@gmail.com> In-Reply-To: <874jwf2atx.fsf@gmail.com> From: Mehmet Tekman Date: Mon, 10 Oct 2022 18:05:49 +0200 Message-ID: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches Hello, thank you for the review! I've put the recipe into vnc.scm and built to a newer commit that makes the patches redundant (thanks for the tip, I was basing my recipe off one from another distro). I've fixed the commit message and linted and styled the vnc.scm file. I created a new branch and put my changes there, so please disregard the above changes. I attach here the patch file, as I don't quite trust myself to paste the changes into this email. Looking forward to the next review, Best, Mehmet On Sat, 8 Oct 2022 at 06:33, Maxim Cournoyer wrote: > > Hello, and thank you for your contribution! > > Mehmet Tekman writes: > > > --- > > gnu/packages/patches/x11vnc-gcc10-fix.patch | 42 ++++++++++ > > ...c-scan-limit-access-to-shared-memory.patch | 22 ++++++ > > .../patches/x11vnc-xfc-null-ptr.patch | 29 +++++++ > > gnu/packages/x11vnc.scm | 79 +++++++++++++++++++ > > 4 files changed, 172 insertions(+) > > create mode 100644 gnu/packages/patches/x11vnc-gcc10-fix.patch > > create mode 100644 > > gnu/packages/patches/x11vnc-scan-limit-access-to-shared-memory.patch > > create mode 100644 gnu/packages/patches/x11vnc-xfc-null-ptr.patch > > create mode 100644 gnu/packages/x11vnc.scm > > Would it be possible to send the patch complete with the commit message, > as can be produced with 'git format-patch'? You can read 'info "(guix) > Submitting Patches". The git commit message should use the GNU > ChangeLog format, as mentioned there. You can look at the git history > to learn. > > The patches should be registered in the gnu/local.mk file, in the > dist_patch_DATA section. Please mind the sorting in the file. > > > diff --git a/gnu/packages/patches/x11vnc-gcc10-fix.patch > > b/gnu/packages/patches/x11vnc-gcc10-fix.patch > > new file mode 100644 > > index 0000000000..a32d5785d9 > > --- /dev/null > > +++ b/gnu/packages/patches/x11vnc-gcc10-fix.patch > > @@ -0,0 +1,42 @@ > > +From a48b0b1cd887d7f3ae67f525d7d334bd2feffe60 Mon Sep 17 00:00:00 2001 > > +From: Alexander Tsoy > > +Date: Tue, 28 Jan 2020 22:21:01 +0300 > > +Subject: [PATCH] Fix build with -fno-common > > + > > +GCC 10 defaults to -fno-common > > +--- > > + src/util.c | 3 +++ > > + src/util.h | 6 +++--- > > + 2 files changed, 6 insertions(+), 3 deletions(-) > > + > > +diff --git a/src/util.c b/src/util.c > > +index a82a1a42..6a52ebf4 100644 > > +--- a/src/util.c > > ++++ b/src/util.c > > +@@ -47,6 +47,9 @@ int hxl = 0; > > + #ifdef LIBVNCSERVER_HAVE_LIBPTHREAD > > + MUTEX(x11Mutex); > > + MUTEX(scrollMutex); > > ++MUTEX(clientMutex); > > ++MUTEX(inputMutex); > > ++MUTEX(pointerMutex); > > + #endif > > + > > + int nfix(int i, int n); > > +diff --git a/src/util.h b/src/util.h > > +index 35c1afd2..99b5dd1d 100644 > > +--- a/src/util.h > > ++++ b/src/util.h > > +@@ -102,9 +102,9 @@ extern struct timeval _mysleep; > > + #ifdef LIBVNCSERVER_HAVE_LIBPTHREAD > > + extern MUTEX(x11Mutex); > > + extern MUTEX(scrollMutex); > > +-MUTEX(clientMutex); > > +-MUTEX(inputMutex); > > +-MUTEX(pointerMutex); > > ++extern MUTEX(clientMutex); > > ++extern MUTEX(inputMutex); > > ++extern MUTEX(pointerMutex); > > + #endif > > + > > + #define X_INIT INIT_MUTEX(x11Mutex) > > diff --git a/gnu/packages/patches/x11vnc-scan-limit-access-to-shared-memory.patch > > b/gnu/packages/patches/x11vnc-scan-limit-access-to-shared-memory.patch > > new file mode 100644 > > index 0000000000..5424094434 > > --- /dev/null > > +++ b/gnu/packages/patches/x11vnc-scan-limit-access-to-shared-memory.patch > > @@ -0,0 +1,22 @@ > > +From 69eeb9f7baa14ca03b16c9de821f9876def7a36a Mon Sep 17 00:00:00 2001 > > +From: =?UTF-8?q?Gu=C3=A9nal=20DAVALAN?= > > +Date: Wed, 18 Nov 2020 08:40:45 +0100 > > +Subject: [PATCH] scan: limit access to shared memory segments to current user > > + > > +--- > > + src/scan.c | 2 +- > > + 1 file changed, 1 insertion(+), 1 deletion(-) > > + > > +diff --git a/src/scan.c b/src/scan.c > > +index 43e00d20..12994d52 100644 > > +--- a/src/scan.c > > ++++ b/src/scan.c > > +@@ -320,7 +320,7 @@ static int shm_create(XShmSegmentInfo *shm, > > XImage **ximg_ptr, int w, int h, > > + > > + #if HAVE_XSHM > > + shm->shmid = shmget(IPC_PRIVATE, > > +- xim->bytes_per_line * xim->height, IPC_CREAT | 0777); > > ++ xim->bytes_per_line * xim->height, IPC_CREAT | 0600); > > + > > + if (shm->shmid == -1) { > > + rfbErr("shmget(%s) failed.\n", name); > > diff --git a/gnu/packages/patches/x11vnc-xfc-null-ptr.patch > > b/gnu/packages/patches/x11vnc-xfc-null-ptr.patch > > new file mode 100644 > > index 0000000000..65f339d716 > > --- /dev/null > > +++ b/gnu/packages/patches/x11vnc-xfc-null-ptr.patch > > @@ -0,0 +1,29 @@ > > +From 95a10ab64c2dbbec2c8dad91a5ffb73a0d68474b Mon Sep 17 00:00:00 2001 > > +From: Jonathan Liu > > +Date: Mon, 16 Mar 2020 20:04:06 +1100 > > +Subject: [PATCH] src/cursor: fix xfc NULL pointer dereference > > + > > +xfc->width and xfc->height for the XFixes cursor image returned from > > +XFixesGetCursorImage(dpy) are accessed without first checking that xfc > > +is not NULL. This can result in the server sometimes crashing when > > +moving a Google Chrome window. > > + > > +Fixes: 37c946191a0f ("Broken cursor bugfix for 64 bit systems (#49)") > > +Signed-off-by: Jonathan Liu > > +--- > > + src/cursor.c | 2 +- > > + 1 file changed, 1 insertion(+), 1 deletion(-) > > + > > +diff --git a/src/cursor.c b/src/cursor.c > > +index 39e73a69..74a08c69 100644 > > +--- a/src/cursor.c > > ++++ b/src/cursor.c > > +@@ -1311,7 +1311,7 @@ static int get_exact_cursor(int init) { > > + > > + /* retrieve the cursor info + pixels from server: */ > > + xfc = XFixesGetCursorImage(dpy); > > +- { > > ++ if (xfc) { > > + /* 2017-07-09, Stephan Fuhrmann: This fixes an > > implementation flaw for 64 bit systems. > > + * The XFixesCursorImage structure says xfc->pixels is > > (unsigned long*) in the structure, but > > + * the protocol spec says it's 32 bit per pixel > > diff --git a/gnu/packages/x11vnc.scm b/gnu/packages/x11vnc.scm > > new file mode 100644 > > index 0000000000..55c51305b3 > > Since we are using a recent commit, shouldn't these (upstream?) patches > be unnecessary? Perhaps we can use an even newer commit that includes > them? > > > --- /dev/null > > +++ b/gnu/packages/x11vnc.scm > > @@ -0,0 +1,79 @@ > > +;;; GNU Guix --- Functional package management for GNU > > +;;; Copyright © 2022 Mehmet Tekman > > +;;; > > +;;; This file is part of GNU Guix. > > +;;; > > +;;; GNU Guix is free software; you can redistribute it and/or modify it > > +;;; under the terms of the GNU General Public License as published by > > +;;; the Free Software Foundation; either version 3 of the License, or (at > > +;;; your option) any later version. > > +;;; > > +;;; GNU Guix is distributed in the hope that it will be useful, but > > +;;; WITHOUT ANY WARRANTY; without even the implied warranty of > > +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > +;;; GNU General Public License for more details. > > +;;; > > +;;; You should have received a copy of the GNU General Public License > > +;;; along with GNU Guix. If not, see . > > + > > + > > +(define-module (gnu packages x11vnc) > > There already is a (gnu packages vnc) module; that'd be a better home. > We can group all VNC-related packages there. > > > + #:use-module (guix packages) > > + #:use-module (gnu packages) > > + #:use-module (gnu packages perl) > > + #:use-module (gnu packages tcl) > > + #:use-module (gnu packages pkg-config) > > + #:use-module (gnu packages xorg) > > + #:use-module (gnu packages tls) > > + #:use-module (guix git-download) > > + #:use-module (guix build-system gnu) > > + #:use-module ((guix licenses) #:prefix license:) > > + #:use-module (gnu packages autotools) > > + #:use-module (gnu packages avahi) > > + #:use-module (gnu packages vnc) > > + #:use-module (gnu packages compression) > > + #:use-module (gnu packages image)) > > Imports should be lexicographically sorted. > > > +(define-public x11vnc > > When using an unreleased version, it's good to mention why (issues it > fixes, a very old release, etc.). > > + (let ((commit "4ca006fed80410bd9b061a1519bd5d9366bb0bc8") > > + (version "0.9.16") > > + (revision "1")) > > + (package > > + (name "x11vnc") > > + (version (git-version version revision commit)) > > + (source (origin > > + (method git-fetch) > > + (uri (git-reference > > + (url "https://github.com/LibVNC/x11vnc") > > + (commit commit))) > > + (file-name (git-file-name name version)) > > + (sha256 > > + (base32 > > + "1g652mmi79pfq4p5p7spaswa164rpzjhc5rn2phy5pm71lm0vib1")) > > + (patches > > + (search-patches "x11vnc-xfc-null-ptr.patch" > > + "x11vnc-gcc10-fix.patch" > > + > > "x11vnc-scan-limit-access-to-shared-memory.patch")))) > > Odd blank line here. You can try './pre-inst-env guix style x11vnc' to > see how it would do it, else I'd do it like to avoid breaking the 80 > chars max width: > > (search-patches > "patch1" > "patch2" > ...) > > > + (build-system gnu-build-system) > > + (arguments > > + '(#:phases > > + (modify-phases > > + %standard-phases > > + (add-before 'bootstrap 'delete-premature-configure > > + (lambda _ (substitute* "./autogen.sh" > > + ((".*/configure") ""))))))) > > + (native-inputs (list > > + ;; [optional requirements] > > + ;; perl tk > > + autoconf automake autobuild pkg-config avahi libvnc > > + libx11 libxcomposite libxdamage libxext libxfixes libxi > > + libxinerama libxrandr libxtst > > + openssl xdpyinfo zlib libjpeg-turbo xf86-video-dummy)) > > The libraries that are used at run time should appear as inputs, not > native-inputs. Native-inputs are for build tools or tests. > > > + (synopsis "VNC server for real X displays") > > + (home-page "https://github.com/LibVNC/x11vnc") > > + (description > > + "x11vnc allows one to view remotely and interact with real X > > +displays (i.e. a display corresponding to a physical monitor, keyboard, and > > +mouse) with any VNC viewer. In this way it plays the role for Unix/X11 that > > +WinVNC plays for Windows.") > > I'd remove the useless comparison with windows, perhaps stress that this > provides a VNC *server* in the description as well. > > > + (license license:gpl2)))) > > -- > Thanks, > Maxim From 379c152a559f7538cb5ec868dc58a03daf592f05 Mon Sep 17 00:00:00 2001 From: Mehmet Tekman Date: Mon, 10 Oct 2022 17:54:21 +0200 Subject: [PATCH] gnu: Add x11vnc. * gnu/packages/vnc.scm (x11vnc): New variable. --- gnu/packages/vnc.scm | 55 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/gnu/packages/vnc.scm b/gnu/packages/vnc.scm index 84c84aec76..017ac6b343 100644 --- a/gnu/packages/vnc.scm +++ b/gnu/packages/vnc.scm @@ -6,6 +6,7 @@ ;;; Copyright © 2020 Vincent Legoll ;;; Copyright © 2021, 2022 Tobias Geerinckx-Rice ;;; Copyright © 2022 Maxim Cournoyer +;;; Copyright © 2022 Mehmet Tekman ;;; ;;; This file is part of GNU Guix. ;;; @@ -24,10 +25,12 @@ (define-module (gnu packages vnc) #:use-module (guix build-system cmake) + #:use-module (guix build-system gnu) #:use-module (guix download) #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix gexp) + #:use-module (guix git-download) #:use-module (guix packages) #:use-module (guix utils) #:use-module (gnu packages) @@ -511,6 +514,58 @@ (define openjdk #$(this-package-input "openjdk")) ratpoison.") (license license:gpl2+))) +(define-public x11vnc + ;; The release version of 0.9.16 requires patches to work, so we pin to the + ;; latest working commit + (let ((commit "3e4dc8ef2985a6e670e1d9649fe55395c2b31039") + (version "0.9.16") + (revision "1")) + (package + (name "x11vnc") + (version (git-version version revision commit)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/LibVNC/x11vnc") + (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0a120gv9h3whiznlddl0j3nz3400jjgl97znaincm5i2m5pnjifs")))) + (build-system gnu-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (add-before 'bootstrap 'delete-premature-configure + (lambda _ + (substitute* "./autogen.sh" + ((".*/configure") + ""))))))) + (native-inputs (list autoconf automake autobuild pkg-config)) + (inputs (list avahi + libvnc + libx11 + libxcomposite + libxdamage + libxext + libxfixes + libxi + libxinerama + libxrandr + libxtst + openssl + xdpyinfo + zlib + libjpeg-turbo + xf86-video-dummy)) + (synopsis "VNC server for real X displays") + (home-page "https://github.com/LibVNC/x11vnc") + (description + "x11vnc allows one to view remotely and interact with real X +displays (i.e. a display corresponding to a physical monitor, keyboard, and +mouse) with any VNC viewer.") + (license license:gpl2)))) + + (define-public libvnc (package (name "libvnc") -- 2.38.0