Search code examples
linux-kernel-headers

Displaylink fails to install on Linux Kernel 6.2


How to install the displaylink driver for D6000 over kernel headers v6.2?


After an automatic upgrade to the new kernel headers v6.2, I was not able to reinstall the official displaylink driver v5.6.0 (to get Dell Docking Station D6000 to work) under Linux, as the installation fails to make evdi version 1.11.0 for the new headers.

Note: the support for the kernel headers v6.2 started only with evdi v1.13.1


Solution

  • Edit

    based on the new releases 5.7.0 of DisplayLink

    For this specific scenario, if the distro being used is Ubuntu, as in my case, I recommend navigating to synaptics-displaylink-downloads and following the installation steps. Otherwise, or for more advanced details on how manually install a newer evdi continue reading for the custom installation process.


    Original Answer

    The process of installation has the following steps:

    Install evdi

    We'll need first to install the new version of evdi v1.13.1 or newer.

    First install the dependencies pip install pybind11, then install evdi, which could be installed using the script in this gist

    Install Displaylink without evdi

    Hint: Be careful while following this section, it's highly not recommended to edit a script without knowing the exact content of it.

    That needs editing the content of the displaylink.sh file. to do that we

    1. Extract the setup script
    chmod +x displaylink-driver-x.x.xx.run  # Make the installer executable
    ./displaylink-driver-x.x.xx.run --noexec --keep
    
    1. Edit the script at displaylink-driver-x.x.xx\displaylink-installer.sh to always report evdi to be installed, I've done that by updating this section
     dkms install "${EVDI}/module" 2>&1 | tee "$dkms_log" | sed -E "s~$make_log_regex~$evdi_make_log_path~"
      local retval=${PIPESTATUS[0]}
      local retval=3
    
      if [[ $retval == 3 ]]; then
    
    1. Run the installer sudo ./displaylink-installer.sh install

    Load the kernel module

    We should expect the kernel module to be loaded directly after a reboot, to ensure that run sudo modprobe evdi, for my case I received the error

    modprobe: FATAL: Module evdi not found in directory /lib/modules/6.2.0-26-generic
    

    However the file find /lib/modules/$(uname -r)/ -name evdi.ko was available at the location /lib/modules/6.2.0-26-generic/kernel/drivers/gpu/drm/evdi/evdi.ko. While at the same time sudo insmod /lib/modules/6.2.0-26-generic/kernel/drivers/gpu/drm/evdi/evdi.ko worked, and sudo dmesg | grep evdi showed a couple of messages, while the displays connected to the docking station were not found yet. In my situation that implied that the module dependency database needed a rebuild, which was achieved by sudo depmod -a.

    Immediately afterwards the displays worked