1 { config, lib, pkgs, ... }:
7 enabled = elem "displaylink" config.services.xserver.videoDrivers;
9 evdi = config.boot.kernelPackages.evdi;
11 displaylink = pkgs.displaylink.override {
19 config = mkIf enabled {
21 boot.extraModulePackages = [ evdi ];
22 boot.kernelModules = [ "evdi" ];
24 environment.etc."X11/xorg.conf.d/40-displaylink.conf".text = ''
26 Identifier "DisplayLink"
29 Option "AccelMethod" "none"
33 # make the device available
34 services.xserver.displayManager.sessionCommands = ''
35 ${lib.getBin pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource 1 0
38 # Those are taken from displaylink-installer.sh and from Arch Linux AUR package.
40 services.udev.packages = [ displaylink ];
42 powerManagement.powerDownCommands = ''
43 #flush any bytes in pipe
44 while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done;
46 #suspend DisplayLinkManager
47 echo "S" > /tmp/PmMessagesPort_in
49 #wait until suspend of DisplayLinkManager finish
50 if [ -f /tmp/PmMessagesPort_out ]; then
51 #wait until suspend of DisplayLinkManager finish
52 read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out
56 powerManagement.resumeCommands = ''
57 #resume DisplayLinkManager
58 echo "R" > /tmp/PmMessagesPort_in
61 systemd.services.dlm = {
62 description = "DisplayLink Manager Service";
63 after = [ "display-manager.service" ];
64 conflicts = [ "getty@tty7.service" ];
67 ExecStart = "${displaylink}/bin/DisplayLinkManager";
70 LogsDirectory = "displaylink";