This is the recipe for building the DisplayLink driver in a RPM package for Fedora, CentOS Stream, Rocky Linux and AlmaLinux OS. This driver supports the following device families:
The package includes the Open Source evdi library.
Packages get automatically built by GitHub Actions and get uploaded to GitHub releases.
NOTE: Now buildable cleanly via .spec file (in mock f.e.). Download files via
make srpm
.
In order to create the driver rpm package you can run the command make
from
within the checked out directory. The Makefile should download the files needed
for you and create an RPM.
A default make
will use the evdi driver that is bundled with the Displaylink
driver package. If you need to use a newer released version from the evdi Github
repo and it is not currently present in the Displaylink driver package, you can
do so by running:
make github-release
To use displaylink-rpm and the evdi kernel module with secure boot enabled on Fedora you need to sign the module with an enrolled Machine Owner Key (MOK).
Before continue please verify if Secure boot is enabled on your system:
mokutil --sb-state
If the answer is yes, please continue with the below guide, otherwise enrolled of MOK is not required and you can ignore this instruction.
From DKMS version 3.0.4 there is no need to create MOK manually, DKMS during installation generates its own key that needs to be enrolled only once by the user.
To enroll the key please follow this instruction:
sudo dnf install mokutil dkms
.mokutil --import /var/lib/dkms/mok.pub
and follow the instruction enrollment instruction available on DKMS github page (system reboot will be required).sudo dkms autoinstall
command in order to build and sign evdi module by MOK.sudo dkms status
or sudo systemctl status displaylink-driver.service
.When used with the Dell D6000 docking station, DisplayLink 5.1.26 regularly loses communication with attached monitors, causing them to go blank and enter power-saving mode. At the time the monitors blank, the kernel logs two error messages:
kernel: usb <xxx>: Disable of device-initiated U1 failed.
kernel: usb <xxx>: Disable of device-initiated U2 failed.
To work around this issue, disable power management for the audio
device by commenting out a line in /etc/pulse/default.pa
:
### Automatically suspend sinks/sources that become idle for too long
# load-module module-suspend-on-idle
Generally we want to track the current stable release of the evdi library. However, Fedora kernels are often much newer than those officially supported by that release and it is not uncommon for a new kernel to completely break the build. This can leave you in a situation where you cannot upgrade your kernel without sacrificing your displaylink devices. This is not great if the new kernel has important security or performance fixes.
The evdi developers use the main
branch as their main branch for all changes.
To pull the latest code from the main
branch and use it to build, do the
following:
make main
make github-release
Of course this main
branch will also include some experimental and less
tested changes that may break things in other unexpected ways. So you should
prefer the mainline build if it works, but if it breaks, you have the option of
making a main
build.
If you are using Fedora Rawhide, you can create a build which will automatically
download from the main
branch and build by running:
make rawhide
In the past, code in the
main
branch would be tagged and that version is what would be included in the Displaylink driver package.Recently, we are seeing newer changes appear in the Displaylink driver package without the evdi library version being changed. This has created some confusion and difficulty when it comes to maintenance updates.
The evdi folks have acknowledged this issue and are working on making the process more transparent.
The easiest way to contribute with the package is to fork it and send a pull request in GitHub.
There are two main kind of contributions: either a new upstream version is released or a modification in the packaging is proposed.
There is a variable called RELEASE
for packaging purposes. That
variable should be set to 1 when contributing a new upstream version
release, and incremented in one when adding any other functionality to
the specfile for the same upstream version.
From time to time, DisplayLink will update their driver. We try to do so, but for that we usually rely on pull requests.
We manage three different upstream numbers for versioning:
These variables need to be changed in the following places:
DAEMON_VERSION
is the DisplayLinkManager versionVERSION
is currently the evdi driver versionDOWNLOAD_ID
is the ?download_id=
query parameter in
DisplayLink website to download the zipAlso, please update the changelog at the bottom of the displaylink.spec file.
When changing a packaging rule, please increment the RELEASE
variable by one in displaylink.spec