Bumblebee

出自 Arch Linux 中文维基

引自 Bumblebee FAQ:

"Bumblebee 致力於使 NVIDIA Optimus 在 GNU/Linux 系統上可用,實現兩塊不同的供電配置的顯卡同時插入使用,共享同一個 framebuffer。"

Bumblebee: Linux上的 Optimus[編輯 | 編輯原始碼]

Optimus 技術 是不依賴於硬件複雜結構的 交火顯卡 實現。獨立顯卡按需渲染,並傳輸給集成顯卡,集成顯卡則負責顯示功能。當筆記本通過電池供電時,獨立顯卡將關閉,以延長電池壽命。在使用 Intel 集成顯卡和 NVIDIA 獨立顯卡的台式機上也能使用這項技術。

Bumblebee 通過軟件來實現它的功能,包括兩個部分:

  • 利用獨立顯卡渲染程序,並通過集成顯卡將圖像顯示在屏幕上。這是利用 VirtualGL 或 primus (見後面小節)實現的,相當於連接到了一個供獨立顯卡使用的 X 服務器。
  • 獨立顯卡空閒的時候會被禁用。(參見 #電源管理

Bumblebee 試圖模擬 Optimus 技術的行為;當需要的時候,使用獨立顯卡進行渲染,不使用的時候則關閉。當前的版本僅支持按需渲染,高負荷程序自動調用獨立顯卡的功能仍然在開發之中。

安裝[編輯 | 編輯原始碼]

安裝 Bumblebee 之前,檢查你的 BIOS 並儘可能激活 Optimus (老式電腦稱之為"可切換顯卡",BIOS有可能沒有提供此項設置)。如果 "Optimus" 和 "switchable" 都沒有在BIOS裡,就保證兩種GPU都已啟用並且集成顯卡是主要顯示設備。顯示應該連接在主板上的集成顯卡,而不是獨立顯卡。如果集成顯卡之前被禁用而安裝了獨立顯卡的驅動,那就刪除 /etc/X11/xorg.conf 或者有關獨立顯卡的 /etc/X11/xorg.conf.d 中的文件。

安裝:

  • bumblebee - 提供守護進程以及程序的主要安裝包。
  • mesa - 開源的 OpenGL 標準實現。
  • 對於合適的NVIDIA驅動,參看NVIDIA#安裝
  • xf86-video-intel - Intel 驅動(可選)。

對於32位程序 (必須啟用Multilib)在64位機器上的支持,安裝:

要使用 Bumblebee,請確保添加你的用戶到 bumblebee 組:

# gpasswd -a user bumblebee

啟用 bumblebeed.service。重啟系統並參考#用法

用法[編輯 | 編輯原始碼]

測試[編輯 | 編輯原始碼]

安裝 mesa-utils 並使用 glxgears 測試 Bumblebee 是否工作:

$ optirun glxgears -info

如果失敗,嘗試下列命令:

  • 64位系統:
$ optirun glxspheres64
  • 32位系統:
$ optirun glxspheres32

如果一個內有動畫的窗口出現,那麼 Optimus 和 Bumblebee 正在工作。

注意: 如果 glxgears 失敗但 glxspheresXX 有效,替換所有 "glxgears" 為 "glxspheresXX"。

一般用法[編輯 | 編輯原始碼]

$ optirun [options] application [application-parameters]

例如,用 Optimus 啟動 Windows 程序:

$ optirun wine application.exe

另外,用 Optimus 打開 NVIDIA 設置面板:

$ optirun -b none nvidia-settings -c :8
注意: 一個打了補丁的 nvdockAUR 版本可用: nvdock-bumblebeeAUR

更多 optirun 的選項參見手冊頁:

$ man optirun

配置[編輯 | 編輯原始碼]

你可以按需配置 Bumblebee 的行為,可以通過 /etc/bumblebee/bumblebee.conf 來調節諸如優化,電源管理,以及其他任務。

速度優化[編輯 | 編輯原始碼]

使用VirtualGL作為橋接[編輯 | 編輯原始碼]

Bumblebee 使用你的 Optimus NVIDIA 顯卡來渲染一個配置了 VirtualGL 的不可見的 X 服務器,並且將結果傳輸到你當前的 X 服務器上。傳輸之前將壓縮偵,這可以節省帶寬並且能夠用於加速 bumblebee 的優化。

要為單個應用程序指定不同的壓縮方法:

$ optirun -c compress-method application

壓縮方法會影響 GPU性能和GPU使用,壓縮方法會最大限度的使用 CPU,並且儘可能少的使用 GPU;非壓縮的方法最大限度的使用 GPU,而儘可能少的使用 CPU。

壓縮方法

  • jpeg
  • rgb
  • yuv

非壓縮方法

  • proxy
  • xv

以下是用 Asus N550JV 筆記本和測試程序 unigine-heavenAUR的性能測試結果:

Command FPS Score Min FPS Max FPS
optirun unigine-heaven 25.0 630 16.4 36.1
optirun -c jpeg unigine-heaven 24.2 610 9.5 36.8
optirun -c rgb unigine-heaven 25.1 632 16.6 35.5
optirun -c yuv unigine-heaven 24.9 626 16.5 35.8
optirun -c proxy unigine-heaven 25.0 629 16.0 36.1
optirun -c xv unigine-heaven 22.9 577 15.4 32.2
注意: 使用 jpeg 壓縮方法時會有延遲。

要為所有應用程序使用一個標準的壓縮方法, 在 /etc/bumblebee/bumblebee.conf 裡把 VGLTransport 設為 compress-method:

/etc/bumblebee/bumblebee.conf
[...]
[optirun]
VGLTransport=proxy
[...]

你也可考慮 VirtualGL 從你的顯卡讀回像素的方式。設置 VGL_READBACK 環境變量為 pbo 應該能提升性能。比較以下兩者:

# PBO should be faster.
VGL_READBACK=pbo optirun glxgears
# The default value is sync.
VGL_READBACK=sync optirun glxgears
注意: 調整CPU頻率將直接影響渲染性能

Primusrun[編輯 | 編輯原始碼]

注意: 因為合成會損害性能,所以不建議在合成窗口管理器(compositing WM)工作時使用primus。參照 #Primus issues under compositing window managers[損壞的鏈接:無效的章節]

primusrun (來自 primus) 正成為默認選項,因為其耗電量更低並且有時可以提供比 optirun/virtualgl更好的性能。它可以獨立運行,但不能接受 optirun 的選項。將 primus 設置為 optirun 的橋接可提供更過的靈活性。

對於64位系統上32位程序的支持,安裝 lib32-primus(須啟用multilib)。

用法(獨立運行):

$ primusrun glxgears

optirun 的橋接:

默認的配置將 virtualgl 作為橋接。在命令行上將其覆蓋:

$ optirun -b primus glxgears

或者,在 /etc/bumblebee/bumblebee.conf 中設置 Bridge=primus 使其永久生效。

提示:如果要禁用 VSYNC 請參考 #Primusrun mouse delay (disable VSYNC)[損壞的鏈接:無效的章節]。這也可以取消鼠標延遲並輕微提高性能。

電源管理[編輯 | 編輯原始碼]

電源管理的目的是為了自動關閉 bumblebee 不再使用的 NVIDIA 顯卡。 如果已安裝 bbswitch ,Bumblebee 守護進程啟動時會自動檢測到,不需要特別設置。

使用bbswitch時默認的 NVIDIA 電源狀態[編輯 | 編輯原始碼]

bbswitch的默認行為是保持顯卡的電源狀態。 bumblebeed 啟動時並不禁用顯卡,所以你沒有bumblebeed時使用bbswitch需要以下內容。

根據需要設置 load_stateunload_state 模塊選項 (見 bbswitch documentation).

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

關機時啟用NVIDIA顯卡[編輯 | 編輯原始碼]

如果上次關機時關閉了NVIDIA顯卡的電源,NVIDIA顯卡可能會在下一次啟動時初始化異常。一個解決的辦法是在 /etc/bumblebee/bumblebee.conf 裡設置 TurnCardOffAtExit=false, 然而這麼做會導致每次停止bumblebee守護進程時啟用NVIDIA顯卡,就算是手動停止也是一樣。為確保NVIDIA顯卡總是在關機時啟用,添加如下 systemd 服務(如果使用 bbswitch 的話):

/etc/systemd/system/nvidia-enable.service
[Unit]
Description=Enable NVIDIA card
DefaultDependencies=no

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo ON > /proc/acpi/bbswitch'

[Install]
WantedBy=shutdown.target

然後以root權限運行 systemctl enable nvidia-enable.service 以啟用服務。

多顯示器[編輯 | 編輯原始碼]

顯示器連接在 Intel 顯卡上[編輯 | 編輯原始碼]

如果 (DisplayPort/HDMI/VGA) 接口連接到 Intel 顯卡上,你可以通過 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

Section "Device"
    Identifier "nvidiagpu1"
    Driver "nvidia"
    BusID "PCI:0:1:0"
EndSection

你可能需要為Intel和NVIDIA顯卡調整 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

顯示器連接在 NVIDIA 顯卡上[編輯 | 編輯原始碼]

在一些筆記本上,數字視頻輸出(HDMI 或 DisplayPort) 是硬線連接到NVIDIA芯片上的。如果你想同時使用所有的顯示器,你需要開兩個 X Server.第一個使用Intel驅動用於筆記本面板和連接到VGA上的顯示,第二個由optirun啟用NVIDIA顯卡用於數字顯示。

目前網上有一些有關這個的設置教程。其中一個可在Bumblebee的 wiki 頁面找到,另一個詳見下文。

xf86-video-intel-virtual-crtc 和 hybrid-screenclone[編輯 | 編輯原始碼]

本方法使用了一個打了補丁來擴展為含有一個虛擬顯示器的Intel驅動,而hybrid-screenclone程序用於把虛擬顯示器的內容複製到通過optirun運行於NVIDIA顯卡的第二個X Server上的顯示器上。有幸發現 Triple-head monitors on a Thinkpad T520 它是這一切在Ubuntu系統上如何完成的詳細解說。

精簡起見,下文DP指代 Digital Output (DisplayPort).如果筆記本是HDMI接口的話教程也是一樣。

  • 設置系統為只使用 NVIDIA 顯卡,測試 DP/顯示器組合,並生成 xorg.nvidia.conf.這步並非必須但推薦在支持設置為nvidia-only的BIOS上執行。為此,首先卸載 bumblebee 包,並只安裝 NVIDIA 驅動。然後重啟,進入BIOS設置為NVIDIA-only.重啟進入Arch時,把顯示器連接到DP並使用 startx 來檢測這一切是否正常工作。使用 Xorg -configure 來為你的NVIDIA顯卡生成 xorg.conf 文件。這在向下進一步深入時會派上用場。
/etc/bumblebee/bumblebee.conf
KeepUnusedXServer=true
Driver=nvidia
注意: 把 PMMethod 保留不變為 "bumblebee".這與上面鏈接裡教程的做法相反,但在Arch裡需這麼做以使 bbswitch 模塊自動加載。
  • 複製在第一步裡生成的 xorg.conf 到 /etc/X11 (例如 /etc/X11/xorg.nvidia.conf).在 bumblebee.conf 的[driver-nvidia]部分,修改 XorgConfFile 為它的路徑。
  • 測試你的 /etc/X11/xorg.nvidia.conf 是否有效 startx -- -config /etc/X11/xorg.nvidia.conf
  • 為了你的DP顯示器在虛擬顯示器上以正常分辨率出現,你需要編輯 /etc/X11/xorg.nvidia.conf 裡的Monitor section.由於這是附加步驟,你仍需要測試你自動生成的 xorg.conf.當發現 xrandr 顯示的虛擬顯示器分辨率不對後,再回來參考教程裡的這條步驟。
    • 首先要生成 Modeline.你需要工具 amlc,它用於輸入一些基本參數後自動生成 Modeline.
例子: 24" 1920x1080 Monitor
amlc -c 參數啟動工具
Monitor Identifier: Samsung 2494
Aspect Ratio: 2
physical size[cm]: 60
Ideal refresh rate, in Hz: 60
min HSync, kHz: 40
max HSync, kHz: 90
min VSync, Hz: 50
max VSync, Hz: 70
max pixel Clock, MHz: 400

這就是 amlc 生成的 Monitor Section:

Section "Monitor"
    Identifier     "Samsung 2494"
    ModelName      "Generated by Another Modeline Calculator"
    HorizSync      40-90
    VertRefresh    50-70
    DisplaySize    532 299  # Aspect ratio 1.778:1
    # Custom modes
    Modeline "1920x1080" 174.83 1920 2056 2248 2536 1080 1081 1084 1149             # 174.83 MHz,  68.94 kHz,  60.00 Hz
EndSection  # Samsung 2494

xorg.nvidia.conf 裡加入這個 Monitor Section.你還可以編輯你的文件使其包含 ServerLayout, Monitor, Device 和 Screen 部分。以下是我的,僅供參考:

/etc/X11/xorg.nvidia.conf
Section "ServerLayout"
        Identifier     "X.org Nvidia DP"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Monitor"
    Identifier     "Samsung 2494"
    ModelName      "Generated by Another Modeline Calculator"
    HorizSync      40-90
    VertRefresh    50-70
    DisplaySize    532 299  # Aspect ratio 1.778:1
    # Custom modes
    Modeline "1920x1080" 174.83 1920 2056 2248 2536 1080 1081 1084 1149             # 174.83 MHz,  68.94 kHz,  60.00 Hz
EndSection  # Samsung 2494

Section "Device"
        Identifier  "DiscreteNvidia"
        Driver      "nvidia"
        BusID       "PCI:1:0:0"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "DiscreteNvidia"
        Monitor    "Samsung 2494"
        SubSection "Display"
                Viewport   0 0
                Depth     24
        EndSubSection
EndSection
  • 也要把額外顯示器插上之後再 startx.查看 /var/log/Xorg.0.log.確保你的VGA顯示器以正確的模式被檢測出來。你也要看看虛擬輸出出現的模式。
  • 運行 xrandr 然後三個顯示器以及它們支持的模式都會被列出來。
  • 如果對於你的VIRTUAL顯示器沒有符合你原生分辨率的Modelines輸出, 記下輸出的名稱。對我來說是 VIRTUAL1.然後再看看 Xorg.0.log 文件。你應該會看到一條消息: "Output VIRTUAL1 has no monitor section".我們需要在 /etc/X11/xorg.conf.d 裡放入含有合適 Monitor Section 的文件,稍後退出並重啟X.
/etc/X11/xorg.conf.d/20-monitor_samsung.conf
Section "Monitor"
    Identifier     "VIRTUAL1"
    ModelName      "Generated by Another Modeline Calculator"
    HorizSync      40-90
    VertRefresh    50-70
    DisplaySize    532 299  # Aspect ratio 1.778:1
    # Custom modes
    Modeline "1920x1080" 174.83 1920 2056 2248 2536 1080 1081 1084 1149             # 174.83 MHz,  68.94 kHz,  60.00 Hz
EndSection  # Samsung 2494
  • 為開啟NVIDIA顯卡,運行: sudo tee /proc/acpi/bbswitch <<< ON
  • 為 DisplayPort 顯示器開啟另一個X Server: sudo optirun true
  • 檢查位於 /var/log/Xorg.8.log 的第二個 X Server 的日誌。
  • 運行 xrandr 以把 VIRTUAL 顯示器設置成正確的大小和位置,例如: xrandr --output VGA1 --auto --rotate normal --pos 0x0 --output VIRTUAL1 --mode 1920x1080 --right-of VGA1 --output LVDS1 --auto --rotate normal --right-of VIRTUAL1
  • 請注意在 xrandr 輸出列表中的 VIRTUAL 顯示器的位置。計數從零開始,也就是說,如果它給出了第三個顯示器,你會指定 -x 2 作為參數傳遞給 screenclone(註:這可能並不總是正確的。如果你看到內部的筆記本電腦顯示屏克隆在監視器上,只管嘗試 -x 2)。
  • 克隆VIRTUAL顯示器的內容到由Bumblebee創建的,經由NVIDIA的芯片連接到所述的DisplayPort顯示器的X服務器:
screenclone -d :8 -x 2

這就行了,三個顯示器都應該配置好並正常工作。

如 Windows 一般在集顯和獨顯間切換[編輯 | 編輯原始碼]

在 Windows 裡,Optimus 的工作方式是NVIDIA有一個請求 Optimus 的程序的白名單,並且你可以按需添加。當你啟動程序時,會自動選擇使用哪一張顯卡。

為了在Linux裡模仿這一行為,你可以使用 libgl-switcheroo-gitAUR[損壞的鏈接:package not found].安裝後,往 .xprofile 裡添加:

~/.xprofile
mkdir -p /tmp/libgl-switcheroo-$USER/fs
gtkglswitch &
libgl-switcheroo /tmp/libgl-switcheroo-$USER/fs &

為此,你需要往你希望啟動程序的shell裡添加 (我一般就加到 .xprofile 裡)

export LD_LIBRARY_PATH=/tmp/libgl-switcheroo-$USER/fs/\$LIB${LD_LIBRARY_PATH+:}$LD_LIBRARY_PATH

全部完成後,你從該shell運行的每一個程序都會彈出一個GTK+窗口詢問該使用哪一張卡(你也可以往配置文件的白名單裡添加程序)。配置文件位於 $XDG_CONFIG_HOME/libgl-switcheroo.conf, 通常是 ~/.config/libgl-switcheroo.conf

注意: 此工具通過創建FUSE文件系統,然後將其添加到動態庫搜索路徑來生效,啟動軟件時,可能導致速度慢甚至段錯誤。

疑難問題[編輯 | 編輯原始碼]

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

[VGL] ERROR: Could not open display :8[編輯 | 編輯原始碼]

一個關於部分wine程序的已知問題是它會fork並殺死父進程而不是跟蹤它的動態(例如免費網絡遊戲 "Runes of Magic")

這是一個關於 VirtualGL 的已知問題。自從bumblebee 3.1,只要你安裝了它就可以用 Primus 作為渲染橋接:

$ optirun -b primus wine windows program.exe

如果沒用的話,一個替代方案如下:

$ optirun bash
$ optirun wine windows program.exe

如果使用NVIDIA驅動的話,一個該問題的解決方案是修改 /etc/bumblebee/xorg.conf.nvidia 把 Option ConnectedMonitor 改為 CRT-0.

Xlib: extension "GLX" missing on display ":0.0"[編輯 | 編輯原始碼]

從官網下載安裝的NVIDIA驅動不會工作。

1. 卸載驅動:

# ./NVIDIA-Linux-*.run --uninstall

2. 刪除生成的配置文件:

# rm /etc/X11/xorg.conf

3. 重新從源裡安裝: #安裝

[ERROR]Cannot access secondary GPU: No devices detected[編輯 | 編輯原始碼]

某些情況下,運行 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 移動到別的地方, restart bumblebeed 守護進程,這樣應該有效。如果你要改變一些 Intel 模塊的特性,把 /etc/X11/xorg.conf.d/20-intel.conf 合併到 /etc/X11/xorg.conf 中。

也需要把 /etc/X11/xorg.conf.d/10-monitor.conf 裡的driver行注釋掉。

如果你正在用 nouveau 驅動你應該試着換成 nvidia 驅動。

你需要把 NVIDIA 顯卡定位到別的地方 (例如文件 /etc/X11/xorg.conf.d),使用根據 lspci 的輸出確定的 BusID:

Section "Device"
    Identifier "nvidiagpu1"
    Driver "nvidia"
    BusID "PCI:0:1:0"
EndSection

NVIDIA(0): Failed to assign any connected display devices to X screen 0[編輯 | 編輯原始碼]

如果終端輸出如下:

[ERROR]Cannot access secondary GPU - error: [XORG] (EE) NVIDIA(0): Failed to assign any connected display devices to X screen 0
[ERROR]Aborting because fallback start is disabled.

你要修改 /etc/bumblebee/xorg.conf.nvidia 裡的這行:

Option "ConnectedMonitor" "DFP"

為:

Option "ConnectedMonitor" "CRT"

systemd-logind: failed to get session: PID XXX does not belong to any known session[編輯 | 編輯原始碼]

如果終端輸出如下 (PID會有所不同):

[ERROR]Cannot access secondary GPU - error: [XORG] (EE) systemd-logind: failed to get session: PID 753 does not belong to any known session
[ERROR]Aborting because fallback start is disabled.

在 /etc/mkinitcpio.conf 裡改變 MODULES 為:

MODULES="i915 bbswitch"

或:

MODULES="i915 nouveau bbswitch"

然後運行:

# mkinitcpio -p linux

每次內核更新之後你都要執行一次這個命令。

另外,如下 內核參數需要加到 boot loader配置中。

Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)[編輯 | 編輯原始碼]

rcutree.rcu_idle_gp_delay=1 加到boot loader 配置的內核參數中。 (參考設置另見BBS post )

Could not load GPU driver[編輯 | 編輯原始碼]

如果終端輸出如下:

[ERROR]Cannot access secondary GPU - error: Could not load GPU driver

並且嘗試加載 nvidia 模塊時得到:

modprobe nvidia
modprobe: ERROR: could not insert 'nvidia': Exec format error

你需要針對你的內核手動編譯 nvidia 包,例如 nvidia-dkms 或從 ABS nvidia 編譯。

NOUVEAU(0): [drm] failed to set drm interface version[編輯 | 編輯原始碼]

考慮切換到 nvidia 官方驅動。在的評論說 nouveau 驅動在某些顯卡和bumblebee上有問題。

[ERROR]Cannot access secondary GPU - error: X did not start properly[編輯 | 編輯原始碼]

/etc/bumblebee/xorg.conf.nvidia"AutoAddDevices" 設置為 "true"(看 這裡):

Section "ServerLayout"
    Identifier  "Layout0"
    Option      "AutoAddDevices" "true"
    Option      "AutoAddGPU" "false"
EndSection

/dev/dri/card0: failed to set DRM interface version 1.4: Permission denied[編輯 | 編輯原始碼]

這可以通過在 /etc/bumblebee/xorg.conf.nvidia 裡添加幾行解決(見 這裡):

Section "Screen"
    Identifier "Default Screen"
    Device "DiscreteNvidia"
EndSection

ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded: ignored[編輯 | 編輯原始碼]

你也許是想在64位系統上用bumblebee運行32位程序。見 "Note" box Installation[損壞的鏈接:無效的章節].

Fatal IO error 11 (Resource temporarily unavailable) on X server[編輯 | 編輯原始碼]

/etc/bumblebee/bumblebee.conf 裡的 KeepUnusedXServerfalse 改為 true.這是因為你的程序fork到了後台並且 bumblebee 對此一無所知。

視頻撕裂[編輯 | 編輯原始碼]

視頻撕裂是 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.

Bumblebee cannot connect to socket[編輯 | 編輯原始碼]

你可能會得到這樣的輸出:

$ optirun glxspheres64

或 (32位):

$ optirun glxspheres32
[ 1648.179533] [ERROR]You've no permission to communicate with the Bumblebee daemon. Try adding yourself to the 'bumblebee' group
[ 1648.179628] [ERROR]Could not connect to bumblebee daemon - is it running?

如果你已在 bumblebee 群組中 ($ groups | grep bumblebee),嘗試 removing the socket /var/run/bumblebeed.socket.

Running X.org from console after login (rootless X.org)[編輯 | 編輯原始碼]

Xorg#Rootless Xorg (v1.16)[損壞的鏈接:無效的章節].

Primusrun 鼠標延遲/禁用 VSYNC[編輯 | 編輯原始碼]

對於 primusrun, VSYNC 默認啟用,因此會導致鼠標輸入延遲甚至輕微降低性能。不用 VSYNC 來測試 primusrun:

$ vblank_mode=0 primusrun glxgears

如果你想使用它替代 primusrun,新建文件:

/usr/bin/optiprime
#!/bin/sh
vblank_mode=0 primusrun "$@"

讓它可執行:

# chmod +x /usr/bin/optiprime

用法:

$ optiprime glxgears

總之它不會有重大性能提升,但會解決上述的鼠標延遲。

Command FPS Score Min FPS Max FPS
optiprime unigine-heaven 31.5 793 22.3 54.8
primusrun unigine-heaven 31.4 792 18.7 54.2

Tested with Asus N550JV laptop and benchmark app unigine-heavenAUR.

另見[編輯 | 編輯原始碼]