From c834c60ff94482afe047bad5bf6ad571fdc51bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= Date: Thu, 18 Feb 2021 19:04:34 +0100 Subject: [PATCH] turbovnc: init at 2.2.5 I started out by copying the `tigervnc` derivation, which does things like re-using `xorg.xorgserver.buildInputs` (given that these VNC servers are all forks of Xorg), but then removed that and all the dependencies that did not appear to be needed or checked for in the CMake output. --- pkgs/tools/admin/turbovnc/default.nix | 111 ++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 5 ++ 2 files changed, 116 insertions(+) create mode 100644 pkgs/tools/admin/turbovnc/default.nix diff --git a/pkgs/tools/admin/turbovnc/default.nix b/pkgs/tools/admin/turbovnc/default.nix new file mode 100644 index 000000000000..df45e6f10b86 --- /dev/null +++ b/pkgs/tools/admin/turbovnc/default.nix @@ -0,0 +1,111 @@ +{ lib +, stdenv +, fetchFromGitHub + +# Dependencies +, cmake +, libjpeg_turbo +, makeWrapper +, mesa # for built-in 3D software rendering using swrast +, openjdk # for the client with Java GUI +, openjdk_headless # for the server +, openssh +, openssl +, pam +, perl +, which +, xkbcomp +, xkeyboard_config +, xorg +}: + +stdenv.mkDerivation rec { + pname = "turbovnc"; + version = "2.2.5"; + + src = fetchFromGitHub { + owner = "TurboVNC"; + repo = "turbovnc"; + rev = version; + sha256 = "0r2lk5lza7a9h02g4z5j59d8qj0x1q1my665d1x1plny4g46vam0"; + }; + + # TODO: + # * Build outputs that are unclear: + # * `-- FONT_ENCODINGS_DIRECTORY = /var/empty/share/X11/fonts/encodings` + # Maybe relevant what the tigervnc and tightvnc derivations + # do with their `fontDirectories`? + # * `SERVER_MISC_CONFIG_PATH = /var/empty/lib64/xorg` + # * The thing about xorg `protocol.txt` + # * Does SSH support require `openssh` on PATH? + # * Add `enableClient ? true` flag that disables the client GUI + # so that the server can be built without openjdk dependency. + # * Perhaps allow to build the client on non-Linux platforms. + + nativeBuildInputs = [ + cmake + makeWrapper + openjdk_headless + ]; + + buildInputs = [ + libjpeg_turbo + openssl + pam + perl + ] ++ (with xorg; [ + libSM + libX11 + libXext + libXi + xorgproto + ]); + + cmakeFlags = [ + # For the 3D software rendering built into TurboVNC, pass the path + # to the swrast dri driver in Mesa. + # Can also be given at runtime to its `Xvnc` as: + # -dridir /nix/store/...-mesa-20.1.10-drivers/lib/dri/ + "-DDRI_DRIVER_PATH=${mesa.drivers}/lib/dri" + # The build system doesn't find these files automatically. + "-DTJPEG_JAR=${libjpeg_turbo.out}/share/java/turbojpeg.jar" + "-DTJPEG_JNILIBRARY=${libjpeg_turbo.out}/lib/libturbojpeg.so" + "-DXKB_BASE_DIRECTORY=${xkeyboard_config}/share/X11/xkb" + "-DXKB_BIN_DIRECTORY=${xkbcomp}/bin" + ]; + + postInstall = '' + # turbovnc dlopen()s libssl.so depending on the requested encryption. + wrapProgram $out/bin/Xvnc \ + --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl ]} + + # `twm` is the default window manager that `vncserver` tries to start, + # and it has minimal dependencies (no non-Xorg). + # (This default is written by `vncserver` to `~/.vnc/xstartup.turbovnc`, + # see https://github.com/TurboVNC/turbovnc/blob/ffdb57d9/unix/vncserver.in#L201.) + # It checks for it using `which twm`. + wrapProgram $out/bin/vncserver \ + --prefix PATH : ${lib.makeBinPath [ which xorg.twm ]} + + # Patch /usr/bin/perl + patchShebangs $out/bin/vncserver + + # vncserver needs `xauth` + wrapProgram $out/bin/vncserver \ + --prefix PATH : ${lib.makeBinPath (with xorg; [ xauth ])} + + # The viewer is in Java and requires `JAVA_HOME`. + # For SSH support, `ssh` is required on `PATH`. + wrapProgram $out/bin/vncviewer \ + --prefix JAVA_HOME : "${lib.makeLibraryPath [ openjdk ]}/openjdk" \ + --prefix PATH : ${lib.makeBinPath [ openssh ]} + ''; + + meta = { + homepage = "https://turbovnc.org/"; + license = lib.licenses.gpl2Plus; + description = "High-speed version of VNC derived from TightVNC"; + maintainers = with lib.maintainers; [ nh2 ]; + platforms = with lib.platforms; linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c37e6c0985af..523a223e692e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8934,6 +8934,11 @@ in ttwatch = callPackage ../tools/misc/ttwatch { }; + turbovnc = callPackage ../tools/admin/turbovnc { + # fontDirectories = [ xorg.fontadobe75dpi xorg.fontmiscmisc xorg.fontcursormisc xorg.fontbhlucidatypewriter75dpi ]; + libjpeg_turbo = libjpeg_turbo.override { enableJava = true; }; + }; + udunits = callPackage ../development/libraries/udunits { }; uftp = callPackage ../servers/uftp {};