从 Ubuntu 15.10 升级到 16.04.1(均为 64 位)后,我陷入了无限登录循环——每次我登录 时lightdm
,登录后屏幕都会变黑,然后返回登录屏幕。登录tty0
工作正常。我有一台 Del Latitude 3350 笔记本电脑,配备 Core i5 5200U 和 Nvidia GeForce 830M。升级决定我需要nvidia-361
驱动程序,在我使用之前nvidia-352
。我早期遇到的许多说明都提到我的 UEFI BIOS 中的安全启动,但该功能已关闭(我不记得我是在拿到笔记本电脑后立即将其关闭还是戴尔出厂时就是这样)。重新安装和/或重新配置lightdm
没有帮助。他们至少指出了卸载 Nvidia 驱动程序的方向,但这只是部分解决方案。这与我在 askubuntu 上看到的其他问题不同,因为对其他人有用的步骤对我不起作用。可能最近的指南是如何在 *Ubuntu 16.04 上为 Nvidia Optimus 硬件安装合理的图形驱动程序?。但是,这并不能让我使用 Nvidia GPU,我必须安装 Bumblebee。此外,该指南链接到 [在装有 XUbuntu/Ubuntu 16.04 LTS 的 Lenovo T440p [NVidia GT 730M] 上运行 Bumblebee]{http://lenovolinux.blogspot.co.za/2016/05/bumblebee-on-lenovo-t440p-nvidia-gt.html?m=1} 但按照这些说明操作后,我实际上也没有一只可以工作的 Bumblebee。
经过多次谷歌搜索,我发现部分解决方案是卸载 Nvidia 驱动程序。我最终找到了这些指导我如何登录。
继续之前需要注意的是,似乎您需要intel-microcode
使用系统设置中的“其他驱动程序”选项卡安装驱动程序。我已经安装了它们(可能是从 Ubuntu 15.10 开始的),所以我从未测试过如果没有安装它们会发生什么。
我使用以下命令删除 Bumblebee 和 Nvidia 驱动程序,然后重新安装 Nvidia 驱动程序。请注意,您需要添加图形驱动程序存储库以获取最新的 Nvidia 驱动程序:
sudo apt-get purge .*nvidia.* bumblebee.* .*primus.*
sudo apt-get --purge autoremove
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt install nvidia-367 nvidia-prime nvidia-settings
这导致安装了以下软件包:
bbswitch-dkms libcuda1-367 libjansson4 nvidia-367 nvidia-opencl-icd-367 nvidia-prime nvidia-settings screen-resolution-extra
然后我就这么做了rm .nvidia-settings-rc
。
此时,说明说要运行一些使用 GPU 的程序。如果我运行clinfo
(我确实使用 GPU 进行 OpenCL 开发),那么一切都会正常。其他 OpenCL 程序也可以正常工作。但是,如果我运行,glxinfo
我会得到以下输出:
name of display: :0
Error: couldn't find RGB GLX visual or fbconfig
我继续按照说明操作,以便能够运行 Bumblebee。sudo prime-select intel
需要这样做,因为否则,在重新启动后,我会回到无限登录循环。 重新启动后,我进行了sudo apt install bumblebee
编辑/etc/bumblebee/bumblebee.conf
,将所有 的实例更改为nvidia-current
。nvidia-367
我还进行了编辑/etc/modprobe.d/bumblebee.conf
以包括行blacklist nvidia-367
。 由于没有nvidia-367-updates
或nvidia-experimental-367
软件包可供我安装,因此我没有将它们列入黑名单。
重启后,我可以运行primusrun clinfo
,它会打印出 Nvidia 平台。使用时,在 Nvidia GPU 上运行 OpenCL 程序也有效primusrun
。但是,primusrun glxinfo
出现错误:
primus: fatal: Bumblebee daemon reported: error: [XORG] (EE) Failed to load module "mouse" (module does not exist, 0)
使用optirun
任何东西都会给我类似的错误,例如optirun clinfo
都optirun glxinfo
给出:
[ 462.796690] [ERROR]Cannot access secondary GPU - error: [XORG] (EE) Failed to load module "mouse" (module does not exist, 0)
[ 462.796725] [ERROR]Aborting because fallback start is disabled.
我尝试将行更改Bridge=
为Bridge=primus
并将行更改为PMMethod=auto
。但这没有帮助。PMMethod=bbswitch
/etc/bumblebee/bumblebee.conf
我如何让 Bumblebee 和 Nvidia 的驱动程序在这里工作,似乎没有一套指令可以工作?补充:当我使用 Nvidia 驱动程序prime-select nvidia
而不是 Bumblebee 时,如何让 Nvidia 驱动程序完全工作?
答案1
到目前为止,我发现的解决方案可以让 Bumblebee 正常运行(大部分),并提供一种在不使用时手动关闭 Nvidia GPU 的方法。我还没有glxinfo
在使用prime-select nvidia
而不是 时找到解决办法optirun
。
我开始关注这些说明。我添加了i915
和bbswitch
到/etc/modules
。我运行了sudo gpasswd -a $USER bumblebee
和sudo systemctl enable bumblebeed
。这两个命令似乎已成功完成。重新启动后,问题仍然存在。如果我执行 ,sudo prime-select nvidia
然后执行 ,glxinfo
我仍然会收到错误couldn't find RGB GLS visual or fbconfig
。
此时我决定安装bumblebee-nvidia
- 我的问题中链接的说明说不要安装,但上面的链接确实包含它。令人惊讶的是,这基本解决了我的问题。现在,执行optirun glxinfo
或primusrun glxinfo
打印出 Nvidia GPU 的信息。optirun glxgears
和optirun glxheads
(以及使用primusrun
)工作正常。需要注意的是,在之前尝试修复此问题的迭代中,安装bumblebee-nvidia
破坏了optirun
/ primusrun
。
唯一不起作用的是prime-select nvidia
后面跟着glxinfo
。然后我仍然收到有关无法加载模块“鼠标”的错误。此外,如果我运行,cat /proc/acpi/bbswitch
我会继续得到0000:04:00.0 ON
,我相信这表明我的 Nvidia GPU 仍然打开。运行lspci | grep NVIDIA
返回04:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 830M] (rev a2)
确认了我的 Nvidia GPU 的 PCIe 地址。
根据dmesg | grep bbswitch
,电源问题是由于nvidia
模块阻止 GPU 关闭。可以通过运行sudo rmmod nvidia_drm
、sudo rmmod nvidia_uvm
和,然后 来手动关闭 Nvidia GPU。但效果不是很好,sudo rmmod nvidia_modeset
所以我开始寻找一种自动方法来实现这一点。sudo rmmod nvidia
sudo tee /proc/acpi/bbswitch <<<OFF
为了解决 Bumblebee 无法关闭我的 Nvidia GPU 的问题,我尝试了以下说明来自大黄蜂项目但没有成功。具体来说,我的/etc/modprobe.d/bbswitch.conf
包含options bbswitch load_state=0
,并且我将其添加bbswitch load_state=0
到 的末尾/etc/modules
。我确实运行了sudo update-initramfs -u
,然后重新启动,但cat /proc/acpi/bbswitch
仍然显示 GPU 已打开。目前,我正在通过使用带有命令的脚本rmmod
来关闭 Nvidia GPU 来解决这个问题。运行任何带有optirun
或 的程序primusrun
都会自动重新加载这些驱动程序。