Invoke xrandr to actually connect the device. Additionally, we let systemd create the logs directory and use our module loader instead of handling it manually.
77 lines
1.8 KiB
Nix
77 lines
1.8 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
enabled = elem "displaylink" config.services.xserver.videoDrivers;
|
|
|
|
evdi = config.boot.kernelPackages.evdi;
|
|
|
|
displaylink = pkgs.displaylink.override {
|
|
inherit evdi;
|
|
};
|
|
|
|
in
|
|
|
|
{
|
|
|
|
config = mkIf enabled {
|
|
|
|
boot.extraModulePackages = [ evdi ];
|
|
boot.kernelModules = [ "evdi" ];
|
|
|
|
environment.etc."X11/xorg.conf.d/40-displaylink.conf".text = ''
|
|
Section "OutputClass"
|
|
Identifier "DisplayLink"
|
|
MatchDriver "evdi"
|
|
Driver "modesetting"
|
|
Option "AccelMethod" "none"
|
|
EndSection
|
|
'';
|
|
|
|
# make the device available
|
|
services.xserver.displayManager.sessionCommands = ''
|
|
${lib.getBin pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource 1 0
|
|
'';
|
|
|
|
# Those are taken from displaylink-installer.sh and from Arch Linux AUR package.
|
|
|
|
services.udev.packages = [ displaylink ];
|
|
|
|
powerManagement.powerDownCommands = ''
|
|
#flush any bytes in pipe
|
|
while read -n 1 -t 1 SUSPEND_RESULT < /tmp/PmMessagesPort_out; do : ; done;
|
|
|
|
#suspend DisplayLinkManager
|
|
echo "S" > /tmp/PmMessagesPort_in
|
|
|
|
#wait until suspend of DisplayLinkManager finish
|
|
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 = ''
|
|
#resume DisplayLinkManager
|
|
echo "R" > /tmp/PmMessagesPort_in
|
|
'';
|
|
|
|
systemd.services.dlm = {
|
|
description = "DisplayLink Manager Service";
|
|
after = [ "display-manager.service" ];
|
|
conflicts = [ "getty@tty7.service" ];
|
|
|
|
serviceConfig = {
|
|
ExecStart = "${displaylink}/bin/DisplayLinkManager";
|
|
Restart = "always";
|
|
RestartSec = 5;
|
|
LogsDirectory = "displaylink";
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
}
|