SDB:NVIDIA Bumblebee

跳转到:导航搜索


在 openSUSE 上测试

推荐文章

Icon-manual.png

相关文章

Icon-help.png


由于 NVIDIA 现在支持 switcherooctl,对于具有混合显卡的笔记本电脑,该方法比 Bumblebee 更受推荐。请考虑阅读 SDB:NVIDIA Switcheroo Control

此支持数据库 (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)

为 Leap 15 添加 bumblebee 仓库(如果使用 Leap 15)

安装驱动程序

sudo zypper in nvidia-bumblebee nvidia-bumblebee-32bit
sudo systemctl enable dkms

更新内核镜像

sudo mkinitrd

Tumbleweed

添加 bumblebee 仓库

安装驱动程序

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