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