SDB:Bumblebee

跳转至: 导航, 搜索
Icon-construction.png 本页面正在建设!
建言或参与施工请至这篇文章的 讨论 页面。
Bumblebee 是一项致力于使启用了 Nvidia Optimus 技术的笔记本能够正常运行在 GNU/Linux 下的尝试。此功能涉及到将两块使用不同电源管理方案的显卡以分层的方式接入,从而共享一个帧缓冲区。本文介绍了 Nvidia Optimus 技术、Bumblebee 项目的目的、尝试以及不足,以及如何在 openSUSE 下安装和配置 Bumblebee。
注意 本文是对互联网上有关 bumblebee 内容的整理,本着「尽最大努力」为大家服务的原则尽可能详细的说明它的原理和安装配置过程,但并不对实际操作中可能产生的「达不到预期」的后果做任何担保。还请看官步步小心。

背景知识

什么是 Optimus 技术?

图形性能越强的显卡越耗电,越省电的显卡图形越差强人意。因为从硬件设计上注重性能和注重功耗的显卡的侧重点就不同,「面没有大碗好吃便宜又卫生的啦! -- swyear 讨论 - 贡献」。如何在性能和功耗之间找到平衡点,硬件厂商很显然没做到。于是他们就想出了这样一种混血模式(Hybird Graphics,混合动力,最早来自于汽车工业),我装两块显卡,一块图形性能做到极致,一块省电做到极致,把它们混着用,用户想省电就省电,想要性能就出性能。如何解决「混着用」的问题,目前共有三代技术:

  • 第一代、2006 年索尼 SZ 系列的「关机」实现。是通过硬件开关来实现的。
  • 第二代、Nvidia 和 ATI 的混血模式。通过变更电源管理方案来实现。这需要用户自己去判断系统负载。在运行吃显卡的程序前先变更电源管理。
  • 第三代、Nvidia 的 Optimus 路由技术。装一个「路由」和一个数据库,数据库记录哪些程序需要高性能的渲染。在使用交流电源时,用户一旦启动匹配的程序,路由将会把渲染工作分配给高性能的 Nvidia 显卡,其渲染完毕后通过异步传输引擎导出(复制到内存)给省电的 Intel 核基集成显卡,由它来完成在用户屏幕上的最终显示。而在使用电池时,则会自动关闭 Nvidia 显卡的电源以续航。

但这三代技术的目标用户仅仅是 Windows 下的部分移动商务用户。这就导致使用了搭载这些技术的笔记本的用户很难用上 Linux。随着技术对于软件的依赖性越来越强,在 Linux 上的使用就越来越难,因为没有厂商给 Linux 开发软件驱动。

第一代技术 Linux 可以简单地通过安装不同的硬件驱动,并根据硬件开关的状态来决定是否 modprobe nvidia,即是否挂载使用 Nvidia 专有驱动(Intel 的在内核里);而后面的两代是通过软件开关实现的,则很难在没有硬件厂商的支持下开发出来。

目前 Linux 对该技术的回应是 RandR,对应的是 Xorg 1.13、Kernel 3.8 和 Nvidia 319.12 驱动,而且存在若干限制。openSUSE 12.3 并没有该最新的平台,因此在此我们跳过这个被 Linus 竖了中指后 Nvidia 扭捏支持的方法不谈。(欢迎拥有硬件的用户自行测试反馈,注意,备份硬盘数据)

什么是 Bumblebee?它的缘起、能力和不足

Bumblebee 正是在这种青黄不接的环境下被开发出来,因此它的目的是作为一个中期的中继项目存在,官方网站的说法是「等待内核和驱动的支持」。

它是通过 Xorg 能够多重启动的特性来实现的,即将 Nvidia 显卡绑定到一个配置了屏幕但从来不真正使用的 Xorg 服务器上(VirtualGL),从而通过基于内核空间的软件来实现将渲染任务交给 Nvidia 显卡的目的,它实际上将两块显卡始终都跑起来,而不是一个「路由」。因此它也并不能完成「自动省电」这一步骤。简单说,它只模拟出了 Optimus 技术的「异步按需渲染」,并没有模拟出「使用电池时自动关闭」的电源管理。只是将第三代 Optimus 技术模拟成了第二代混血模式,对于需要电源管理的移动用户来说还是没什么用,除非你手动开关。与第二代混血模式的不同在于,Windows 的混血模式的缺点是用户需要判断什么时候去「开」 Nvidia 显卡,而 Bumblebee 技术的缺点是用户不止需要判断什么时候去「开」(使用 optirun/primusrun)还需要判断什么时候「关」Nvidia 显卡(用交流电源还是电池)。它的完成度仅涉及到了「混血」、而 SLI 或交火模式则并未实现。所以市面上传言的 Bumblebee 交火模式均是错误的。

如何判断我的笔记本是不是双显卡?是不是采用了 Optimus 技术?Bumblebee 是否支持?

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation Device 0dea (rev ff)

如果你运行该命令出现了两条,看上去都是显卡,那么你一定是双显卡的,采用的究竟是第二代还是第三代技术见下面。如果是显示了一条,你确认你的电脑没有显卡的硬件开关,那么是单显卡,请安装它的驱动即可。如果你的键盘上方或笔记本侧面有硬件开关,关机,扳一下,开机,命令的返回结果不一样了,那么你是第一代技术的双显卡,看哪个显卡好,把硬件开关常年放在那里即可。(如果第一次返回的是 Intel 显卡,扳一下,再进系统黑屏了,那你可能需要安装 Nvidia 专有驱动才能进。当然这个时候你也没必要再试了,你的问题已经有答案了。)

  • 你的电脑应该很新(至少是 10 年以后出厂的),大陆 08 年 1 月份以前都没见过有卖第一代双显卡的电脑,那时候只有 Compaq 出过。你要是老 Dell/Thinkpad 什么的就不用问了。
  • 你的电脑应该是 Intel 的 CPU(常见的为 i3/i5/i7),要是什么 Dual Core 那就基本不是。要是 AMD 的 CPU 你肯定不是双显卡。
  • 你的电脑应该是搭载了 Nvidia 独立显卡的。

这些内容在购买时基本上你都会知道,如果全满足,你的电脑才有可能是双显卡且采用 Optimus 技术的;如果只满足后两项或后两项的一部分(不能只满足一项),那么你的电脑极为可能是第二代混血模式的(Bumblebee 也支持)。

更加明确的判断究竟是 Optimus 还是混血显卡的方法是:

lspci -vnn | grep '\[030[02]\]'

返回两条就是 Optimus,否则不是。

双显卡的最保险方法

这是拥有双显卡笔记本的 openSUSE 用户最常见的错误,即直接安装 Nvidia 私有驱动以为能够只使用 Nvidia 显卡。根据 Bumblebee 项目的FAQ,只有很少一部分笔记本的 BIOS 设置中硬件厂商在硬件层面实现了禁用集成显卡的功能(多数是第二代混血模式的电脑,因为 Optimus 技术的标准就在那里,Intel 集成显卡要完成的东西比 Nvidia 多一倍,怎么可能实现只用独立显卡呢)。即使是这样,用户也需要先去 BIOS 中进行改动,直接安装 Nvidia 私有驱动依然是不行的。根据上面对 Optimus 技术的描述,在默认的硬件层面上,Intel 集成显卡才是负责显示的。那么做首先会造成 openSUSE 认为你没有显卡,其次会造成硬件驱动冲突,争夺屏幕的控制权,导致黑屏开不了机。

最保险的方法是不要使用 Nvidia 显卡。即在 BIOS 中禁用 NVIDIA 显卡(选择「只使用集成显卡」),然后安装 openSUSE,之后一直不要去变更 BIOS 设置。也就是说如果你有一颗 Linux 下通电随时可能爆炸的核弹,那么最保险的办法是不通电锁起来,直到 Linux 创造出使它稳定的办法。这种自废武功并不是 openSUSE 的问题,而是 Linux 的通病。即使是 Bumblebee,放开它麻烦的折腾过程,也只能满足你没事拿出来吓吓人的需求,真正使用依然是「通电随时可能爆炸」。

当然,如果你只是单纯的出于省电目的,而确定永远不会使用独立显卡,并且你的笔记本电脑又不支持在BIOS里面关闭独显,就可以直接省略折腾Bumblebee,实际上,bbswitch这个软件就可以关闭独立显卡,你可以只安装bbswitch,在以下介绍的两种安装方法中,选择只安装bbswitch

只安装bbswitch

sudo zypper ar -f http://download.opensuse.org/repositories/X11:/Bumblebee/openSUSE_13.1/X11:Bumblebee.repo   bumblebee
sudo zypper ref
sudo zypper in bbswitch dkms bbswitch-kmp-desktop 

安装成功之后还需要配置,目的是让bbswitch正常工作

以root权限执行以下命令 禁用英伟达开源驱动

# echo "blacklist nouveau" >> /etc/modprobe.d/50-blacklist.conf

设置开机加载bbswitch模块

# echo "bbswitch" >> /etc/modules-load.d/modules.conf

设置bbswitch启动参数

# echo "options bbswitch load_state=0" > /etc/modprobe.d/50-bbswitch.conf

重建initrd

# mkinitrd

重启后运行

# cat /proc/acpi/bbswitch

如果显示如下

# cat /proc/acpi/bbswitch
0000:01:00.0 OFF

说明独显已经成功关闭,你的笔记本电脑续航时间将会大幅提升! 当然,你也可以选择编译安装的方式安装以上软件,方法参见后文。

安装 bumblebee

注意 安装前,请确保您之前没有折腾过 bumblebee 或闭源显卡驱动,如果折腾过,请将它们复原(删除源,卸载驱动等)。

Bumblebee 相关软件包及功能

  • VirtualGL/primus:为 Nvidia 显卡开出独立 Xorg 虚拟服务器的核心软件。
  • bumblebee:核心软件包
  • bbswitch-kmp-<kernel-flavor>:内核工具,手动切换显卡和关闭 Nvidia 显卡用的。
  • nvidia-computeG03, nvidia-gfxG03-kmp-<kernel-flavor>,x11-video-nvidiaG03, vdpau-video:来自 Nvidia 私有源的闭源显卡。
  • libdrm_nouveau2 libvdpau_nouveau 和它们的 32bit 软件包(只用于 64 位系统),以及 xorg-x11-driver-video-nouveau:Nvidia 的开源显卡驱动。和闭源的不能混合使用。
  • libdrm_intel1, xf86-video-intel 和它们的 32bit 软件包(只用于 64 位系统),以及 vaapi-intel-driver:Intel 的开源显卡驱动。

注:kernel-<flavor> 即内核版本。其中常见的 flavor 有:

  • default 默认经过强大的 openSUSE 内核小组优化的内核
  • desktop (推荐) 基于 default 内核,针对桌面应用优化的内核
  • pae 给 32 位用的支持大内存的内核。
  • xen 给 xen 虚拟机用的内核。
  • debug 调试用,仅供专家。
  • trace 调试用,仅供专家。
  • vanilla 上游 GNU/Linux 的原装默认内核。用出来问题就去找 Linus。

可通过

$ uname -r
3.7.10-1.1-desktop

获得。注意:这里是告诉你查看 kernel-<flavor> 的方法,不代表这个返回值就是 flavor。

加源安装

sudo zypper ar -f http://download.opensuse.org/repositories/X11:/Bumblebee/openSUSE_13.1/ bumblebee
sudo zypper ref
sudo zypper in bumblebee nvidia-bumblebee bbswitch-kmp-<kernel-flavor>

注:

  • <kernel-flavor> 含义见上。
  • openSUSE请把版本号13.1修改为你的版本

之后还需要检查在 /etc/modprobe.d/50-blacklist.conf 中是否有 blacklist nouveau 一行,如果没有则添加之,再用 su 执行 mkinitrd 命令

由于是加源安装收尾操作中一般只需要执行: 1.添加用户组 6.启动服务 这两步

编译安装

bumblebee

1. 创建工作目录

mkdir bumblebee-project
cd bumblebee-project

2. 下载 bumblebee 源代码

wget -c https://github.com/downloads/Bumblebee-Project/Bumblebee/bumblebee-3.0.1.tar.gz

3. 解压

tar -xzvf bumblebee-3.0.1.tar.gz

4. 进入目录

cd bumblebee-3.0.1

5. 安装编译依赖

sudo zypper in gcc make automake autoconf pkg-config glib2-devel libX11-devel help2man
// 添加 libbsd 所在的软件源
sudo zypper ar -f http://download.opensuse.org/repositories/devel:/libraries:/c_c++/openSUSE_12.3/ d:l:c:12.3
sudo zypper ref
sudo zypper in libbsd-devel

6. 编译 bumblebee

./configure --prefix=/usr CONF_DRIVER_MODULE_NVIDIA=nvidia CONF_LDPATH_NVIDIA=/usr/lib(64)/nvidia CONF_MODPATH_NVIDIA=/usr/lib(64)/nvidia/xorg/
make -j2

注,32 位系统用 lib,64 位用 lib64。

7. 安装 bumblebee

sudo make install

8. 安装 Systemd 服务

sudo cp -r scripts/systemd/bumblebeed.service /usr/lib/systemd/system

9. 安装 sysvinit 服务

sudo cp -r scripts/sysvinit/bumblebeed /etc/init.d/
chmod +x /etc/init.d/bumblebeed

bbswitch

0. 回到项目根目录

cd /home/$USER/bumblebee-project

1. 下载 bbswitch 源代码

wget -c https://github.com/downloads/Bumblebee-Project/bbswitch/bbswitch-0.5.tar.gz

2. 解压

tar -xzvf bbswitch-0.5.tar.gz

3. 进入目录

cd bbswitch-0.5

4. 安装编译依赖

sudo zypper in kernel-<flavor>-devel

注:kernel flavor 的解释见上。

5. 编译

make

6. 安装

sudo mkdir -p /lib/modules/`uname -r`/updates
sudo cp -r bbswitch.ko /lib/modules/`uname -r`/updates/
DKMS 支持

DKMS 技术就是让你在升级了内核之后可以简单地用上而不用重编译的技术。

sudo dkms remove -m bbswitch -v OLDVERSION --all
sudo make -f Makefile.dkms

即可更新。

注意 但对于连什么是编译都不太清楚的新手来说,还是建议按部就班,因为你也没可能升级内核的。

primus

注意 primus 和 VirtualGL 可以同时安装,但是一次只能用一个。

0. 回到项目根目录

cd /home/$USER/bumblebee-project

1. 安装 Git

sudo zypper in git

2. 克隆 primus 的 Git 仓库

git clone https://github.com/amonakov/primus.git

3. 进入目录

cd primus

4. 安装依赖

sudo zypper in gcc-c++ Mesa-libGL-devel libX11-devel

5. 编译

make

6. 安装

如果你是 32 位的系统,就是 lib,否则就是 lib64。
mkdir -p /usr/lib(64)/primus/
cp -r lib/libGL.so.1 /usr/lib(64)/primus/
cp -r primusrun /usr/bin/

7. 修改 primusrun

7.1

# export PRIMUS_libGLa=${PRIMUS_libGLa:-'/usr/$LIB/nvidia-bumblebee/libGL.so.1'}

改为:

export PRIMUS_libGLa=${PRIMUS_libGLa:-'/usr/$LIB/nvidia/libGL.so.1'}

7.2

# export PRIMUS_libGLd=${PRIMUS_libGLd:-'/usr/$LIB/libGL.so.1'}

把最前面的 # 号去掉。

7.3

PRIMUS_libGL=${PRIMUS_libGL:-$(dirname `readlink -ne $0`)/'$LIB'}

改为:

PRIMUS_libGL=/usr/'$LIB'/primus:/usr/lib64/nvidia:/usr/lib/nvidia:${PRIMUS_libGL:-$(dirname `readlink -ne $0`)/'$LIB'}

7.4

# PRIMUS_libGL=${PRIMUS_libGL}:/usr/\$LIB/opengl/nvidia/lib

改为:

# PRIMUS_libGL=/usr/$LIB/primus:/usr/lib64/nvidia:/usr/lib/nvidia:${PRIMUS_libGL}:/usr/\$LIB/opengl/nvidia/lib

---

注意 以下步骤 x86_64 系统才需要继续走。可用 `uname -r` 查看。i686 的不需要。

8 安装 32 位依赖

sudo zypper in gcc-c++-32bit Mesa-libGL-devel-32bit libX11-devel-32bit

9 先把之前编译好的 64 位的改名,免得被覆盖掉

mv lib/libGL.so.1 lib/libGL64.so.1

10 编译 32 位 primus

CXX=g++\ -m32 LIBDIR=lib make

11. 安装 32 位库文件

cp -r lib/libGL.so.1 /usr/lib/primus/

注:如果你上面是 x86_64 而没用 /usr/lib64 的话这里会把 64 位的库文件覆盖掉造成问题。

VirtualGL

直接安装源里的即可:

sudo zypper ar -f http://download.opensuse.org/repositories/home:/Bumblebee-Project:/Bumblebee/openSUSE_12.3/ Bumblebee_12.3
sudo zypper ref
sudo zypper in VirtualGL

如果 x86_64 需要多装一个 VirtualGL-32bit。

至此,无论您是加源,还是编译,都已经完成了使用 Bumblebee 所需的软件准备。但这不是重点,重点是收尾操作。只有正确的收尾操作,才能真正使用 Bumblebee。


收尾操作

1. 将当前用户加入 video 和 bumblebee 组。

可以使用 YaST - 「用户和组管理」图形界面来做,也可以:

su
groupadd bumblebee
usermod -a -G bumblebee,video $USER

确认一下:

// 如果不是打开新的 konsole 窗口做,要输入 exit 退出 su 环境
$ groups
users vboxusers video bumblebee

如果不是,就重做。

2. 安装相应的显卡驱动

注意 安装 Bumblebee 时使用了加源安装的用户只需要 Intel 驱动。也用不了 nouveau 驱动。nvidia驱动应该也在nvidia-bumblebee里面安装好了,所以加源用户不需要这一步
  • Intel
sudo zypper in libdrm_intel1, xf86-video-intel, vaapi-intel-driver

64 位系统还要多装:libdrm_intel1-32bit 和 xf86-video-intel-32bit。

  • nouveau

开源的 Nvidia 驱动也可以上 Bumblebee

sudo zypper in libdrm_nouveau2 libvdpau_nouveau xorg-x11-driver-video-nouveau

64 位系统还要多装:libdrm_nouveau2-32bit 和 libvdpau_nouveau-32bit。

  • Nvidia

注意,该闭源驱动不能使用 Hard way 手动安装,一定要使用 Nvidia 提供的源来安装,因为你手动安装是在 init 3 的环境下,而 bumblebee 没配置好启动之前,你直接先装了 Nvidia 驱动根本进不了桌面。解决办法肯定是有的,那就是全命令行去配置,但新手肯定脸都绿了,所以不要那么做。

sudo zypper ar -f ftp://download.nvidia.com/opensuse/12.3/ nvidia
sudo zypper ref
sudo zypper in nvidia-computeG03, nvidia-gfxG03-kmp-<kernel-flavor>,x11-video-nvidiaG03, vdpau-video

<kernel-flavor> 的解释见上。

之后需要把一些 .so 文件移动到正确的位置(每次升级了 Nvidia 显卡后都要手动做

mkdir -p /usr/lib64/nvidia/xorg/modules/updates/extensions
mv /usr/X11R6/lib64/libGL* /usr/lib64/nvidia/
mv /usr/lib64/xorg/modules/updates/extensions/libglx* /usr/lib64/nvidia/xorg/modules/updates/extensions/
mkdir -p /usr/lib/nvidia
mv /usr/X11R6/lib/libGL* /usr/lib/nvidia

3. 如果使用了 Nvidia 闭源驱动,还要:

sudo sed -i 's/NO_KMS_IN_INITRD="yes"/NO_KMS_IN_INITRD="no"/' /etc/sysconfig/kernel

或者到 YaST - /etc/sysconfig 编辑器 - System - Kernel - NO_KMS_IN_INITRD 修改。

开源 nouveau 驱动则不用。

4. 检查 /etc/bumblebee/bumblebee.conf,其中 Driver=nvidia,如果是开源驱动则要改为 Driver=nouveau。如果这个值是空的,那么将会自动探测。

5. 挂载内核模块(如果用了 bbswitch 的 DKMS 则不用)

sudo modprobe bbswitch

6. 启动服务

sudo systemctl enable bumblebeed.service

如果是使用加源安装的用户,还需要多启动一个 dkms

sudo systemctl enable dkms.service

7. 重启进入 BIOS 设置,将模式由「仅集成显卡」设为「可切换」。

8. 重启,祈祷。

启动 bumblebee

如果你前面跟随教学跟随的一步不差,并且真的祈祷了,那么这时你开机是能进入图形界面的,bumblebee 也已经被成功安装了。

安装 Mesa-demo-x 后查看跑分:

$ glxinfo | grep render
direct rendering: Yes
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile 
   GL_NV_conditional_render, GL_ARB_ES2_compatibility,
$ primusrun glxinfo | grep render
direct rendering: Yes
OpenGL renderer string: GeForce 610M/PCIe/SSE2
   GL_NV_conditional_render, GL_NV_copy_depth_to_color, GL_NV_copy_image, 
   GL_NV_parameter_buffer_object2, GL_NV_path_rendering, 
   GL_NVX_conditional_render, GL_NVX_gpu_memory_info, 
   GL_OES_depth_texture, GL_OES_element_index_uint, GL_OES_fbo_render_mipmap,

注:如果安装是 VirtualGL 需要把 primusrun 替换成 optirun。

如果第二条的时候 OpenGL renderer string 是你的 Nvidia 显卡型号,那么这里已经可以恭喜你了。

使用

bumblebee 没有 Windows 上 Nvidia 的 Optimus 应用程序数据库(有也用不了,都是 Windows 软件),因此只能使用 primusrun 或 optirun(安装的是 VirtualGL)手动将应用程序提交给 Nvidia 显卡渲染。方法为:

$ optirun [options] <application> [application-parameters]
$ primusrun <application>

例如:

primusrun firefox

启动浏览器。

optirun --help

可查看 optirun 的所有选项,primusrun 则没有选项。

如果你需要渲染的程序很多,你不想每次都从命令行启动的话,可以去修改 /usr/share/applications/<application>.desktop 文件,在 Exec= 那里加上 primusrun/optirun。当然你最好维护一个文件记录你究竟修改了哪些 .desktop 文件,这样在你进入省电模式(手动禁用了 Nvidia 显卡)时,可以去改回来。当然你可以学习下 sed 命令的用法:

sed -i "s/要替换的字符串/要替换成的字符串/" <application>.desktop

然后把这些程序一条条写到一个名为 nvidia-enabled.sh 的脚本文件中去。再写一个完全相反的作为 nvidia-disabled.sh

chmod +x nvidia-*.sh

这样每次禁用开启后运行一次这个脚本就批量搞定了你的应用程序启动问题。

注意 这时你使用 nvidia-settings 这个命令是无效的,因为 Nvidia 显卡并未运行在你当前使用的这个 X 服务器和显示屏幕上。你需要 primusrun/optirun nvidia-settings -c :8 才可以。

禁用

本章节适用于已经成功配置了 Bumblebee,但出于省电目的,需要完全禁用 Nvidia 显卡的实例,而并非我有双显卡,但要禁用一个的实例,该实例请见上面双显卡的最保险方法

  • 禁用 nvidia 内核模块:
$ sudo rmmod nvidia
# 确认
$ lsmod | grep nvidia
$
  • 关闭独立显卡:
$ tee /proc/acpi/bbswitch <<<OFF
OFF
  • 禁用开机挂载 nvidia 内核模块
$ cd /etc/modprobe.d
$ sudo mv 50-nvidia.conf 50-nvidia.conf.bak
$ sudo sed -i "blacklist nvidia" > 50-nvidia.conf
  • 修改 bbswitch 配置
$ vi 50-bbswitch.conf

把原来的选项用 # 号注释掉,换成下面的:

options bbswitch load_state=0 unload_state=0
  • 确认 /etc/sysconfig/kernel 里没有 nvidia 相关参数
$ grep -r "nvidia" /etc/sysconfig/kernel

若有返回值,则请像上面步骤一样注释掉它。

  • 构建一个新的 initrd
$ sudo mkinitrd
  • 重启,祈祷
  • 重启回来验证下独立显卡是否禁用:
$ optirun --status
Bumblebee status:  Ready (3.1). X inactive. Discrete video card is off.

配置

常见疑难问题

primusrun 的每秒帧率(FPS)太低了,optirun 会高一些

这是 vblank 同步的影响。要只为跑分的话可以用:

vblank_mode=0 primusrun <application>

但是实际使用不行,只会多耗电而已,因为你的 LCD 面板无论如何都超不过 60 FPS。实际上,bumblebee 设计会丢弃大于 60 FPS 的帧率以避免无用的计算,所以请接受这个 60 FPS 梦魇。

Error: couldn't get an RGB, Double-buffered visual

显卡或 xorg 不够新。

[VGL] ERROR: Could not open display :8 with certain programs

有些程序运行起来会把 optirun/primusrun 退掉。常见于你 wine 起来的 windows 程序。所以方法是先运行起一个 bash,然后在 bash 里跑:

primusrun/optirun bash

然后在该 bash 里命令行启动该程序比如 kwrite。

或者如果你用闭源显卡的话可以编辑 /etc/bumblebee/xorg.conf.nvidia,把 Option "ConnectedMonitor" 改成 "CRT-0" 即可。

桌面特效没有了

删掉 /etc/X11/xorg.conf,bumblebee 和 Optimus 的笔记本都不支持它。

[ERROR]Cannot access secondary GPU

[ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected.
[ERROR]Aborting because fallback start is disabled.

解决办法是把 /etc/X11/xorg.conf.d/20-intel.conf 移动到别的地方并重启 bumblebee 服务:

sudo mv /etc/X11/xorg.conf.d/20-intel.conf /etc/X11/xorg.conf.d/20-intel.conf.bak
sudo systemctl try-restart bumblebeed.service

休眠问题

有时候 bumblebee 无法休眠太长时间(比如一整夜),会造成恢复时黑屏。

解决方法:这是通病,用关机替代。openSUSE 开机很快的。

无法开机

有时候 Bumblebee 或 bbswitch 会把 BIOS 里的 Optimus 禁用掉(原因未知,触发操作未知)。因为 initrd 里已经有了 nvidia,当然需要 Optimus 是启用的,你这时无法在 BIOS 里设置只使用 intel 显卡(设置方法见「禁用」章节),否则会出现 Nvidia 有驱动找不到显卡因此黑屏的现象。所以不能开机时请检查您的 BIOS 中 Optimus 是否被禁用了。打开它。

The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect

你的 bumblebeed 守护进程没有启动。请使用

sudo systemctl status -l bumblebeed.service

查看守护进程状态。

你应该是前面说的:

sudo systemctl enable bumblebeed.service

没有做。所以如果守护进程运行状态是 not running 的话,请启用并启动守护进程的系统服务:

sudo systemctl enable bumblebeed.service (启用/开机自启动)
sudo systemctl start bumblebeed.service (启动)

然后可以再次查看守护进程状态确认。

全部

Troubleshooting

汇报故障

Reporting-Issues

参考

继续阅读