Displaylink: Difference between revisions

Some restructuring and rephrasing
Sandro (talk | contribs)
 
(5 intermediate revisions by 3 users not shown)
Line 10: Line 10:
  displaylink
  displaylink
];
];
</syntaxhighlight>Then add the videoDrivers:<syntaxhighlight lang="nixos">services.xserver.videoDrivers = [ "displaylink" "modesetting" ];</syntaxhighlight>The module <code>nixos/modules/hardware/video/displaylink.nix</code> should also work for wlroots compositors.
</syntaxhighlight>Then add the videoDrivers:<syntaxhighlight lang="nix">services.xserver.videoDrivers = [ "displaylink" "modesetting" ];</syntaxhighlight>The module <code>nixos/modules/hardware/video/displaylink.nix</code> should also work for wlroots compositors.


====Connecting a second external monitor====
====<big>Xserver</big>====
=====Connecting a second external monitor=====
In order to add a second external monitor you can add the following to your configuration:
In order to add a second external monitor you can add the following to your configuration:


Line 18: Line 19:
     ${lib.getBin pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource 2 0
     ${lib.getBin pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource 2 0
'';</syntaxhighlight>
'';</syntaxhighlight>
[[Category:Video]]
====Wayland====
At first add displayLink driver to nix store as above described.
=====evdi module=====
You probably will need the `evdi` module
<syntaxhighlight lang="nix">
boot = {
  extraModulePackages = [ config.boot.kernelPackages.evdi ];
  initrd = {
    # List of modules that are always loaded by the initrd.
    kernelModules = [
      "evdi"
    ];
  };
};
</syntaxhighlight>
====='''Gnome Wayland'''=====
Install displayLink package
<syntaxhighlight lang="nix">
environment.systemPackages = with pkgs; [
  displaylink
];
</syntaxhighlight>
Define videoDrivers
{{bc|<nowiki>
services.xserver.videoDrivers = [ "displaylink" ];
</nowiki>}}
Add dlm service
<syntaxhighlight lang="nix">
systemd.services.dlm.wantedBy = [ "multi-user.target" ];
</syntaxhighlight>
====='''KDE Plasma'''=====
Apparently KDE Plasma (Wayland) requires a slight different approach.
Esnure you properly enabled wayland session
<syntaxhighlight lang="nix">
environment.variables = {
  KWIN_DRM_PREFER_COLOR_DEPTH = "24";
};
services = {
  desktopManager.plasma6 = {
    enable = true;
  };
  displayManager = {
    sddm = {
      enable = true;
      wayland.enable = true;
    };
    defaultSession = "plasma";
  };
};
</syntaxhighlight>
Install displayLink package
<syntaxhighlight lang="nix">
environment.systemPackages = with pkgs; [
  displaylink
];
</syntaxhighlight>
Instead of dlm setup display-link server as follows:
<syntaxhighlight lang="nix">
systemd.services.displaylink-server = {
  enable = true;
  requires = [ "systemd-udevd.service" ];
  after = [ "systemd-udevd.service" ];
  wantedBy = [ "multi-user.target" ];
  serviceConfig = {
    Type = "simple";
    ExecStart = "${pkgs.displaylink}/bin/DisplayLinkManager";
    User = "root";
    Group = "root";
    Restart = "on-failure";
    RestartSec = 5; # Wait 5 seconds before restarting
  };
};
</syntaxhighlight>


==Sway==
==Sway==
Line 53: Line 147:


[https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/1823#note_2146862 Source]
[https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/1823#note_2146862 Source]
== Troubleshooting ==
=== Suspend blocked by <code>pre-sleep.service</code> ===
As of NixOS 25.05, installing <code>pkgs.displaylink</code> inserts some directives into the script referenced by <code>pre-sleep.service</code>. If suspending does not work and causes the reboot and poweroff buttons to stop working, it may be a symptom of [[Power Management#Suspend blocked by pre-sleep.service|suspend being blocked by pre-sleep.service]].
The script in question:<syntaxhighlight lang="bash" line="1">
#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
set -e
#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
</syntaxhighlight>Because of a stray <code>/tmp/PmMessagesPort_out</code> caused by an unclean shutdown, the suspend action was blocked by this script trying to flush the port. A myriad of solutions can be used to unblock the script and restore suspend:
* Start <code>dlm.service</code> so that DisplayLinkManager can clear the ports and unblock the script
* Use <code>sudo DisplayLinkManager</code> to clear the ports and unblock the script
Untested solutions:
* Removing the file
* Killing the script


[[Category:Video]]
[[Category:Video]]