diff options
author | Florian Klink <flokli@flokli.de> | 2020-12-20 23:42:39 +0100 |
---|---|---|
committer | Florian Klink <flokli@flokli.de> | 2020-12-21 00:34:31 +0100 |
commit | 43f74794de82cfc5b29b9ad42ac3416d460e5d5d (patch) | |
tree | 4d3e166689cc6187d3179ae032ccb35a1badcf54 /pkgs/os-specific | |
parent | 132894d1fadacd2255f2005444fa05aab81b91f2 (diff) |
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')
-rw-r--r-- | pkgs/os-specific/linux/displaylink/99-displaylink.rules | 1 | ||||
-rw-r--r-- | pkgs/os-specific/linux/displaylink/default.nix | 30 | ||||
-rw-r--r-- | pkgs/os-specific/linux/displaylink/udev-installer.patch | 18 |
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 0000000000000..ceeb658a415a1 --- /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 dcdafb98d707d..5e60d68bc2bbf 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 880c073fbcf62..0000000000000 --- 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 - |