Difference between revisions of "Bumblebee (简体中文)"

From ArchWiki
Jump to: navigation, search
m (安装)
m (不依赖Bumblebee来使用CUDA)
Line 256: Line 256:
 
==不依赖Bumblebee来使用CUDA==
 
==不依赖Bumblebee来使用CUDA==
  
关于这个的文档不是很多,但是你不需要Bumblebee来使用CUDA。就算实在optirun无法正常运行的机器上CUDA也可能正常运作。如需在Lenovo IdeaPad Y580(使用GeForce 660M显卡)上让使用CUDA,参见:https://wiki.archlinux.org/index.php/Lenovo_IdeaPad_Y580#NVIDIA_Card。那些步骤很有可能也能在其他机器上使用(除了要在acpi上做点小改动,可能不需要这个)。
+
关于这个的文档不是很多,但是你不需要Bumblebee来使用CUDA。就算实在optirun无法正常运行的机器上CUDA也可能正常运作。如需在Lenovo IdeaPad Y580(使用GeForce 660M显卡)上让使用CUDA,参见:[[Lenovo IdeaPad Y580#NVIDIA_Card|https://wiki.archlinux.org/index.php/Lenovo_IdeaPad_Y580#NVIDIA_Card]]。那些步骤很有可能也能在其他机器上使用(除了要在acpi上做点小改动,可能不需要这个)。
  
 
==疑难问题==
 
==疑难问题==

Revision as of 13:47, 21 May 2013

翻译状态: 本文是英文页面 Bumblebee翻译,最后翻译时间:2012-07-11,点击这里可以查看翻译后英文页面的改动。

转自 Bumblebee FAQ:

"Bumblebee 致力于使 NVIDIA Optimus 在 GNU/Linux 系统上可用,实现两块不同的供电配置的显卡同时插入使用,共享同一个 framebuffer。"

Bumblebee: Linux上的擎天柱

Optimus 技术 是不依赖于硬件复杂结构的 交火显卡 实现。独立显卡按需渲染,并传输给集成显卡,集成显卡则负责显示功能。当笔记本通过电池供电时,独立显卡将关闭,以延长电池寿命。

Bumblebee 是基于 VirtualGl 和内核驱动的软件实现,以支持使用并不是物理直连显示器的独立显卡。

Bumblebee 试图模拟 Optimus 技术的行为;当需要的时候,使用独立显卡进行渲染,不使用的时候则关闭。当前的版本仅支持按需渲染,电源管理功能仍然在开发之中。

NVIDIA 独立显卡在管理的时候,是作为一个连接到“伪屏幕”(配置了显示器,但是并不使用)上的独立的 X 服务器的。第二个服务器被称为使用 VirtualGL,因为他看起来就像一个远程服务器。这就是说,你需要一系列步骤来设置内核驱动、X 服务器以及守护进程。

警告: Bumblebee 的开发任务仍然很重! 我们非常欢迎您的帮助。

安装

安装 Bumblebee 之前,如果有可能,检查你的 BIOS 已激活 Optimus (共享显卡, BISO有可能没有提供此项设置),并且为次要显卡安装 intel 驱动

完整的配置需要安装这些包:

  • bumblebee (或 bumblebee-gitAUR) - 提供守护进程以及程序的主要安装包。
  • (可选) bbswitch (或 dkms-bbswitchAUR) - 推荐安装用来关闭Nvidia显卡省电。
  • (可选) 如果你不止想节电,也就是说要在独立的Nvidia显卡上渲染程序,那么你也需要:
    • Nvidia显卡驱动。开源的 nouveau 驱动或是闭源的 nvidia 驱动,参见下面小节。
    • 一个渲染/显示的连接。目前有两个包可以适用 primus (或 primus-gitAUR) 和 virtualgl。其中只需要安装一个包,不过两个都安装也不会有问题。
注意: 如果你想在64位系统上运行32位程序,你必须为你的程序安装正确的lib32-*库。除此之外,你还要根据你安装的渲染连接来安装 lib32-virtualgl 或者 lib32-primus (或 lib32-primus-gitAUR)。如果你打算使用Primus,你得运行 primusrun 而不是 optirun

为 Intel / nvidia 安装 Bumblebee

# pacman -S intel-dri bumblebee nvidia

如果你想要在64位系统上运行32位的程序 (比如用wine来运行游戏) 你需要安装 lib32-nvidia-utils

# pacman -S lib32-nvidia-utils
注意: 不要安装lib32-nvidia-libgl! Bumblebee不需要它来找到正确的32位nvidia运行库。

为 Intel / nouveau 安装 Bumblebee

首先安装 nouveau 以及以来的包:

# pacman -S xf86-video-nouveau nouveau-dri mesa

启动 Bumblebee

使用之前,请确保添加相关用户到 Bumblebee 组:

# usermod -a -G bumblebee $USER

$USER 是要添加的用户登录名称。 之后注销,并重新登录,以应用组变更。

要自动启动 bumblebee,将其添加到启动服务中:

# systemctl enable bumblebeed.service

结束了。 - 重启之后,使用 shell 程序 optirun 来支持 Optimus NVIDIA 渲染!

使用

随 bumblebee 发布的 optirun 程序是用来使用 Optimus NVIDIA 显卡的最好方法。

测试 Bumblebee 是否支持你的 Optimus 系统:

$ optirun glxgears -info

如果在终端中看到一个关于你的 Nvidia 的提示,恭喜你,Bumblebee 和 Optimus 已经开始工作了。

常用命令:

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

一些例子:

启动 firefox ,并使用 Optimus 加速:

$ optirun firefox

启动 Windows 应用程序:

$ optirun wine <windows application>.exe

启动 NVIDIA 设置:

$ optirun nvidia-settings -c :8 

要获取 optirun 的可用选项,运行:

$ optirun --help

配置

你可以按需配置 Bumblebee 的行为,可以通过 /etc/bumblebee/bumblebee.conf 来调节诸如优化,电源管理,以及其他任务。

速度优化

Bumblebee 使用你的 Optimus NVIDIA 显卡来渲染一个配置了 VirtualGL 的不可见的 X 服务器,并且将结果传输到你当前的 X 服务器上。传输之前将压缩侦,这可以节省带宽并且能够用于加速 bumblebee 的优化。

要为单个应用程序指定不同的压缩方法:

$ optirun -c <compress-method> application

压缩方法会影响 GPU性能和GPU使用,压缩方法(比如 jpeg)会最大限度的使用 CPU,并且尽可能少的使用 GPU;非压缩的方法最大限度的使用 GPU,而尽可能少的使用 CPU。

压缩方法如有: jpeg, rgb, yuv

非压缩方法有: proxy, xv

要为所有应用程序使用一个标准的压缩方法,在 /etc/bumblebee/bumblebee.conf 中设置 VGLTransport to <compress-method>

/etc/bumblebee/bumblebee.conf
...
[optirun]
VGLTransport=proxy
...
注意: CPU频率调节可能会影响渲染的性能。

电源管理

电源管理的目的是为了自动关闭 bumblebee 不再使用的 NVIDIA 显卡。

要启用电源管理,需要从 AUR 安装 bbswitchAUR

警告: 确保备用 Xrog 服务器在不用的时候是关闭的!

设置/etc/bumblebee/bumblebee.conf 中驱动一节的PMMethodbbswitch

/etc/bumblebee/bumblebee.conf
[bumblebeed]
KeepUnusedXServer=false
...
[driver-nvidia]
PMMethod=bbswitch
...
[driver-nouveau]
PMMethod=bbswitch
...

默认的 NVIDIA 电源状态

根据你的需要,设置 load_state 以及 unload_state 模块选项 (参考 bbswitch 文档)。

/etc/modprobe.d/bbswitch.conf
options bbswitch load_state=0 unload_state=0

重启 bumblebee 守护进车功能以激活电源管理功能:

# rc.d restart bumblebeed

关机时启用 NVIDIA 显卡

如果系统上次关闭时,NVIDIA显卡为关闭(断电)状态,NVIDIA 显卡可能在启动时不能正确初始化。一个解决的办法是在/etc/bumblebee/bumblebee.conf文件中设置TurnCardOffAtExit=false ,但是这会导致每次你停止 Bumblebee 守护进程时,NVIDIA 显卡都会启用,即使是你手工关闭守护进程。要保证在关闭时 NVIDIA 显卡总是供电状态,增加如下启动进程钩子函数 (假如你使用 bbswitchAUR的话):

/etc/rc.d/functions.d/nvidia-card-enable
nvidia_card_enable() {
  BBSWITCH=/proc/acpi/bbswitch

  stat_busy "Enabling NVIDIA GPU"

  if [ -w ${BBSWITCH} ]; then
    echo ON > ${BBSWITCH}
    stat_done
  else
    stat_fail
  fi
}

add_hook shutdown_poweroff nvidia_card_enable

多显示器

你可以通过 xorg.conf 设置多个显示器。设置他们使用 Intel 显卡,然后 Bumblebee 可以仍然使用 NVIDIA 显卡。下面的配置文件示例配置了两个不同的 1080p 的显示器,并且使用了 HDMI 输出。

/etc/X11/xorg.conf
Section "Screen"
    Identifier     "Screen0"
    Device         "intelgpu0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "0"
    SubSection "Display"
        Depth          24
        Modes          "1980x1080_60.00"
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "intelgpu1"
    Monitor        "Monitor1"
    DefaultDepth   24
    Option         "TwinView" "0"
    SubSection "Display"
        Depth          24
        Modes          "1980x1080_60.00"
    EndSubSection
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    Option         "Enable" "true"
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    Option         "Enable" "true"
EndSection

Section "Device"
    Identifier     "intelgpu0"
    Driver         "intel"
    Option         "XvMC" "true"
    Option         "UseEvents" "true"
    Option         "AccelMethod" "UXA"
    BusID          "PCI:0:2:0"
EndSection

Section "Device"
    Identifier     "intelgpu1"
    Driver         "intel"
    Option         "XvMC" "true"
    Option         "UseEvents" "true"
    Option         "AccelMethod" "UXA"
    BusID          "PCI:0:2:0"
EndSection

你可能需要跳着功能 BusID 字段的值:

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)

BusID 的值为 0:2:0

不依赖Bumblebee来使用CUDA

关于这个的文档不是很多,但是你不需要Bumblebee来使用CUDA。就算实在optirun无法正常运行的机器上CUDA也可能正常运作。如需在Lenovo IdeaPad Y580(使用GeForce 660M显卡)上让使用CUDA,参见:https://wiki.archlinux.org/index.php/Lenovo_IdeaPad_Y580#NVIDIA_Card。那些步骤很有可能也能在其他机器上使用(除了要在acpi上做点小改动,可能不需要这个)。

疑难问题

注意: 报告 Bug 的位置在 Bumblebee-Project,Bumblebee 的 Wiki 中描述。

[VGL] ERROR: Could not open display :8

There is a known problem with some wine applications that fork and kill the parent process without keeping track of it (for example the free to play online game "Runes of Magic")

A workaround for this problem is:

$ optirun bash
$ optirun wine <windows program>.exe

If using NVIDA drivers a fix for this problem is to edit /etc/bumblebee/xorg.conf.nvidia and change Option "ConnectedMonitor" to "CRT-0".

[ERROR]Cannot access secondary GPU

有时候,运行optirun会返回:

[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 移动到别的地方,重启bumblebeed 守护进程,之后应该正常了。 Credit for this goes to Lekensteyn on #bumblebee at freenode.net

视频撕裂

视频撕裂是 Bumblebee 上一个常见的问题,要修复这个问题,你需要启用 vsync。默认情况下,Intel 显卡已启用此设置,但是还是检查一下 Xorg 的日志,要检查 nvidia 是否启用了此设置,运行:

$ optirun nvidia-settings -c :8 

X Server XVideo Settings -> Sync to VBlank 以及 OpenGL Settings -> Sync to VBlank 应该都是已经启用状态。 Intel 显卡通常有比较少的撕裂,所以应该作为视频回放设备。特别是使用 VA-API 编码视频的时候(比如:mplayer-vaapi 以及 -vsync 参数)。

参考Intel了解如何修复 Intel 显卡的视频撕裂。

如果仍然无效,尝试从桌面环境压缩 compositing。同时可尝试禁用 triple buffering。

重要的链接

Join us at #bumblebee at freenode.net