DroidCam在Ubuntu 22.04下Secure Boot问题的解决方案
droidcam GNU/Linux/nix client for DroidCam 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam
在Ubuntu 22.04系统中使用6.5内核版本并开启Secure Boot功能时,安装DroidCam视频驱动模块可能会遇到"Key was rejected by service"错误。这个问题主要与Secure Boot的安全机制有关,需要正确配置系统密钥才能解决。
问题现象分析
当尝试通过install-video脚本安装DroidCam的v4l2loopback-dc内核模块时,系统会显示以下关键错误信息:
- 模块签名阶段出现SSL错误,提示找不到相关文件
- 最终insmod命令失败,显示"Key was rejected by service"
- 详细日志显示签名过程使用了/var/lib/shim-signed/mok/目录下的MOK密钥
根本原因
这个问题源于Ubuntu系统新安装后,其Machine Owner Key(MOK)尚未被UEFI固件的Secure Boot信任列表所接受。虽然系统生成了密钥对,但如果没有在UEFI层面完成密钥注册,Secure Boot机制会拒绝加载这些模块。
详细解决方案
-
重启系统并进入UEFI/BIOS设置界面
- 在系统启动过程中,通常需要按特定键(如F2、F12或Del)进入设置
-
找到Secure Boot相关设置
- 导航至Secure Boot配置部分
- 选择"Enroll MOK"或类似选项
-
注册Ubuntu MOK密钥
- 系统会显示待注册的Ubuntu密钥
- 输入之前设置的MOK密码(通常在系统安装时设置)
- 确认并接受密钥注册
-
完成系统启动
- 保存设置并继续正常启动过程
-
重新安装DroidCam驱动
- 回到Ubuntu系统后再次运行安装脚本
- 此时模块签名和加载应该能够顺利完成
技术背景
Secure Boot是UEFI规范的一项重要安全功能,它确保只有经过可信方签名的代码才能在系统启动过程中执行。Ubuntu使用shim引导加载程序和MOK机制来平衡安全性和灵活性:
- shim:一个经过Microsoft签名的精简引导加载程序
- MOK:Machine Owner Key,允许用户自行管理第三方内核模块的信任
- sign-file:内核提供的工具,用于使用密钥对模块进行签名
当这些组件没有正确配置时,就会出现模块加载被拒绝的情况。通过上述步骤完成密钥注册后,系统就能识别并信任Ubuntu签名的内核模块了。
注意事项
- 不同主板厂商的UEFI界面可能略有不同,但基本流程相似
- 如果忘记MOK密码,可能需要重置Secure Boot设置
- 对于企业环境,可能需要使用统一的企业证书而非个人MOK
- 此解决方案同样适用于其他需要加载自定义内核模块的情况
通过正确理解Secure Boot的工作原理和Ubuntu的密钥管理机制,可以有效解决这类模块加载问题,同时保持系统的安全性。
droidcam GNU/Linux/nix client for DroidCam 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考