在啟用安全啟動的 Fedora 中安裝英偉達驅動

背景信息
現在新出廠的電腦 UEFI 會默認開啟安全啟動Secure Boot,它的作用是防止惡意軟件侵入。當電腦的引導程序被病毒修改之后,它會給出提醒并拒絕啟動,避免可能帶來的進一步損失。不過它同樣會阻止一些未經微軟簽名的 Linux 內核啟動運行。雖然可以直接選擇在主板設置中關閉安全啟動來解決這些麻煩,但在近期微軟公布的 Windows 11 最低硬件標準中可以看到,安全啟動被微軟看的越來越重。如果你的電腦是 Windows + Linux 雙系統,最好還是讓 Linux 本身支持安全啟動。
而最好用的發行版之一 Fedora 更熱衷于開源驅動。Fedora 其本身是支持安全啟動的,但是當你通過 Rpmfusion 安裝官方的英偉達驅動,會造成這些驅動的內核模塊未簽名。在 Linux 啟動過程中因為安全啟動校驗簽名,會阻止加載這些模塊,進而無法正常驅動顯卡。
用過 Ubuntu 的伙伴們應該知道,在安全啟動開啟的情況下,Ubuntu 安裝程序會自動用自簽密鑰來簽名英偉達驅動內核模塊,并在開機過程中自動將該自簽密鑰導入 MOK List(安全啟動機器主人信任密鑰列表)。但 Fedora 只會保證自身內核簽名有效,而對 Rpmfusion 中的第三方內核模塊簽名問題不予理會,導致無法正常加載英偉達驅動。
本文介紹如何在 Fedora 中自動簽署英偉達內核模塊
準備工作
在 Fedora 36 之前,要像 Ubuntu 那樣自動簽署內核模塊有點困難。但從這個版本開始,你只需幾個簡單的步驟就能做到。
在開始之前,讓我們先確認一些前提條件已經滿足:
- 已啟用安全啟動;
- 尚未安裝英偉達驅動程序(非常關鍵,如果你已經安裝了專有的英偉達驅動,可能需要重裝系統才行);
- 以及安裝了 Fedora 36 及以上版本。
本指南主要參考了以下資料:
希望深入了解的朋友可以閱讀上述資料進一步研究。
具體步驟
1、安裝自動簽名所需的工具
sudo dnf install kmodtool akmods mokutil openssl2、生成簽名密鑰
sudo kmodgenca -a該命令會在 /etc/pki/akmods/certs/ 目錄下生成密鑰,運行正確的情況下不會有輸出。
3、啟動密鑰注冊
這將使 Linux 內核信任使用你的密鑰簽名的驅動程序。
sudo mokutil --import /etc/pki/akmods/certs/public_key.der你會被要求輸入一個密碼。請記住這個密碼,在下面的第五步中還需要再次使用。
4、重啟以注冊密鑰
sudo reboot5、注冊密鑰
重啟后,你將看到藍色的 MOK 管理器界面,不要被這種類似 BSOD 的頁面嚇壞,按照以下步驟注冊密鑰。
如果你曾在啟用安全啟動的 Ubuntu 中安裝過英偉達驅動程序,你可能見過這個界面。
1、首先要及時按任意建繼續進入 MOK 管理(如果沒有及時進入 MOK 管理,系統會重啟)
MOK 管理界面1
2、首先選擇 “Enroll MOK” 注冊 MOK。
3、然后選擇 “Continue”。
4、選擇 “Yes” 并輸入步驟 3 中的密碼并回車(密碼不會在輸入框中顯示,輸入密碼直接回車就好了)。
MOK 管理界面2
5、此時密鑰已經注冊,選擇 “reboot”,設備將再次重啟。
MOK 管理界面3
6、安裝英偉達驅動程序
現在只需正常安裝英偉達驅動程序。
sudo dnf install gcc kernel-headers kernel-devel akmod-nvidia xorg-x11-drv-nvidia xorg-x11-drv-nvidia-libs7、確保內核模塊已編譯
sudo akmods --force8、確保啟動鏡像也已更新
sudo dracut --force9、重啟設備
sudo reboot驗證是否成功
重啟完成后,輸入以下命令確認驅動是否加載:
lsmod | grep -i nvidia如果有類似以下的輸出,恭喜你,一切順利,一切就緒!
$ lsmod | grep -i nvidia
nvidia_drm 94208 2
nvidia_modeset 1560576 2 nvidia_drm
nvidia_uvm 3493888 0
nvidia 62517248 118 nvidia_uvm,nvidia_modeset
video 73728 3 asus_wmi,i915,nvidia_modeset現在,你可以愉快的在開啟安全啟動的情況下使用英偉達顯卡了。
希望本文能夠幫助到你。

























