SDB:NVIDIA Bumblebee
此支持数据库 (SDB) 条目指向在 openSUSE 的最新版本上安装 NVIDIA 专有驱动程序以及 Bumblebee/bbswitch 的一种可能过程。
情况
您拥有一台具有 NVIDIA 独立显卡的 Optimus 笔记本电脑。您可能需要使用独立显卡运行程序,但您不希望独立显卡一直处于活动状态,因为这会导致笔记本电脑消耗过多的能量。或者您只想完全禁用 Optimus 笔记本电脑上的独立显卡,例如 Dell Latitude E6430,其 BIOS 无法提供执行此操作的方式。
过程
如果您需要带有 X11:Bumblebee 仓库的旧说明,请在此处查看:https://en.opensuse.net.cn/index.php?title=SDB:NVIDIA_Bumblebee&oldid=118653
准备
虽然通常可靠,但在完成此安装和配置过程后可能会出现意外问题。截至 openSUSE 13.2,btrfs 是根分区的默认文件系统。如果您使用 brtfs 作为文件系统,您应该拍摄文件系统的快照,以便在出现问题时拥有简单的恢复点。
sudo snapper create -d BeforeBB
截至 2018 年 1 月 7 日(内核 4.4.104-39),似乎存在影响 Intel Skylake 笔记本电脑的问题。如果您的笔记本电脑使用此架构,并且您在不采取某些预防措施的情况下安装 bumblebee,那么当 X11 启动时,您将遇到硬锁:黑屏且计算机完全无响应。请注意,Snapper 回滚在这种情况下无济于事,如果您陷入这种困境,您将需要完全重新安装 [*]。请参阅相关的 Bumblebee 错误报告,以获取针对您特定情况的解决方法以及指向相关 Linux 内核错误报告的链接。可以通过转到 Yast2 > 系统 > 引导加载程序 > 内核参数,在名为“可选内核命令行参数”的字段末尾附加正确的“acpi_osi”值来轻松应用解决方法。保存、重新启动,然后您可以继续执行以下步骤。
[*]实际上,如果遇到问题并发现自己在这里,则有可能恢复:在引导加载程序屏幕上,按“e”编辑当前选择的引导参数,找到引导操作系统的行(您会添加 nomodeset 或类似引导选项的行,但它们没有帮助),如果存在,则删除“resume=/swap/path/or/whatever”部分,并在该行末尾附加“ 3”(空格,然后是 # 3)。然后按 F10 启动编辑后的配置。您应该能够在输入磁盘加密密码(如果使用)后进入 Ctrl+Alt+F2 终端。从那里“sudo snapper list” -> 选择哪个 # 看起来不错,假设回滚 #12,那么您将发出:“sudo snapper rollback 12”,然后“sudo shutdown -r now”,并且很可能可以节省一个小时的重新安装时间,以及重新安装您最喜欢的程序和配置的麻烦。
安装 bumblebee
安装 bumblebee 非常简单
sudo zypper in bumblebee bbswitch
将自己添加到 bumblebee 组(此处“用户名”应替换为您的真实用户名)
sudo usermod -aG bumblebee username
将自己添加到视频组(此处“用户名”应替换为您的真实用户名)
sudo usermod -aG video username
然后启用并启动 bumblebee
sudo systemctl enable bumblebeed sudo systemctl start bumblebeed
黑名单 nouveau(即使您计划使用 nouveau 驱动程序)
echo "blacklist nouveau" | sudo tee -a /etc/modprobe.d/99-local.conf sudo dracut -f --regenerate-all
如果您计划使用 32 位应用程序(例如 steam),请安装所需的库
sudo zypper in Mesa-libGL1-32bit libX11-6-32bit primus-32bit
可选:安装 NVIDIA 驱动程序
如果您想使用辅助 Nvidia 显卡的先进功能,可以按以下方式安装专有 Nvidia 驱动程序
Leap 版本
确保 /etc/ld.so.conf.d/nvidia-gfxG*.conf 中的所有行都已注释掉。nvidia 安装程序应检测到 optimus 硬件并自动执行此操作,但最好小心谨慎。
#/usr/X11R6/lib64 #/usr/X11R6/lib
如果它们没有,则编辑文件以使其如上所示,然后运行
sudo ldconfig
将 nvidia 模块添加到黑名单
echo "blacklist nvidia" | sudo tee -a /etc/modprobe.d/99-local.conf sudo mkinitrd
设置 xorg 模块目录
sudo mkdir -p /usr/lib64/nvidia/xorg/modules/extensions sudo ln -s /usr/lib64/xorg/modules/extensions/nvidia/nvidia-libglx.so /usr/lib64/nvidia/xorg/modules/extensions/libglx.so
配置 bumblebee:以 root 身份编辑 /etc/bumblebee/bumblebee.conf 并设置以下内容(此处未提及的行应保持不变,不删除)
[bumblebeed] TurnCardOffAtExit=true Driver=nvidia [driver-nvidia] LibraryPath=/usr/X11R6/lib64:/usr/X11R6/lib XorgModulePath=/usr/lib64/nvidia/xorg/modules,/usr/lib64/xorg/modules
为 Leap 42.3 添加 bumblebee 仓库(如果使用 Leap 42.3)
sudo zypper addrepo https://download.opensuse.org/repositories/X11:Bumblebee/openSUSE_Leap_42.3/X11:Bumblebee.repo
为 Leap 15 添加 bumblebee 仓库(如果使用 Leap 15)
sudo zypper addrepo https://download.opensuse.org/repositories/X11:Bumblebee/openSUSE_Leap_15.0/X11:Bumblebee.repo
安装驱动程序
sudo zypper in nvidia-bumblebee nvidia-bumblebee-32bit sudo systemctl enable dkms
更新内核镜像
sudo mkinitrd
Tumbleweed
添加 bumblebee 仓库
sudo zypper addrepo https://download.opensuse.org/repositories/X11:Bumblebee/openSUSE_Tumbleweed/X11:Bumblebee.repo
安装驱动程序
sudo zypper in nvidia-bumblebee nvidia-bumblebee-32bit sudo systemctl enable dkms
更新内核镜像
dracut -f --regenerate-all
Leap 15.0 的附加步骤
为 openSUSE Leap 15.0 提供的 NVidia 包不包含 /etc/X11R6/ 目录中的任何文件或符号链接,因此您需要自己创建它们。请执行以下操作
创建所需的目录
mkdir -p /usr/X11R6/lib64/ mkdir -p /usr/X11R6/lib/
并在其中创建符号链接
cd /usr/X11R6/lib64/ ln -s /usr/lib64/libEGL_nvidia.so.0 libEGL_nvidia.so.0 ln -s /usr/lib64/libGL.so.1.0.0 libGL.so ln -s /usr/lib64/libGL.so.1.0.0 libGL.so.1 ln -s /usr/lib64/libGL.so.1.0.0 libGL.so.1.0.0 ln -s /usr/lib64/libGLESv1_CM_nvidia.so.1 libGLESv1_CM.so ln -s /usr/lib64/libGLESv1_CM_nvidia.so.1 libGLESv1_CM.so.1 ln -s /usr/lib64/libGLESv1_CM_nvidia.so.1 libGLESv1_CM_nvidia.so.1 ln -s /usr/lib64/libGLESv2_nvidia.so.2 libGLESv2.so ln -s /usr/lib64/libGLESv2_nvidia.so.2 libGLESv2.so.2 ln -s /usr/lib64/libGLESv2_nvidia.so.2 libGLESv2_nvidia.so.2 ln -s libGLX.so.0.0.0 libGLX.so ln -s libGLX.so.0.0.0 libGLX.so.0 ln -s /usr/lib64/libGLX_nvidia.so.0 libGLX.so.0.0.0 ln -s /usr/lib64/libGLX_nvidia.so.0 libGLX_nvidia.so.0 ln -s /usr/lib64/libnvidia-cfg.so.1 libnvidia-cfg.so.1 ln -s /usr/lib64/libnvidia-egl-wayland.so.1 libnvidia-egl-wayland.so.1 ln -s /usr/lib64/libnvidia-encode.so.1 libnvidia-encode.so.1 ln -s /usr/lib64/libnvidia-fbc.so.1 libnvidia-fbc.so.1 ln -s /usr/lib64/libnvidia-ifr.so.1 libnvidia-ifr.so.1 ln -s /usr/lib64/libnvidia-ml.so libnvidia-ml.so ln -s /usr/lib64/libnvidia-ml.so.1 libnvidia-ml.so.1 ln -s /usr/lib64/libnvidia-opencl.so.1 libnvidia-opencl.so.1 ln -s /usr/lib64/libnvidia-ptxjitcompiler.so.1 libnvidia-ptxjitcompiler.so.1 ln -s /usr/lib64/libnvidia-wfb.so.1 libnvidia-wfb.so.1 ln -s /usr/lib64/libvdpau_nvidia.so libvdpau_nvidia.so
当然,您可以选择要链接哪些库。可以通过以下方式显示库列表
ls -n /usr/lib64/|egrep 'nvidia|libGL|libEGL'
如果您将使用 multilib,也请执行
cd /usr/X11R6/lib/ ln -s /usr/lib/libEGL_nvidia.so.0 libEGL_nvidia.so.0 ln -s /usr/lib/libGL.so.1.0.0 libGL.so ln -s /usr/lib/libGL.so.1.0.0 libGL.so.1 ln -s /usr/lib/libGL.so.1.0.0 libGL.so.1.0.0 ln -s /usr/lib/libGLESv1_CM_nvidia.so.1 libGLESv1_CM.so ln -s /usr/lib/libGLESv1_CM_nvidia.so.1 libGLESv1_CM.so.1 ln -s /usr/lib/libGLESv1_CM_nvidia.so.1 libGLESv1_CM_nvidia.so.1 ln -s /usr/lib/libGLESv2_nvidia.so.2 libGLESv2.so ln -s /usr/lib/libGLESv2_nvidia.so.2 libGLESv2.so.2 ln -s /usr/lib/libGLESv2_nvidia.so.2 libGLESv2_nvidia.so.2 ln -s libGLX.so.0.0.0 libGLX.so ln -s libGLX.so.0.0.0 libGLX.so.0 ln -s /usr/lib/libGLX_nvidia.so.0 libGLX.so.0.0.0 ln -s /usr/lib/libGLX_nvidia.so.0 libGLX_nvidia.so.0 ln -s /usr/lib/libnvidia-cfg.so.1 libnvidia-cfg.so.1 ln -s /usr/lib/libnvidia-egl-wayland.so.1 libnvidia-egl-wayland.so.1 ln -s /usr/lib/libnvidia-encode.so.1 libnvidia-encode.so.1 ln -s /usr/lib/libnvidia-fbc.so.1 libnvidia-fbc.so.1 ln -s /usr/lib/libnvidia-ifr.so.1 libnvidia-ifr.so.1 ln -s /usr/lib/libnvidia-ml.so libnvidia-ml.so ln -s /usr/lib/libnvidia-ml.so.1 libnvidia-ml.so.1 ln -s /usr/lib/libnvidia-opencl.so.1 libnvidia-opencl.so.1 ln -s /usr/lib/libnvidia-ptxjitcompiler.so.1 libnvidia-ptxjitcompiler.so.1 ln -s /usr/lib/libnvidia-wfb.so.1 libnvidia-wfb.so.1 ln -s /usr/lib/libvdpau_nvidia.so libvdpau_nvidia.so
验证安装
安装完上述软件后,重新启动机器。
通过在终端中键入来检查 bumblebee 是否正常工作
optirun --status
如果您看到消息
Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is off.
那么 bumblebee 应该可以正常工作。要使用离散显卡,必须从终端启动程序
optirun program-name
您可以通过运行来测试此操作
optirun glxgears -info
(注意:glxgears 在 Mesa-demo-x 包中)
如果您看到齿轮,那么您的离散显卡正在使用 bumblebee 工作。您会在终端中找到类似以下内容
GL_RENDERER GeForce 840M/PCIe/SSE2 GL_VERSION 4.6.0 NVIDIA 418.56 GL_VENDOR NVIDIA Corporation
您还可以通过运行与专有 nvidia 驱动程序一起安装的 nvidia-settings 程序来验证您的安装
optirun -b none nvidia-settings -c :8
如果您无法恢复图形系统,则应使用 snapper 执行回滚。如果您的系统没有 btrfs,则不适用。首先找出您之前应该制作的快照的编号
sudo snapper list
然后执行回滚,此处“xx”应替换为您的准备快照的编号
sudo snapper rollback xx
重新启动机器。
常见问题解答
GT600M/GT700M 系列显卡 (Kepler) 的问题
如果无法加载 GPU 驱动程序 - 在 bbswitch 加载时 - 并收到 Kepler 卡上的类似错误
[INFO]Response: No - error: Could not load GPU driver [ERROR]Cannot access secondary GPU - error: Could not load GPU driver
尝试将 "/etc/modprobe.d/50-bbswitch.conf" 中的“load_state”值从 0 更改为 -1
echo "options bbswitch load_state=-1 unload_state=1" > /etc/modprobe.d/50-bbswitch.conf
更多信息请参见 github: bbswitch - 向下滚动到模块选项。
使用 bbswitch 手动切换显卡状态
检查显卡状态
cat /proc/acpi/bbswitch
要关闭显卡,请键入
sudo tee /proc/acpi/bbswitch <<<OFF
Optirun 无法运行
如果您运行 `journalctl -u bumblebee` 并且看到
Failed to initialize the GLX module; please check in your X
log file that the GLX module has been loaded in your X
server, and that the module is the NVIDIA GLX module. If
you continue to encounter problems, Please try
reinstalling the NVIDIA driver.
您可能安装了非 Optimus 版本的 nvidia 驱动程序,请从 X11:Bumblebee 仓库安装(仔细阅读此 wiki 页面)。通过以下方式检查
sudo update-alternatives --display libglx.so
如果您看到类似内容
libglx.so - auto mode link best version is /usr/lib64/xorg/modules/extensions/nvidia/nvidia-libglx.so link currently points to /usr/lib64/xorg/modules/extensions/nvidia/nvidia-libglx.so link libglx.so is /usr/lib64/xorg/modules/extensions/libglx.so /usr/lib64/xorg/modules/extensions/nvidia/nvidia-libglx.so - priority 100 /usr/lib64/xorg/modules/extensions/xorg/xorg-libglx.so - priority 50
您安装了非 Optimus 版本的 nvidia 驱动程序,卸载它们并删除 nvidia 仓库,再次阅读“可选:安装 NVIDIA 驱动程序”。
Optirun 返回“无法访问辅助 GPU”
如果您在运行“optirun --status”或“optirun glxgears”时收到如下错误
[ERROR]Cannot access secondary GPU - error: Could not enable discrete graphics card
这可能是由于存在一个或多个电源管理应用程序(例如 TLP、powertop)。在禁用它们后,optirun 应该可以工作。
将 GPU 添加到 TLP 黑名单
如果您有 TLP,可以将 GPU 添加到其黑名单并使 optirun 正常工作。找到 GPU 地址
sudo lspci
应存在类似行,复制第一个数字(例如 01:00.0)
01:00.0 VGA compatible controller: NVIDIA Corporation ... [GeForce ...] (rev a1)
打开位于 /etc/default/tlp 的 TLP 配置文件
搜索带有“RUNTIME_PM_BLACKLIST”的行,删除“#”,然后粘贴您的 GPU 地址。例如:
RUNTIME_PM_BLACKLIST="01:00.0"
如果存在其他值,只需在最后一个数字后添加一个空格并粘贴您的地址。
搜索带有“RUNTIME_PM_DRIVER_BLACKLIST”的行,删除“#”。它应该是
RUNTIME_PM_DRIVER_BLACKLIST="amdgpu nouveau nvidia radeon"
保存并关闭文件。重新启动后,optirun 应该可以工作。
禁用 TLP(仅当上一步未解决问题时)
您可以通过在控制台中键入以下命令来禁用 TLP
sudo systemctl disable tlp sudo systemctl stop tlp
重新启动后,optirun 应该可以工作。
禁用 powertop
您可以通过在控制台中键入以下命令来禁用 powertop
sudo systemctl disable powertop sudo systemctl stop powertop
重新启动后,optirun 应该可以工作。
技巧与窍门
运行 Steam
您可以这样运行 Steam
optirun steam
这将使您的离散显卡在 Steam 运行时一直处于开启状态。
您也可以像往常一样启动 Steam,然后对于每个游戏:右键单击所选游戏 -> 属性 -> 设置启动选项。在窗口中键入
optirun %command%
这将仅在运行游戏时使您的离散显卡保持开启状态。
Optirun 与 Primusrun
不要再使用 primusrun。Optirun 就是您所需要的。
过去 optirun 是用于设置 VirtualGL 桥接的包装脚本。然后 primus 库出现了它自己的 primusrun 包装脚本。现在 optirun 是一个与 bumblebee 守护程序集成的程序,支持 VirtualGL 和 primus 桥接。
在 Nouveau 和 Nvidia 驱动程序之间切换
更改 /etc/bumblebee/bumblebee.conf 中的行
[bumblebeed] Driver=<driver you want to use>
重新启动 bumblebeed
sudo systemctl restart bumblebeed
多显示器
可能有些输出连接到您的 Nvidia 显卡,有些连接到 Intel 显卡。在这种情况下,连接到 Nvidia 显卡的输出可能无法工作。您可以使用名为 intel-virtual-output 的工具。它来自 xf86-video-intel 包。在使用它之前,编辑 /etc/bumblebee/xorg.conf.nvidia 将 UseEDID "false" 和 Option "AutoAddDevices" "false" 行更改为“true”,如果您在设备分辨率检测方面遇到问题。注释掉 Option "UseDisplayDevice" "none" 行也可能有所帮助。您应该能够使用 intel-virtual-output -f 在前台启动它,并且您的输出应该开始工作。
有关更多信息,请查看 Bumblebee wiki 上的多显示器页面。
参考资料
更多信息和问题解决:ultimate tutorial installing Bumblebee driver for SUSE
以下博客条目引用了一个不再使用的仓库,但它们可能对信息有用。
对于 openSUSE 13.1,请参阅此博客条目:openSUSE 13.1: install 'bumblebee' and disable discrete graphics adapter on NVIDIA Optimus laptop
对于 openSUSE 12.3,请参阅此博客条目:openSUSE 12.3: How to install 'bumblebee' for NVIDIA Optimus VGA。
对于 openSUSE 12.2,请参阅此博客条目:openSUSE 12.2: How to install 'bumblebee' for NVIDIA Optimus VGA