|
1 |
| -{ config, lib, ... }: |
| 1 | +{ config, lib, pkgs, ... }: |
2 | 2 |
|
3 | 3 | with lib;
|
4 | 4 |
|
5 | 5 | let
|
6 | 6 |
|
7 | 7 | enabled = elem "displaylink" config.services.xserver.videoDrivers;
|
8 | 8 |
|
9 |
| - displaylink = config.boot.kernelPackages.displaylink; |
| 9 | + evdi = config.boot.kernelPackages.evdi; |
| 10 | + |
| 11 | + displaylink = pkgs.displaylink.override { |
| 12 | + inherit evdi; |
| 13 | + }; |
10 | 14 |
|
11 | 15 | in
|
12 | 16 |
|
13 | 17 | {
|
14 | 18 |
|
15 | 19 | config = mkIf enabled {
|
16 | 20 |
|
17 |
| - boot.extraModulePackages = [ displaylink ]; |
18 |
| - |
19 |
| - boot.kernelModules = [ "evdi" ]; |
| 21 | + boot.extraModulePackages = [ evdi ]; |
20 | 22 |
|
21 | 23 | # Those are taken from displaylink-installer.sh and from Arch Linux AUR package.
|
22 | 24 |
|
23 |
| - services.udev.extraRules = '' |
24 |
| - ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{bNumInterfaces}=="*5", TAG+="uaccess" |
25 |
| - ''; |
| 25 | + services.udev.packages = [ displaylink ]; |
26 | 26 |
|
27 | 27 | powerManagement.powerDownCommands = ''
|
28 | 28 | #flush any bytes in pipe
|
|
32 | 32 | echo "S" > /tmp/PmMessagesPort_in
|
33 | 33 |
|
34 | 34 | #wait until suspend of DisplayLinkManager finish
|
35 |
| - read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out |
| 35 | + if [ -f /tmp/PmMessagesPort_out ]; then |
| 36 | + #wait until suspend of DisplayLinkManager finish |
| 37 | + read -n 1 -t 10 SUSPEND_RESULT < /tmp/PmMessagesPort_out |
| 38 | + fi |
36 | 39 | '';
|
37 | 40 |
|
38 | 41 | powerManagement.resumeCommands = ''
|
39 | 42 | #resume DisplayLinkManager
|
40 | 43 | echo "R" > /tmp/PmMessagesPort_in
|
41 | 44 | '';
|
42 | 45 |
|
43 |
| - systemd.services.displaylink = { |
| 46 | + systemd.services.dlm = { |
44 | 47 | description = "DisplayLink Manager Service";
|
45 | 48 | after = [ "display-manager.service" ];
|
46 |
| - wantedBy = [ "graphical.target" ]; |
| 49 | + conflicts = [ "getty@tty7.service" ]; |
| 50 | + path = [ pkgs.kmod ]; |
47 | 51 |
|
48 | 52 | serviceConfig = {
|
49 | 53 | ExecStart = "${displaylink}/bin/DisplayLinkManager";
|
|
53 | 57 |
|
54 | 58 | preStart = ''
|
55 | 59 | mkdir -p /var/log/displaylink
|
| 60 | + modprobe evdi |
56 | 61 | '';
|
57 | 62 | };
|
58 | 63 |
|
|
0 commit comments