summary refs log tree commit diff
path: root/pkgs/os-specific/linux/displaylink
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2020-12-20 23:42:39 +0100
committerFlorian Klink <flokli@flokli.de>2020-12-21 00:34:31 +0100
commit43f74794de82cfc5b29b9ad42ac3416d460e5d5d (patch)
tree4d3e166689cc6187d3179ae032ccb35a1badcf54 /pkgs/os-specific/linux/displaylink
parent132894d1fadacd2255f2005444fa05aab81b91f2 (diff)
downloadnixpkgs-43f74794de82cfc5b29b9ad42ac3416d460e5d5d.tar
nixpkgs-43f74794de82cfc5b29b9ad42ac3416d460e5d5d.tar.gz
nixpkgs-43f74794de82cfc5b29b9ad42ac3416d460e5d5d.tar.bz2
nixpkgs-43f74794de82cfc5b29b9ad42ac3416d460e5d5d.tar.lz
nixpkgs-43f74794de82cfc5b29b9ad42ac3416d460e5d5d.tar.xz
nixpkgs-43f74794de82cfc5b29b9ad42ac3416d460e5d5d.tar.zst
nixpkgs-43f74794de82cfc5b29b9ad42ac3416d460e5d5d.zip
displaylink: manually activate dlm.service
The shell script coming with the vendor-provided udev rule simply
starts dlm.service (and sets up some symlinks), and stops dlm.service if
that was the last card plugged in.

On NixOS, some of the cat/grep/sed commands are not available, causing
the script to fail.

Turns out, the symlinks aren't needed at all. Archlinux ships their own
script
(https://aur.archlinux.org/cgit/aur.git/plain/udev.sh?h=displaylink),
which only starts and stops dlm.service, depending on whether there's
cards left or not.

We can further optimize this by simply starting dlm.service on the first
card, and not stopping it at all. Considering dlm won't get stopped if
one of multiple cards is unplugged, it seems to handle disconnects.
Diffstat (limited to 'pkgs/os-specific/linux/displaylink')
-rw-r--r--pkgs/os-specific/linux/displaylink/99-displaylink.rules1
-rw-r--r--pkgs/os-specific/linux/displaylink/default.nix30
-rw-r--r--pkgs/os-specific/linux/displaylink/udev-installer.patch18
3 files changed, 16 insertions, 33 deletions
diff --git a/pkgs/os-specific/linux/displaylink/99-displaylink.rules b/pkgs/os-specific/linux/displaylink/99-displaylink.rules
new file mode 100644
index 00000000000..ceeb658a415
--- /dev/null
+++ b/pkgs/os-specific/linux/displaylink/99-displaylink.rules
@@ -0,0 +1 @@
+ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="17e9", ATTR{bInterfaceClass}=="ff", ATTR{bInterfaceProtocol}=="03", TAG+="systemd", ENV{SYSTEMD_WANTS}="dlm.service"
diff --git a/pkgs/os-specific/linux/displaylink/default.nix b/pkgs/os-specific/linux/displaylink/default.nix
index dcdafb98d70..5e60d68bc2b 100644
--- a/pkgs/os-specific/linux/displaylink/default.nix
+++ b/pkgs/os-specific/linux/displaylink/default.nix
@@ -1,6 +1,14 @@
-{ stdenv, lib, unzip, util-linux,
-  libusb1, evdi, systemd, makeWrapper, requireFile, substituteAll }:
-
+{ stdenv
+, lib
+, unzip
+, util-linux
+, libusb1
+, evdi
+, systemd
+, makeWrapper
+, requireFile
+, substituteAll
+}:
 let
   arch =
     if stdenv.hostPlatform.system == "x86_64-linux" then "x64"
@@ -9,7 +17,8 @@ let
   bins = "${arch}-ubuntu-1604";
   libPath = lib.makeLibraryPath [ stdenv.cc.cc util-linux libusb1 evdi ];
 
-in stdenv.mkDerivation rec {
+in
+stdenv.mkDerivation rec {
   pname = "displaylink";
   version = "5.3.1.34";
 
@@ -39,20 +48,11 @@ in stdenv.mkDerivation rec {
     ./displaylink-driver-${version}.run --target . --noexec --nodiskspace
   '';
 
-  patches = [ (substituteAll {
-    src = ./udev-installer.patch;
-    inherit systemd;
-  })];
-
   installPhase = ''
-    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"
-    )
-
     install -Dt $out/lib/displaylink *.spkg
     install -Dm755 ${bins}/DisplayLinkManager $out/bin/DisplayLinkManager
+    mkdir -p $out/lib/udev/rules.d
+    cp ${./99-displaylink.rules} $out/lib/udev/rules.d/99-displaylink.rules
     patchelf \
       --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
       --set-rpath ${libPath} \
diff --git a/pkgs/os-specific/linux/displaylink/udev-installer.patch b/pkgs/os-specific/linux/displaylink/udev-installer.patch
deleted file mode 100644
index 880c073fbcf..00000000000
--- a/pkgs/os-specific/linux/displaylink/udev-installer.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/udev-installer.sh	2018-12-09 12:05:53.772318942 +0100
-+++ b/udev-installer.sh	2018-12-09 12:06:19.939947629 +0100
-@@ -21,12 +21,12 @@
-   cat <<'EOF'
- start_service()
- {
--  systemctl start displaylink-driver
-+  /run/current-system/systemd/bin/systemctl start --no-block dlm
- }
- 
- stop_service()
- {
--  systemctl stop displaylink-driver
-+  /run/current-system/systemd/bin/systemctl stop dlm
- }
- 
- EOF
-