我是 Fedora 19 的忠实用户,我将其安装在三星 5 系列笔记本电脑上,该笔记本电脑配有 NVidia 的独立显卡 - 具体来说是 GeForce GT 630M。我成功安装了 Fedora 并将其与 Windows 8 双启动(不是通过 GRUB,但那是另一回事),并安装了 Bumblebee,因为 Nouveau 驱动程序会导致笔记本电脑变得非常热,并且无法提供良好的能源管理。
但是,我无法加载 Bumblebee 编译的 NVidia 驱动程序 - 我发现这是因为启用了安全启动!由于我不知道禁用安全启动可能会出现什么样的问题,所以我的问题如下:有没有办法让 NVidia 专有驱动程序通过 Bumblebee 正确加载,而无需禁用安全启动?
我正在寻找某种可以使这些驱动程序加载的签名。
答案1
只有在极少数情况下,禁用安全启动才会导致问题,而这些情况是恶意软件试图更改您的启动顺序的情况。如果解决问题的最简单方法是禁用安全启动,那么这是最好的选择。谨慎的浏览习惯和 Windows 中的防病毒软件,结合使用 Fedora 作为主要或次要操作系统,将使您极不可能遇到安全启动可以阻止的恶意软件。
答案2
是的,现在可以了。当前版本的 bumblebee 包含一个名为 的新配置文件,bumblebee-nvidia-sign.conf
您可以在其中设置签名密钥。
- 搜索“为安全启动签署内核模块”以了解如何创建密钥、如何将其导入 UEFI 安全启动密钥数据库以及如何使用它们签署驱动程序。
- 因为
bbswitch
您需要手动签名。但这很容易,只需在下面创建一个脚本,/etc/kernel/postinst.d/
其中包含以下行:
perl /usr/src/kernels/$KVER/scripts/sign-file sha256 $KEYPATH/private_key.priv $KEYPATH/public_key.der /usr/lib/modules/$1/extra/bbswitch.ko
每次安装新内核后,系统都会运行该脚本。因此,系统dkms
会为新内核编译驱动程序,然后该脚本会执行该驱动程序。
答案3
Bumblebee 现在可以自行处理驱动程序签名。在 Fedora 26 上(其他版本应该相同),完整流程如下:
安装所需的依赖项dnf install openssl kernel-devel perl mokutil keyutils
创建并进入受限制的目录,例如/root/.kernel-keys
在此目录中,创建文件keyconf.config
并粘贴以下内容:
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
CN = Modules
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
执行命令生成密钥:
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config configuration_file.config -outform DER -out public_key.der -keyout private_key.priv
请求将您的密钥添加到 EFI
mokutil --import public_key.der
输入两次相同的密码。您只需要在下一步中使用这个密码。
重启 PC。根据您的电脑,将出现蓝屏(或怪异的)屏幕。我选择了第二个选项,选择“key 0”,然后输入密码。这样做的目的是让您的 EFI 接受请求的密钥。您的 PC 将重新启动。
在 Fedora 上启动然后编辑文件/etc/bumblebee/bumblebee-nvidia-sign.conf
。设置在前面步骤中创建的密钥:
## Public and private keys to sing the drivers for systems with secure boot (full path)
## Note: the created public key must be imported into the UEFI.
Publickey=/root/.kernel-keys/public_key.der
Privatekey=/root/.kernel-keys/private_key.priv
启动 bumblebee 安装或运行bumblebee-nvidia --debug
以使用密钥构建驱动程序。它应该可以工作。希望它有所帮助!
感谢 Fahad 的回答,这对我帮助很大。