about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools/admin/turbovnc
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2021-04-09 18:28:16 +0000
committerAlyssa Ross <hi@alyssa.is>2021-04-12 18:46:15 +0000
commitfd2e737e0678ee7d8081baef05b305146a2c0034 (patch)
treeac3e9b27576a0382335532d126f9a66d486bc638 /nixpkgs/pkgs/tools/admin/turbovnc
parentcc207d720b6aa836e256c1ee9842bc739e630a8a (diff)
parent9e377a6ce42dccd9b624ae4ce8f978dc892ba0e2 (diff)
downloadnixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.gz
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.bz2
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.lz
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.xz
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.tar.zst
nixlib-fd2e737e0678ee7d8081baef05b305146a2c0034.zip
Merge remote-tracking branch 'nixpkgs/nixos-unstable'
Diffstat (limited to 'nixpkgs/pkgs/tools/admin/turbovnc')
-rw-r--r--nixpkgs/pkgs/tools/admin/turbovnc/default.nix114
1 files changed, 114 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/admin/turbovnc/default.nix b/nixpkgs/pkgs/tools/admin/turbovnc/default.nix
new file mode 100644
index 000000000000..33d248ffde88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/admin/turbovnc/default.nix
@@ -0,0 +1,114 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nixosTests
+
+# 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.6";
+
+  src = fetchFromGitHub {
+    owner = "TurboVNC";
+    repo = "turbovnc";
+    rev = version;
+    sha256 = "sha256-HSppHPBBkTf+88ZBaYG6JK4A/5lOBCxPFv6898TD7PE=";
+  };
+
+  # 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 ]}
+  '';
+
+  passthru.tests.turbovnc-headless-server = nixosTests.turbovnc-headless-server;
+
+  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;
+  };
+}