这是在 Fedora、CentOS Stream、Rocky Linux 和 AlmaLinux 操作系统的 RPM 包中构建 DisplayLink 驱动程序的秘诀。该驱动程序支持以下设备系列:
该软件包包含开源 evdi 库。
包由 GitHub Actions 自动构建并上传到 GitHub 版本。
注意:现在可以通过 .spec 文件(在模拟 fe 中)干净地构建。通过
make srpm
下载文件。
为了创建驱动程序 rpm 包,您可以从签出目录中运行make
命令。 Makefile 应该下载您需要的文件并创建 RPM。
默认make
将使用与 Displaylink 驱动程序包捆绑在一起的 evdi 驱动程序。如果您需要使用 evdi Github 存储库中的较新版本,并且 Displaylink 驱动程序包中当前不存在该版本,则可以通过运行以下命令来实现:
make github-release
要在 Fedora 上使用 displaylink-rpm 和启用安全启动的 evdi 内核模块,您需要使用注册的机器所有者密钥 (MOK) 对该模块进行签名。
在继续之前,请验证您的系统上是否启用了安全启动: mokutil --sb-state
如果答案是肯定的,请继续以下指南,否则不需要注册 MOK,您可以忽略此说明。
从 DKMS 版本 3.0.4 开始,无需手动创建 MOK,DKMS 在安装过程中会生成自己的密钥,只需用户注册一次。
要注册密钥,请按照以下说明操作:
sudo dnf install mokutil dkms
。mokutil --import /var/lib/dkms/mok.pub
导入密钥,并按照 DKMS github 页面上提供的注册说明进行操作(需要重新启动系统)。sudo dkms autoinstall
命令,以便通过 MOK 构建并签署 evdi 模块。sudo dkms status
或sudo systemctl status displaylink-driver.service
来验证这一点。 当与 Dell D6000 坞站一起使用时,DisplayLink 5.1.26 经常会失去与所连接显示器的通信,导致显示器变为空白并进入省电模式。当监视器空白时,内核会记录两条错误消息:
kernel: usb < xxx > : Disable of device-initiated U1 failed.
kernel: usb < xxx > : Disable of device-initiated U2 failed.
要解决此问题,请通过注释掉/etc/pulse/default.pa
中的一行来禁用音频设备的电源管理:
# ## Automatically suspend sinks/sources that become idle for too long
# load-module module-suspend-on-idle
一般来说,我们想要跟踪 evdi 库的当前稳定版本。然而,Fedora 内核通常比该版本官方支持的内核要新得多,并且新内核完全破坏构建的情况并不罕见。这可能会导致您无法在不牺牲显示链接设备的情况下升级内核。如果新内核有重要的安全或性能修复,这就不太好了。
evdi 开发人员使用main
分支作为所有更改的主分支。
要从main
分支提取最新代码并使用它来构建,请执行以下操作:
make main
make github-release
当然,这个main
分支还将包括一些实验性和较少测试的更改,这些更改可能会以其他意想不到的方式破坏事物。因此,如果主线构建有效,您应该更喜欢它,但如果它损坏,您可以选择进行main
构建。
如果您使用的是 Fedora Rawhide,您可以创建一个构建,该构建将自动从main
分支下载并通过运行以下命令进行构建:
make rawhide
过去,
main
分支中的代码将被标记,并且该版本将包含在 Displaylink 驱动程序包中。最近,我们看到 Displaylink 驱动程序包中出现了更新的更改,但 evdi 库版本没有更改。这在维护更新方面造成了一些混乱和困难。
evdi 人员已经承认了这个问题,并正在努力使流程更加透明。
贡献该包的最简单方法是分叉它并在 GitHub 中发送拉取请求。
主要有两种贡献:发布新的上游版本或提出包装修改。
有一个名为RELEASE
的变量用于打包目的。当贡献新的上游版本版本时,该变量应设置为 1,并且当向同一上游版本的规范文件添加任何其他功能时,该变量应增加 1。
DisplayLink 会不时更新其驱动程序。我们尝试这样做,但为此我们通常依赖拉取请求。
我们管理三个不同的上游号码进行版本控制:
这些变量需要在以下位置进行更改:
DAEMON_VERSION
是 DisplayLinkManager 版本VERSION
当前是 evdi 驱动程序版本DOWNLOAD_ID
是 DisplayLink 网站中用于下载 zip 的?download_id=
查询参数另外,请更新 displaylink.spec 文件底部的变更日志。
更改打包规则时,请将 displaylink.spec 中的RELEASE
变量加一