summary refs log tree commit diff
path: root/nixos/modules/hardware/video/displaylink.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/hardware/video/displaylink.nix')
-rw-r--r--nixos/modules/hardware/video/displaylink.nix27
1 files changed, 16 insertions, 11 deletions
diff --git a/nixos/modules/hardware/video/displaylink.nix b/nixos/modules/hardware/video/displaylink.nix
index 2a9382f3941..669ac849cba 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
       '';
     };