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