From 8b6f54f0070ce2f556fe025f5efdc945177144d0 Mon Sep 17 00:00:00 2001 From: Yarny0 <41838844+Yarny0@users.noreply.github.com> Date: Mon, 13 May 2019 16:26:55 +0200 Subject: [PATCH 1/2] clickshare-csc1: init at 01.07.00.033 Barco ClickShare is a wireless presentation system where a USB dongle transmits to a base station that is connected with a beamer. Note that this package also contains a udev rule file to grant access to the dongle if connected. Access is limited to a group "clickshare" (the name may be altered by package options). --- .../video/clickshare-csc1/default.nix | 124 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 126 insertions(+) create mode 100644 pkgs/applications/video/clickshare-csc1/default.nix diff --git a/pkgs/applications/video/clickshare-csc1/default.nix b/pkgs/applications/video/clickshare-csc1/default.nix new file mode 100644 index 000000000000..34c80e1050b4 --- /dev/null +++ b/pkgs/applications/video/clickshare-csc1/default.nix @@ -0,0 +1,124 @@ +{ lib +, stdenv +, fetchurl +, alsaLib +, autoPatchelfHook +, binutils-unwrapped +, gnutar +, libav_0_8 +, libnotify +, libresample +, libusb1 +, qt4 +, rpmextract +, unzip +, xorg +, usersGroup ? "clickshare" # for udev access rules +}: + + +# This fetches the latest firmware version that +# contains a linux-compatible client binary. +# Barco no longer supports linux, so updates are unlikely: +# https://www.barco.com/de/support/clickshare-csc-1/knowledge-base/KB1191 + + +stdenv.mkDerivation rec { + name = "clickshare-csc1-${version}"; + version = "01.07.00.033"; + src = fetchurl { + name = "clickshare-csc1-${version}.zip"; + url = https://www.barco.com/services/website/de/TdeFiles/Download?FileNumber=R33050020&TdeType=3&MajorVersion=01&MinorVersion=07&PatchVersion=00&BuildVersion=033; + sha256 = "0h4jqidqvk4xkaky5bizi7ilz4qzl2mh68401j21y3djnzx09br3"; + }; + + nativeBuildInputs = [ + autoPatchelfHook + binutils-unwrapped + gnutar + rpmextract + unzip + ]; + buildInputs = [ + alsaLib + libav_0_8 + libnotify + libresample + libusb1 + qt4 + xorg.libX11 + xorg.libXdamage + xorg.libXfixes + xorg.libXinerama + xorg.libXtst + ]; + sourceRoot = "."; + + # The source consists of nested archives. + # We extract them archive by archive. + # If the filename contains version numbers, + # we use a wildcard and check that there + # is actually only one file matching. + postUnpack = + let + rpmArch = + if stdenv.hostPlatform.isx86_32 then "i386" else + if stdenv.hostPlatform.isx86_64 then "x86_64" else + throw "unsupported system: ${stdenv.hostPlatform.system}"; + in + '' + ls clickshare_baseunit_*.*_all.signed_release.ipk | wc --lines | xargs test 1 = + tar --verbose --extract --one-top-level=dir1 < clickshare_baseunit_*.*_all.signed_release.ipk + mkdir dir2 + ( cd dir2 ; ar xv ../dir1/firmware.ipk ) + tar --verbose --gzip --extract --one-top-level=dir3 --exclude='dev/*' < dir2/data.tar.gz + ls dir3/clickshare/clickshare-*-*.${rpmArch}.rpm | wc --lines | xargs test 1 = + mkdir dir4 + cd dir4 + rpmextract ../dir3/clickshare/clickshare-*-*.${rpmArch}.rpm + ''; + + installPhase = '' + runHook preInstall + mkdir --verbose --parents $out + mv --verbose --target-directory=. usr/* + rmdir --verbose usr + cp --verbose --recursive --target-directory=$out * + runHook postInstall + ''; + + # Default udev rule restricts access to the + # clickshare USB dongle to the `wheel` group. + # We replace it with the group + # stated in the package arguments. + # Also, we patch executable and icon paths in .desktop files. + preFixup = '' + substituteInPlace \ + $out/lib/udev/rules.d/99-clickshare.rules \ + --replace wheel ${usersGroup} + substituteInPlace \ + $out/share/applications/clickshare.desktop \ + --replace Exec= Exec=$out/bin/ \ + --replace =/usr =$out + substituteInPlace \ + $out/etc/xdg/autostart/clickshare-launcher.desktop \ + --replace =/usr =$out + ''; + + meta = { + homepage = https://www.barco.com/de/support/clickshare-csc-1/drivers; + downloadPage = https://www.barco.com/de/Support/software/R33050020; + platforms = [ "i686-linux" "x86_64-linux" ]; + license = lib.licenses.unfree; + maintainers = [ lib.maintainers.yarny ]; + description = "Linux driver/client for Barco ClickShare CSC-1"; + longDescription = '' + Barco ClickShare is a wireless presentation system + where a USB dongle transmits to a base station + that is connected with a beamer. + The USB dongle requires proprietary software that + captures the screen and sends it to the dongle. + This package provides the necessary software for Linux. + ''; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 858b634681ce..de37929f5484 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -17099,6 +17099,8 @@ in clfswm = callPackage ../applications/window-managers/clfswm { }; + clickshare-csc1 = callPackage ../applications/video/clickshare-csc1 { }; + cligh = python3Packages.callPackage ../development/tools/github/cligh {}; clipgrab = qt5.callPackage ../applications/video/clipgrab { }; From b38bdf6d2fadc3305bf6c967b42e5282a4e92433 Mon Sep 17 00:00:00 2001 From: Yarny0 <41838844+Yarny0@users.noreply.github.com> Date: Mon, 13 May 2019 16:27:06 +0200 Subject: [PATCH 2/2] nixos/clickshare: init module The clickshare-csc1 package brings a udev rule file to grant access to the ClickShare dongle if connected. This module provides an option to install that rule file. Only users in the "clickshare" users group have access. --- nixos/modules/module-list.nix | 1 + nixos/modules/programs/clickshare.nix | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 nixos/modules/programs/clickshare.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index bc8bcc0cd8f6..c5634fae92c8 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -94,6 +94,7 @@ ./programs/ccache.nix ./programs/cdemu.nix ./programs/chromium.nix + ./programs/clickshare.nix ./programs/command-not-found/command-not-found.nix ./programs/criu.nix ./programs/dconf.nix diff --git a/nixos/modules/programs/clickshare.nix b/nixos/modules/programs/clickshare.nix new file mode 100644 index 000000000000..9980a7daf525 --- /dev/null +++ b/nixos/modules/programs/clickshare.nix @@ -0,0 +1,21 @@ +{ config, lib, pkgs, ... }: + +{ + + options.programs.clickshare-csc1.enable = + lib.options.mkEnableOption '' + Barco ClickShare CSC-1 driver/client. + This allows users in the clickshare + group to access and use a ClickShare USB dongle + that is connected to the machine + ''; + + config = lib.modules.mkIf config.programs.clickshare-csc1.enable { + environment.systemPackages = [ pkgs.clickshare-csc1 ]; + services.udev.packages = [ pkgs.clickshare-csc1 ]; + users.groups.clickshare = {}; + }; + + meta.maintainers = [ lib.maintainers.yarny ]; + +}