Code Monkey home page Code Monkey logo

displaylink-rpm's Introduction

DisplayLink RPM

Build Status Build Status Build Status

This is the recipe for building the DisplayLink driver in a RPM package for Fedora, CentOS 7 and Rocky Linux. This driver supports the following device families:

  • DL-6xxx
  • DL-5xxx
  • DL-41xx
  • DL-3xxx

The package includes the Open Source evdi library.

Packages get automatically built by GitHub Actions and get uploaded to GitHub releases.

Usage

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

Secure boot on Fedora

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).

First create a self signed MOK:

openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out \
MOK.der -nodes -days 36500 -subj "/CN=Displaylink/"

Then register the MOK with secure boot:

sudo mokutil --import MOK.der

Then reboot your Fedora host and follow the instructions to enroll the key.

Now you can sign the evdi module. This must be done for every kernel upgrade:

sudo modinfo -n evdi /lib/modules/5.10.19-200.fc33.x86_64/extra/evdi.ko.xz

sudo unxz $(modinfo -n evdi)

sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./MOK.priv \
  ./MOK.der /lib/modules/$(uname -r)/extra/evdi.ko

sudo xz -f /lib/modules/$(uname -r)/extra/evdi.ko

Now any display, hdmi and/or dvi ports on your docking station should work, and the displaylink.service should run.

Hardware-specific behavior

Dell D6000

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

Development Builds

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 devel branch as their main branch for all changes.

To pull the latest code from the devel branch and use it to build, do the following:

make devel

make github-release

Of course this devel 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 devel build.

If you are using Fedora Rawhide, you can create a build which will automatically download from the devel branch and build by running:

make rawhide

In the past, code in the devel 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.

Contributing

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.

New Upstream release

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:

  1. evdi kernel driver version
  2. DisplayLinkManager daemon and libraries version
  3. Download ID number from DisplayLink (for automatic zip retrieval)

These variables need to be changed in the following places:

  • Makefile
    • DAEMON_VERSION is the DisplayLinkManager version
    • VERSION is currently the evdi driver version
    • DOWNLOAD_ID is the ?download_id= query parameter in DisplayLink website to download the zip

Also, please update the changelog at the bottom of the displaylink.spec file.

Packaging change

When changing a packaging rule, please increment the RELEASE variable by one in displaylink.spec

displaylink-rpm's People

Contributors

elguero avatar kahlil-hodgson avatar ssaavedra avatar hadess avatar okayawright avatar rhofour avatar alhalama avatar waterfoul avatar ffgiff avatar mateusduboli avatar sourcecodere avatar chuma avatar araujorm avatar timhughes avatar richardfearn avatar pvalena avatar deajan avatar dmitry-eremeev avatar blaimi avatar tartansandal avatar enothen avatar chrisss404 avatar klemorali avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.