From e17744067a5d3460e06d531a93b2527757b20a55 Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Mon, 1 May 2017 15:23:41 +0300 Subject: displaylink: 1.1.62 -> 1.3.52 --- nixos/modules/hardware/video/displaylink.nix | 27 +++++++----- pkgs/os-specific/linux/displaylink/default.nix | 61 ++++++++++---------------- pkgs/top-level/all-packages.nix | 6 ++- 3 files changed, 42 insertions(+), 52 deletions(-) diff --git a/nixos/modules/hardware/video/displaylink.nix b/nixos/modules/hardware/video/displaylink.nix index 2a9382f39410..669ac849cbad 100644 --- a/nixos/modules/hardware/video/displaylink.nix +++ b/nixos/modules/hardware/video/displaylink.nix @@ -1,4 +1,4 @@ -{ config, lib, ... }: +{ config, lib, pkgs, ... }: with lib; @@ -6,7 +6,11 @@ let enabled = elem "displaylink" config.services.xserver.videoDrivers; - displaylink = config.boot.kernelPackages.displaylink; + evdi = config.boot.kernelPackages.evdi; + + displaylink = pkgs.displaylink.override { + inherit evdi; + }; in @@ -14,15 +18,11 @@ in config = mkIf enabled { - boot.extraModulePackages = [ displaylink ]; - - boot.kernelModules = [ "evdi" ]; + boot.extraModulePackages = [ evdi ]; # Those are taken from displaylink-installer.sh and from Arch Linux AUR package. - services.udev.extraRules = '' - ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{bNumInterfaces}=="*5", TAG+="uaccess" - ''; + services.udev.packages = [ displaylink ]; powerManagement.powerDownCommands = '' #flush any bytes in pipe @@ -32,7 +32,10 @@ in echo "S" > /tmp/PmMessagesPort_in #wait until suspend of DisplayLinkManager finish - read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out + if [ -f /tmp/PmMessagesPort_out ]; then + #wait until suspend of DisplayLinkManager finish + read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out + fi ''; powerManagement.resumeCommands = '' @@ -40,10 +43,11 @@ in echo "R" > /tmp/PmMessagesPort_in ''; - systemd.services.displaylink = { + systemd.services.dlm = { description = "DisplayLink Manager Service"; after = [ "display-manager.service" ]; - wantedBy = [ "graphical.target" ]; + conflicts = [ "getty@tty7.service" ]; + path = [ pkgs.kmod ]; serviceConfig = { ExecStart = "${displaylink}/bin/DisplayLinkManager"; @@ -53,6 +57,7 @@ in preStart = '' mkdir -p /var/log/displaylink + modprobe evdi ''; }; diff --git a/pkgs/os-specific/linux/displaylink/default.nix b/pkgs/os-specific/linux/displaylink/default.nix index 87cf7c18caf6..1f923b9567a4 100644 --- a/pkgs/os-specific/linux/displaylink/default.nix +++ b/pkgs/os-specific/linux/displaylink/default.nix @@ -1,64 +1,47 @@ -{ stdenv, lib, fetchurl, fetchFromGitHub, unzip, kernel, utillinux, libdrm, libusb1, makeWrapper }: +{ stdenv, lib, fetchurl, unzip, utillinux, libusb1, evdi, systemd, makeWrapper }: let arch = if stdenv.system == "x86_64-linux" then "x64" else if stdenv.system == "i686-linux" then "x86" else throw "Unsupported architecture"; - libPath = lib.makeLibraryPath [ stdenv.cc.cc utillinux libusb1 ]; + bins = "${arch}-ubuntu-1604"; + libPath = lib.makeLibraryPath [ stdenv.cc.cc utillinux libusb1 evdi ]; in stdenv.mkDerivation rec { name = "displaylink-${version}"; - version = "1.1.62"; + version = "1.3.52"; - src = fetchFromGitHub { - owner = "DisplayLink"; - repo = "evdi"; - rev = "fe779940ff9fc7b512019619e24a5b22e4070f6a"; - sha256 = "02hw83f6lscms8hssjzf30hl9zly3b28qcxwmxvnqwfhx1q491z9"; - }; - - daemon = fetchurl { + src = fetchurl { name = "displaylink.zip"; - url = "http://www.displaylink.com/downloads/file?id=607"; - sha256 = "0jky3xk4dfzbzg386qya9l9952i4m8zhf55fdl06pi9r82k2iijx"; + url = "http://www.displaylink.com/downloads/file?id=744"; + sha256 = "0ridpsxcf761vym0nlpq702qa46ynddzci17bjmyax2pph7khr0k"; }; nativeBuildInputs = [ unzip makeWrapper ]; - buildInputs = [ kernel libdrm ]; - buildCommand = '' - unpackPhase - cd $sourceRoot - unzip $daemon + unzip $src chmod +x displaylink-driver-${version}.run - ./displaylink-driver-${version}.run --target daemon --noexec + ./displaylink-driver-${version}.run --target . --noexec - ( cd module - export makeFlags="$makeFlags KVER=${kernel.modDirVersion} KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" - export hardeningDisable="pic format" - buildPhase - install -Dm755 evdi.ko $out/lib/modules/${kernel.modDirVersion}/kernel/drivers/gpu/drm/evdi/evdi.ko + sed -i "s,/opt/displaylink/udev.sh,$out/lib/udev/displaylink.sh,g" udev-installer.sh + ( source udev-installer.sh + mkdir -p $out/lib/udev/rules.d + main systemd "$out/lib/udev/rules.d/99-displaylink.rules" "$out/lib/udev/displaylink.sh" ) + sed -i '2iPATH=${systemd}/bin:$PATH' $out/lib/udev/displaylink.sh - ( cd library - buildPhase - install -Dm755 libevdi.so $out/lib/libevdi.so - ) + install -Dt $out/lib/displaylink *.spkg + install -Dm755 ${bins}/DisplayLinkManager $out/bin/DisplayLinkManager + patchelf \ + --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \ + --set-rpath ${libPath} \ + $out/bin/DisplayLinkManager + wrapProgram $out/bin/DisplayLinkManager \ + --run "cd $out/lib/displaylink" fixupPhase - - ( cd daemon - install -Dt $out/lib/displaylink *.spkg - install -Dm755 ${arch}/DisplayLinkManager $out/bin/DisplayLinkManager - patchelf \ - --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \ - --set-rpath $out/lib:${libPath} \ - $out/bin/DisplayLinkManager - wrapProgram $out/bin/DisplayLinkManager \ - --run "cd $out/lib/displaylink" - ) ''; meta = with stdenv.lib; { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 61e16743d322..87fae1fcf026 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11516,6 +11516,10 @@ with pkgs; disk_indicator = callPackage ../os-specific/linux/disk-indicator { }; + displaylink = callPackage ../os-specific/linux/displaylink { + inherit (linuxPackages) evdi; + }; + dmidecode = callPackage ../os-specific/linux/dmidecode { }; dmtcp = callPackage ../os-specific/linux/dmtcp { }; @@ -11878,8 +11882,6 @@ with pkgs; cpupower = callPackage ../os-specific/linux/cpupower { }; - displaylink = callPackage ../os-specific/linux/displaylink { }; - dpdk = callPackage ../os-specific/linux/dpdk { }; exfat-nofuse = callPackage ../os-specific/linux/exfat { }; -- cgit 1.4.1