Fixing DisplayLink (EVDI) drivers for Linux kernel 6.x

Fixing DisplayLink (EVDI) drivers for Linux kernel 6.x

2022, Oct 28    

Kernel 6.x broke the support for the EVDI which is shipped with current release (5.6.1) of the DisplayLink drivers for Ubuntu. This is really annoying as all of a ‘sudden’ my workstations which sport Pop!_OS 22.04 LTS wouldn’t work with external monitors, connected using a DisplayLink device, anymore. This happened by an upgrade package overnight (around 25th of October 2022). It took me a little while to realize what the actual problem is.


Updates

Updates, having the most recent on top, on the current status of the EVDI trouble.

  • Update 2023-MAR-10: Kernel 6.2 broke the EVDI again: awaiting for a fix to be implemented. Possible solution, suggested by Daniel C., is using kernelstub to assign the 6.0.2 kernel to you system again; sudo kernelstub -v -k /boot/vmlinuz-6.0.6-76060006-generic -i /boot/initrd.img-6.0.6-76060006-generic

  • Update 2022-DEC-02: Pop!_OS updated the kernel again, this time to version 6.0.6-76060006-generic. Again no dice… re-applying the procedure, as noted below, fixed the issue again.


Culprit

I noticed, during experimenting with the different 22.04 releases of Pop!_OS, the DisplayLink device wasn’t displaying to the external monitors anymore althought the other functionality (USB, Ethernet and audio) was working as expected. That real culprit has to do with the kernel being updated from 5.19.0-x to 6.0.2-x and the display part of the drive. After diggin around I discovered that the EVDI version isn’t working anymore after the kernel updates.

When re-installing the Pop!_OS 22.04_14 ISO, sporting the 5.19.0-76051900-generic kernel again; No problem!

As a new version, Pop!_OS 22.04_15, running the 6.0.2-7606002-generic kernel, was released; no additional monitors!

This made me vigurously looking what was going on. From the log sfiles, it became clear to me that the kernel was bugging the compatibility with the EVDI drivers.

So, I decided to look into that direction and stumbled upon this question on GitHub, submitted by BasSmeets. This led me to the forum post by Karly on the DisplayLink forum

Solution

The solution is to replace the shipped evdi.tar.gz file, containing the EVDI driver, in the installed package with a newer version. This can be done by following a simple procedure.

As I am using the displaylink-driver-5.6.1-59.184.run file, I will use this as the base line version. In your case, you may need to adapt the version numbers accordingly.

Download the latest driver

First create a folder to temporarily store the drivers in.

cd ~
mkdir displaylinkfix && cd displaylinkfix

At the moment the 5.6.1 is the latest driver from the Synaptics download site.

The zip file can be downloaded using;

wget https://www.synaptics.com/sites/default/files/exe_files/2022-08/DisplayLink%20USB%20Graphics%20Software%20for%20Ubuntu5.6.1-EXE.zip

Unzipping the file is easy peasy

unzip DisplayLink\ USB\ Graphics\ Software\ for\ Ubuntu5.6.1-EXE.zip 

Uninstall the current EVDI driver.

The current installed drivers need to be uninstalled, adding uninstall parameter to the .run file is needed.

sudo ./displaylink-driver-5.6.1-59.184.run uninstall

Extracting the content.

Now the .zip file is unpacked the .run is present. The content of the .run archive file is what is needed, so unpack it.

./displaylink-driver-5.6.1-59.184.run --noexec --keep

Enter the extracted folder

cd ./displaylink-driver-5.6.1-59.184

Update the EVDI source files

Replace the evdi.tar.gz file with the latest version from the DisplayLink GitHub repository.

curl -L https://github.com/DisplayLink/evdi/archive/refs/heads/devel.tar.gz -o evdi.tar.gz

Script modification

The downloaded evdi.tar.gz archive contains an extra folder which the embedded evdi.tar.gz omits. So while extracing the file the path needs to altered by using the --strip-components=1 parameter to the tar command.

Modify, using you favourite text editor, the install_evdi() function of thedisplaylink-installer.sh file, around line #39:

if ! tar xf "$TARGZ" -C "$EVDI"; then

and replace it with:

if ! tar xf "$TARGZ" -C "$EVDI" --strip-components=1; then

Run the installer script as root

This installs and compiles the latest EVDI driver which works with the current 6.0.2 kernel. To make the drivers effective reboot your machine when prompted.

sudo ./displaylink-installer.sh

Enjoy the multi-monitor setup again.

Gratitude

Thanks the following people:

  • Karly
    • For pointing out a solution
  • BasSmeets
    • For creating an issue on GitHub
  • Wesly
    • For thinking along with me.