Need Help with DisplayLink

I’m trying to get DisplayLink working with an HP ZBook Power G9. I have a desire to run 5 or 6 external displays (one of which is a drawing table for screen annotations, so 5 actual displays plus the tablet).

This laptop has an Intel i7-12700H (Alder Lake) CPU and an Nvidia T600 discrete GPU, but the Nvidia GPU is not connected to any outputs and only functions in Optimus/PRIME mode.

I also have two docks:

  • An HP Thunderbolt Dock G4 to which 3 external displays are connected and working.
  • An HP Universal USB C/A Dock that uses DisplayLink, which is what I’m trying to get working to drive additional displays.

I’m currently on the unstable channel. I currently have 1 display plugged into the DisplayLink dock.

I tried several things, including the instructions at https://nixos.wiki/wiki/Displaylink, which I don’t think are up to date. I’ve done nix-prefretch-url a few times and perhaps have a bit of a mess in the store (more on that down below).

Still xrandr does not show the DisplayLink provider. Provider 0 is the Intel iGPU, and Provider 1 is the Nvidia discrete GPU (with no crtcs):

mike@mike-lap:~]$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x48 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 4 outputs: 10 associated providers: 0 name:modesetting
Provider 1: id: 0xc9 cap: 0x0 crtcs: 0 outputs: 0 associated providers: 0 name:modesetting

Relevant parts of my configuration.nix. I have the xrandr command to setprovideroutputsource commented out because I have no DisplayLink provider at this point:

# /etc/nixos/configuration.nix
services.xserver = {
    enable = true;
    videoDrivers = [ "displaylink" "modesetting" ];
    desktopManager = {
      plasma5.enable = true;
    };
    layout = "us";
    xkbVariant = "";
    dpi = 96;
    # displayManager.sessionCommands = ''
    #   ${lib.getBin pkgs.xorg.xrandr}/bin/xrandr --setprovideroutputsource 1 0
    # '';
  };

The DisplayLink dock is showing up connected via usb:

[mike@mike-lap:~]$ lsusb -d 17e9:
Bus 002 Device 004: ID 17e9:601e DisplayLink HP USB-C Universal Docking Station

The dlm.service is loaded and active:

mike@mike-lap:~]$ systemctl --type=service | grep dlm
  dlm.service                                           loaded active running DisplayLink Manager Service

and the status of the service looks good to me. It looks like the DisplayLink driver being used is 5.6.0-59.176, which might be part of the problem since I read on the DisplayLink forums that folks were having issues the 5.6 drivers but things seemed to work with the 5.5 divers (on Ubuntu).

[mike@mike-lap:~]$ systemctl status dlm.service
● dlm.service - DisplayLink Manager Service
     Loaded: loaded (/etc/systemd/system/dlm.service; linked; preset: enabled)
     Active: active (running) since Sun 2022-09-18 17:12:04 EDT; 21h ago
   Main PID: 1243 (.DisplayLinkMan)
         IP: 0B in, 0B out
         IO: 8.7M read, 8.0K written
      Tasks: 9 (limit: 76718)
     Memory: 10.5M
        CPU: 7.764s
     CGroup: /system.slice/dlm.service
             └─1243 /nix/store/h683vb4117fnsh8kwirgnr9dpy9cv1l8-displaylink-5.6.0-59.176/bin/DisplayLinkManager

Having run nix-prefetch-url multiple times, seems I probably have a bit of mess in the store, but not sure how to “un-prefetch” a url.

[mike@mike-lap:~]$ ll /nix/store | grep displaylink
dr-xr-xr-x    5 root root       4096 Dec 31  1969 h683vb4117fnsh8kwirgnr9dpy9cv1l8-displaylink-5.6.0-59.176/
-r--r--r--    1 root root   16906259 Dec 31  1969 3d1xdvdx16pk5aczksqp89lkyswq16nx-displaylink-56.zip
-r--r--r--    1 root root   14500327 Dec 31  1969 6i2rd53kgq84zx1fx5iwvfspr01k6wb3-displaylink.zip
-r--r--r--    1 root root       1465 Dec 31  1969 6jil0snscrvq3wx9anhkm825arvr0vmr-displaylink-56.zip.drv
-r--r--r--    1 root root   16893957 Dec 31  1969 9dz33xqxf8qvfzx374bgrjz05dgc52dc-displaylink.zip
-r--r--r--    1 root root       1850 Dec 31  1969 dp5b7wbb50miv0lb6gn4r50skpihb1zy-etc-40-displaylink.conf.drv
-r--r--r--    1 root root       3260 Dec 31  1969 nf1v4k5zb4l8ahyk83i7h38c2d5x9mhm-displaylink-5.6.0-59.176.drv
-r--r--r--    1 root root        184 Dec 31  1969 p8hi9l3n074rbvr96b8iv2armk5spqnp-99-displaylink.rules
-r--r--r--    1 root root        145 Dec 31  1969 vxzq196xi58028gk2zsg63d8ig5y5d33-etc-40-displaylink.conf

dmesg log entries

[mike@mike-lap:~]$ dmesg | grep -E 'udl|DisplayLink|\[drm\]'
[    3.727769] i915 0000:00:02.0: [drm] VT-d active for gfx access
[    3.731974] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/adlp_dmc_ver2_10.bin (v2.10)
[    3.733579] [drm] Initialized nouveau 1.3.1 20120801 for 0000:01:00.0 on minor 0
[    4.038104] usb 2-2.2: Manufacturer: DisplayLink
[    4.403964] i915 0000:00:02.0: [drm] failed to retrieve link info, disabling eDP
[    4.554156] i915 0000:00:02.0: [drm] GuC firmware i915/adlp_guc_62.0.3.bin version 62.0 submission:enabled
[    4.554159] i915 0000:00:02.0: [drm] GuC SLPC: enabled
[    4.554159] i915 0000:00:02.0: [drm] HuC firmware i915/tgl_huc_7.9.3.bin version 7.9 authenticated:yes
[    4.554498] i915 0000:00:02.0: [drm] GuC RC: enabled
[    5.704107] [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 1
[    5.887206] i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device

It’s not clear to me what I need to do to try using the 5.5 DisplayLink driver, which might help.

If I can get this all working, I can move on to really learning how to leverage Nix and NixOS and hopefully start contributing to documentation at least. (Being a newbie to both Linux and NixOS, I have a good perspective as a beginner user).

Thanks for any help anyone can offer!

~Mike

1 Like

FWIW, I did this last week, and it Just Worked™. I’m running Wayland, and haven’t tried X11.

One small difference: I also have evdi in boot.kernelModules, left over from a previous attempt long ago. Looking at the module code, this should not be needed and your status seems to be past that point.

I’m currently on the unstable channel.

Same, but I have v5.6.1 of the downloaded drivers, so perhaps make sure you’re fully up to date

Immense thanks. That worked (on X11). I’m guessing that the 5.6 DisplayLink driver was buggy, but the 5.6.1 driver “just works.”

It seems like just having (in the case of X11)
services.xserver.videoDrivers = [ "displayLink" "modesetting" ]
is enough to get this to work along with following the instructions that print out in the terminal when doing the nixos-rebuild about downloading the driver from the displaylink website, manually adding it to the store via nix-prefetch-url, and redoing the nixos-rebuild step.

Nice work by the maintainers.

3 Likes

Hi @domehead100 could you please tell me which dock you are using? I tried this one a couple of years ago and it didn’t work for me.

Thanks!

Anything listed on m1displays.com should work tbh, they’re all displaylink (or siliconmotion) tech