「Bumblebee」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://www.nvidia.com/」を「https://www.nvidia.com/」に置換) |
Kusanaginoturugi (トーク | 投稿記録) (カテゴリを修正) |
||
(4人の利用者による、間の14版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category:グラフィック]] |
+ | [[Category:グラフィックス]] |
[[Category:X サーバー]] |
[[Category:X サーバー]] |
||
[[en:Bumblebee]] |
[[en:Bumblebee]] |
||
9行目: | 9行目: | ||
[[zh-hans:Bumblebee]] |
[[zh-hans:Bumblebee]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
+ | {{Related|PRIME}} |
||
+ | {{Related|Nvidia-xrun}} |
||
{{Related|NVIDIA Optimus}} |
{{Related|NVIDIA Optimus}} |
||
{{Related|Nouveau}} |
{{Related|Nouveau}} |
||
17行目: | 19行目: | ||
"''Bumblebee は GNU/Linux システムで NVIDIA Optimus が搭載されたノートパソコンを動作させようという試みです。この機能では2枚のグラフィックカードを必要とし、異なる電源消費のプロファイルがレイヤーによって接続され1つのフレームバッファを共有することになります。''" |
"''Bumblebee は GNU/Linux システムで NVIDIA Optimus が搭載されたノートパソコンを動作させようという試みです。この機能では2枚のグラフィックカードを必要とし、異なる電源消費のプロファイルがレイヤーによって接続され1つのフレームバッファを共有することになります。''" |
||
+ | |||
+ | {{Note|1=Bumblebee には重大なパフォーマンスの問題があります[https://github.com/Witko/nvidia-xrun/issues/4#issuecomment-153386837][https://bbs.archlinux.org/viewtopic.php?pid=1822926]。代替ソリューションについては、[[NVIDIA Optimus]] を参照してください。}} |
||
== Bumblebee: Linux 用の Optimus == |
== Bumblebee: Linux 用の Optimus == |
||
33行目: | 37行目: | ||
Bumblebee をインストールする前に BIOS を確認して Optimus を有効にしてください (古いノートパソコンでは "switchable graphics" と呼ばれます)。BIOS によっては Optimus を有効にするオプションが存在しないこともあります。BIOS の設定に "Optimus" や "switchable" という文字がない場合、両方の GPU が有効化されて内蔵グラフィックがプライマリディスプレイになっていることを確認してください。ディスプレイはディスクリートのグラフィックカードではなく、内蔵のグラフィックカードに接続されているはずです。内蔵グラフィックを無効化してディスクリートのグラフィックドライバーをインストールした場合、{{ic|/etc/X11/xorg.conf}} や {{ic|/etc/X11/xorg.conf.d}} 内のディスクリートのグラフィックカードに関連する conf ファイルを削除してください。 |
Bumblebee をインストールする前に BIOS を確認して Optimus を有効にしてください (古いノートパソコンでは "switchable graphics" と呼ばれます)。BIOS によっては Optimus を有効にするオプションが存在しないこともあります。BIOS の設定に "Optimus" や "switchable" という文字がない場合、両方の GPU が有効化されて内蔵グラフィックがプライマリディスプレイになっていることを確認してください。ディスプレイはディスクリートのグラフィックカードではなく、内蔵のグラフィックカードに接続されているはずです。内蔵グラフィックを無効化してディスクリートのグラフィックドライバーをインストールした場合、{{ic|/etc/X11/xorg.conf}} や {{ic|/etc/X11/xorg.conf.d}} 内のディスクリートのグラフィックカードに関連する conf ファイルを削除してください。 |
||
− | + | [[インストール]]: |
|
− | 以下のパッケージをインストールしてください: |
||
* {{Pkg|bumblebee}} - デーモンとクライアントプログラムが入っているメインのパッケージ。 |
* {{Pkg|bumblebee}} - デーモンとクライアントプログラムが入っているメインのパッケージ。 |
||
* {{Pkg|mesa}} - オープンソースの '''OpenGL''' 実装。 |
* {{Pkg|mesa}} - オープンソースの '''OpenGL''' 実装。 |
||
− | * |
+ | * NVIDIA ドライバーの適切なバージョンについては、[[NVIDIA#インストール]]を参照。 |
− | * |
+ | * 必要に応じて、{{Pkg|xf86-video-intel}} - Intel ドライバーをインストール。 |
− | + | 32ビットのアプリケーションを使用する場合、以下のパッケージをインストールしてください ([[Multilib]] を有効にする必要があります): |
|
* {{Pkg|lib32-virtualgl}} - 32ビットアプリケーションのレンダリング・ディスプレイブリッジ。 |
* {{Pkg|lib32-virtualgl}} - 32ビットアプリケーションのレンダリング・ディスプレイブリッジ。 |
||
− | * {{Pkg|lib32-nvidia-utils}} または {{ |
+ | * {{Pkg|lib32-nvidia-utils}} または {{AUR|lib32-nvidia-340xx-utils}} あるいは他 - 64ビットのパッケージと対応するパッケージをインストールしてください。 |
Bumblebee を使用するには、通常ユーザーを {{ic|bumblebee}} グループに追加する必要があります: |
Bumblebee を使用するには、通常ユーザーを {{ic|bumblebee}} グループに追加する必要があります: |
||
51行目: | 54行目: | ||
グループに追加したら {{ic|bumblebeed.service}} を[[有効化]]してください。システムを再起動してから[[#使用方法]]に従います。 |
グループに追加したら {{ic|bumblebeed.service}} を[[有効化]]してください。システムを再起動してから[[#使用方法]]に従います。 |
||
+ | {{Note|{{Pkg|bumblebee}}は、カーネルモジュール{{ic|nvidia-drm}}をブート中にロードさせないように、ブラックリストのファイルをインストールします。Bumblebeeではなく他の方法に変える際、アンインストールする時は覚えておいてください。}} |
||
− | === Intel/Nouveau で Bumblebee をインストール === |
||
− | |||
− | {{Warning|この方法は非推奨になっており、おそらく動作しません [https://github.com/Bumblebee-Project/Bumblebee/issues/773]。代わりに nvidia モジュールを使って下さい。nouveau を使いたい場合は、[[PRIME]] を使用してください。}} |
||
− | |||
− | 以下をインストール: |
||
− | * {{Pkg|xf86-video-nouveau}} - 実験的な 3D アクセラレーションドライバー。 |
||
− | * {{Pkg|mesa}} - Mesa classic DRI + Gallium3D ドライバー + 3D グラフィックライブラリ。 |
||
− | |||
− | {{Note|1=nouveau ドライバーで {{ic|primusrun}} を使用すると、以下のようなエラーが発生します: |
||
− | primus: fatal: failed to load any of the libraries: /usr/$LIB/nvidia/libGL.so.1 |
||
− | /usr/$LIB/nvidia/libGL.so.1: Cannot open shared object file: No such file or directory |
||
− | |||
− | {{ic|/usr/bin/primus}} を編集して {{ic|PRIMUS_libGL}} の後に以下を追加してください: |
||
− | export PRIMUS_libGLa='/usr/$LIB/libGL.so.1' |
||
− | |||
− | 必要であれば、新しいスクリプトを作成してください (例: ''primusnouveau'')。 |
||
− | }} |
||
== 使用方法 == |
== 使用方法 == |
||
108行目: | 95行目: | ||
=== 速度の最適化 === |
=== 速度の最適化 === |
||
+ | スクリーン外のレンダリングの欠点にパフォーマンスの悪化があります。下の表は、最適化を行わないそのままの状態での概要です。[[Lenovo_ThinkPad_T480]]と NVIDIA GTX 1060 6GBのeGPUセットアップにおいて、{{AUR|unigine-heaven}}でのベンチマークを示します(1920x1080、max settings、8xAA)。 |
||
+ | |||
+ | {| class="wikitable" |
||
+ | ! コマンド !! ディスプレイ !! FPS !! スコア !! 最小 FPS !! 最大 FPS |
||
+ | |- |
||
+ | | optirun unigine-heaven || 内部 || 20.7 || 521 || 6.9 || 26.6 |
||
+ | |- |
||
+ | | primusrun unigine-heaven || 内部 || 36.9 || 930 || 15.3 || 44.1 |
||
+ | |- |
||
+ | | unigine-heaven || 内部、[[Nvidia-xrun]] || 51.3 || 1293 || 8.4 || 95.6 |
||
+ | |- |
||
+ | | unigine-heaven || 外部、[[Nvidia-xrun]] || 56.1 || 1414 || 8.4 || 111.9 |
||
+ | |} |
||
==== VirtualGL をブリッジとして使用する ==== |
==== VirtualGL をブリッジとして使用する ==== |
||
178行目: | 178行目: | ||
{{Tip|{{ic|VSYNC}} を無効化したい場合は [[#Primusrun によってマウスが遅延する/垂直同期の無効化]]を見てください。マウスの移動ラグをなくして性能を少しだけ上げることができます。}} |
{{Tip|{{ic|VSYNC}} を無効化したい場合は [[#Primusrun によってマウスが遅延する/垂直同期の無効化]]を見てください。マウスの移動ラグをなくして性能を少しだけ上げることができます。}} |
||
+ | |||
+ | ==== Pvkrun ==== |
||
+ | |||
+ | {{Pkg|primus_vk}}パッケージの{{ic|pvkrun}}は、[[Vulkan]]ベースのアプリケーションの実行を可能にする{{ic|primusrun}}の置き換えです(議論 [[en2:Talk:Bumblebee#Using_primus_vk]] も参照)。{{Pkg|vulkan-tools}}の{{ic|vulkaninfo}}を使って、簡単な確認ができます。 |
||
+ | |||
+ | $ pvkrun vulkaninfo |
||
=== 電源管理 === |
=== 電源管理 === |
||
318行目: | 324行目: | ||
-h ヘルプ}} |
-h ヘルプ}} |
||
− | ターゲットディスプレイをコマンドラインで指定しなかった場合、''intel-virtual-output'' はどれかのローカルディスプレイに接続します [ |
+ | ターゲットディスプレイをコマンドラインで指定しなかった場合、''intel-virtual-output'' はどれかのローカルディスプレイに接続します [https://cgit.freedesktop.org/xorg/driver/xf86-video-intel/tree/tools/]。認識されたディスプレイは xrandr や KDE Display などデスクトップのディスプレイマネージャで管理できます。 |
ツールは bumblebee の起動も行います (Bumblebee はデフォルトインストールで問題ありません)。詳しくは [https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup Bumblebee の wiki ページ] を見てください。 |
ツールは bumblebee の起動も行います (Bumblebee はデフォルトインストールで問題ありません)。詳しくは [https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup Bumblebee の wiki ページ] を見てください。 |
||
412行目: | 418行目: | ||
{{ic|1=rcutree.rcu_idle_gp_delay=1}} を[[ブートローダー]]の設定の[[カーネルパラメータ]]に追加してください (元の [https://bbs.archlinux.org/viewtopic.php?id=169742 BBS の投稿] に設定例が載っています)。 |
{{ic|1=rcutree.rcu_idle_gp_delay=1}} を[[ブートローダー]]の設定の[[カーネルパラメータ]]に追加してください (元の [https://bbs.archlinux.org/viewtopic.php?id=169742 BBS の投稿] に設定例が載っています)。 |
||
+ | |||
+ | ==== Failed to initialize the NVIDIA GPU at PCI:1:0:0 (Bumblebee daemon reported: error: [XORG] (EE) NVIDIA(GPU-0)) ==== |
||
+ | スリープからの復帰時 {{ic|primusrun}}や{{ic|optirun}}コマンドが動かない問題に直面するかもしれません。この問題を解決するために2つ方法があります。システムの再起動か、次のコマンドを実行することです: |
||
+ | |||
+ | # echo 1 > /sys/bus/pci/rescan |
||
+ | |||
+ | そして{{ic|primusrun}}や{{ic|optirun}}が動く事を試して下さい。上記のコマンドで直らなかった場合、次を試して、NVIDIA cardのバスIDを調べて下さい: |
||
+ | |||
+ | $ lspci | grep NVIDIA |
||
+ | |||
+ | 例えば、上記のコマンドによってバスIDが{{ic|01:00.0}}と分かった場合、次のコマンドを試すことが使えます: |
||
+ | |||
+ | # echo 1 > /sys/bus/pci/devices/0000:'''01:00.0'''/remove |
||
+ | # echo 1 > /sys/bus/pci/rescan |
||
==== Could not load GPU driver ==== |
==== Could not load GPU driver ==== |
||
453行目: | 473行目: | ||
$ optirun nvidia-settings -c :8 |
$ optirun nvidia-settings -c :8 |
||
− | {{ic|1=X Server XVideo Settings -> Sync to VBlank}} |
+ | {{ic|1=X Server XVideo Settings -> Sync to VBlank}} と {{ic|1=OpenGL Settings -> Sync to VBlank}} を両方有効化してください。Intel のカードでは一般的にティアリングはおだやかなので、動画再生には、Intel のカードを使ってください。特にビデオデコーディングでは VA-API を使って下さい (例えば {{ic|mplayer-vaapi}} に {{ic|-vsync}} パラメータを渡す)。 |
Intel カードでティアリングを修正する方法は [[Intel Graphics#ティアリングの解消|Intel]] の記事を見て下さい。 |
Intel カードでティアリングを修正する方法は [[Intel Graphics#ティアリングの解消|Intel]] の記事を見て下さい。 |
2024年9月3日 (火) 22:36時点における最新版
Bumblebee の FAQ より:
"Bumblebee は GNU/Linux システムで NVIDIA Optimus が搭載されたノートパソコンを動作させようという試みです。この機能では2枚のグラフィックカードを必要とし、異なる電源消費のプロファイルがレイヤーによって接続され1つのフレームバッファを共有することになります。"
目次
- 1 Bumblebee: Linux 用の Optimus
- 2 インストール
- 3 使用方法
- 4 設定
- 5 Bumblebee を使わないで CUDA
- 6 トラブルシューティング
- 6.1 [VGL] ERROR: Could not open display :8
- 6.2 Xlib: extension "GLX" missing on display ":0.0"
- 6.3 [ERROR]Cannot access secondary GPU: No devices detected
- 6.3.1 NVIDIA(0): Failed to assign any connected display devices to X screen 0
- 6.3.2 Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)
- 6.3.3 Failed to initialize the NVIDIA GPU at PCI:1:0:0 (Bumblebee daemon reported: error: [XORG] (EE) NVIDIA(GPU-0))
- 6.3.4 Could not load GPU driver
- 6.3.5 NOUVEAU(0): [drm] failed to set drm interface version
- 6.4 /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied
- 6.5 ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded: ignored
- 6.6 Fatal IO error 11 (Resource temporarily unavailable) on X server
- 6.7 ティアリング
- 6.8 Bumblebee がソケットに接続できない
- 6.9 ログイン後にコンソールから X.org を実行 (ルートレス X.org)
- 6.10 Primusrun によってマウスが遅延する/垂直同期の無効化
- 6.11 コンポジットウィンドウマネージャにおける Primus の問題
- 6.12 スタンバイから復帰した後の bumblebee の問題
- 6.13 Optirun が動作せず、何も出力しない
- 6.14 カーネル 4.8 で電源管理が機能しない
- 6.15 ロックアップの問題 (lspci がフリーズする)
- 7 参照
Bumblebee: Linux 用の Optimus
Optimus Technology はハードウェアマルチプレクサを使用しない ハイブリッドグラフィック の実装です。内蔵 GPU はディスプレイを管理する一方、ディスクリート GPU は計算量が多いレンダリングを担当して内蔵 GPU に計算結果を転送して表示させます。ノートパソコンがバッテリーで動作しているときは、ディスクリート GPU の電源はオフにされ電力を節約してバッテリーをもたせます。Intel 内蔵グラフィックと nVidia の外付けグラフィックカードが搭載されたデスクトップマシンでも動作させることが可能です。
Bumblebee のソフトウェア実装は2つの部分から構成されています:
- 画面外においてディスクリート GPU 上でプログラムをレンダリングして、内蔵ビデオカードを使ってディスプレイに表示する。このブリッジは VirtualGL または primus (下を参照) によるもので、外付けビデオカードで起動した X サーバーに接続されます。
- 外付けビデオカードが使用されていないときに無効化する (電源管理セクションを見て下さい)。
Bumblebee は Optimus テクノロジの挙動を模倣して、必要なときにレンダリングのためにディスクリート GPU を使用し、使われていないときは電源を落とします。現在のリリースではオンデマンドのレンダリングしかサポートされておらず、負担に応じて外付けビデオカードでプログラムを自動的に起動するのは実装されていません。
インストール
Bumblebee をインストールする前に BIOS を確認して Optimus を有効にしてください (古いノートパソコンでは "switchable graphics" と呼ばれます)。BIOS によっては Optimus を有効にするオプションが存在しないこともあります。BIOS の設定に "Optimus" や "switchable" という文字がない場合、両方の GPU が有効化されて内蔵グラフィックがプライマリディスプレイになっていることを確認してください。ディスプレイはディスクリートのグラフィックカードではなく、内蔵のグラフィックカードに接続されているはずです。内蔵グラフィックを無効化してディスクリートのグラフィックドライバーをインストールした場合、/etc/X11/xorg.conf
や /etc/X11/xorg.conf.d
内のディスクリートのグラフィックカードに関連する conf ファイルを削除してください。
- bumblebee - デーモンとクライアントプログラムが入っているメインのパッケージ。
- mesa - オープンソースの OpenGL 実装。
- NVIDIA ドライバーの適切なバージョンについては、NVIDIA#インストールを参照。
- 必要に応じて、xf86-video-intel - Intel ドライバーをインストール。
32ビットのアプリケーションを使用する場合、以下のパッケージをインストールしてください (Multilib を有効にする必要があります):
- lib32-virtualgl - 32ビットアプリケーションのレンダリング・ディスプレイブリッジ。
- lib32-nvidia-utils または lib32-nvidia-340xx-utilsAUR あるいは他 - 64ビットのパッケージと対応するパッケージをインストールしてください。
Bumblebee を使用するには、通常ユーザーを bumblebee
グループに追加する必要があります:
# gpasswd -a user bumblebee
グループに追加したら bumblebeed.service
を有効化してください。システムを再起動してから#使用方法に従います。
使用方法
テスト
mesa-demos をインストールして、glxgears
を使って Optimus 環境で Bumblebee が動作することをテストしてください:
$ optirun glxgears -info
失敗する場合、次のコマンドを試して下さい (64ビット環境):
$ optirun glxspheres64 -info
もしくは、32ビット環境ならば:
$ optirun glxspheres32
ウィンドウが開いてアニメーションが表示されたら、Bumblebee で Optimus が動作しています。
基本的な使用方法
$ optirun [options] application [application-parameters]
使用例 (Windows アプリケーションを Optimus で起動):
$ optirun wine application.exe
NVIDIA Settings を Optimus で使う場合:
$ optirun -b none nvidia-settings -c :8
optirun
で使えるオプションのリストは、マニュアルページを見てください:
$ man optirun
設定
必要に応じて Bumblebee の挙動は設定をすることが可能です。速度の最適化や電源管理などの調整は /etc/bumblebee/bumblebee.conf
で設定することができます。
速度の最適化
スクリーン外のレンダリングの欠点にパフォーマンスの悪化があります。下の表は、最適化を行わないそのままの状態での概要です。Lenovo_ThinkPad_T480と NVIDIA GTX 1060 6GBのeGPUセットアップにおいて、unigine-heavenAURでのベンチマークを示します(1920x1080、max settings、8xAA)。
コマンド | ディスプレイ | FPS | スコア | 最小 FPS | 最大 FPS |
---|---|---|---|---|---|
optirun unigine-heaven | 内部 | 20.7 | 521 | 6.9 | 26.6 |
primusrun unigine-heaven | 内部 | 36.9 | 930 | 15.3 | 44.1 |
unigine-heaven | 内部、Nvidia-xrun | 51.3 | 1293 | 8.4 | 95.6 |
unigine-heaven | 外部、Nvidia-xrun | 56.1 | 1414 | 8.4 | 111.9 |
VirtualGL をブリッジとして使用する
Bumblebee は VirtualGL によって裏の X サーバーで Optimus NVIDIA カードを使ってフレームをレンダリングし、表の X サーバーに転送を行います。フレームは転送される前に圧縮が施され、それによって帯域を節約して bumblebee の高速化・最適化とすることができます。
単一のアプリケーションで別の圧縮方式を使うには:
$ optirun -c compress-method application
圧縮方式は CPU と GPU のパフォーマンスに影響を与えます。(jpeg
などの) 圧縮方式を使うと CPU の負担は多くなりますが GPU の負担は最小限に抑えられます。逆に非圧縮の方式を使うと GPU の負担が高まり CPU の負担は減ります。
圧縮方式: jpeg
, rgb
, yuv
。
非圧縮方式: proxy
, xv
。
以下は ASUS N550JV ノートパソコンで unigine-heavenAUR ベンチマークアプリを使ってテストしたときの結果です:
コマンド | FPS | スコア | 最小 FPS | 最大 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 |
全てのアプリケーションで共通の圧縮方式を使いたい場合は /etc/bumblebee/bumblebee.conf
で VGLTransport
を compress-method
に設定してください:
/etc/bumblebee/bumblebee.conf
[...] [optirun] VGLTransport=proxy [...]
また、VirtualGL がグラフィックカードからピクセルをリードバックするときの方法を変更することもできます。VGL_READBACK
環境変数を pbo
に設定するとパフォーマンスが上がるかもしれません。以下の2つを比較してみてください:
# PBO should be faster. VGL_READBACK=pbo optirun glxgears # The default value is sync. VGL_READBACK=sync optirun glxgears
Primusrun
(primus パッケージに含まれている) primusrun
は optirun
/virtualgl
よりも省電力で高い性能を発揮するため、人気が出てきています。単体で実行することができますが、optirun
と同じオプションを使うことはできません。primus
を optirun
のブリッジとして設定することで柔軟に動作させることができます。
64ビットのマシンで32ビットのアプリケーションを実行するには lib32-primus をインストールしてください (multilib を有効にする必要があります)。
使用方法 (単体で実行):
$ primusrun glxgears
使用方法 (optirun
のブリッジとして実行):
デフォルト設定ではブリッジとして virtualgl
が設定されます。コマンドラインで上書きするには:
$ optirun -b primus glxgears
もしくは /etc/bumblebee/bumblebee.conf
に Bridge=primus
と記述することで永続的に設定できます。
Pvkrun
primus_vkパッケージのpvkrun
は、Vulkanベースのアプリケーションの実行を可能にするprimusrun
の置き換えです(議論 en2:Talk:Bumblebee#Using_primus_vk も参照)。vulkan-toolsのvulkaninfo
を使って、簡単な確認ができます。
$ pvkrun vulkaninfo
電源管理
電源管理機能の目的は NVIDIA のカードが bumblebee によって使われていないときに電源を切ることです。bbswitch (または bbswitch-dkms) がインストールされていれば、Bumblebee デーモンが起動した時に自動で検知されます。追加の設定は必要ありません。ただし、bbswitch は デスクトップコンピュータでは動作しません 。そのため、デスクトップコンピュータで Bumblebee の電源管理を使うことはできず、bbswitch をインストールする意味もありません (Bumblebee の他の機能はデスクトップコンピュータでも動作します)。
bbswitch を使って NVIDIA カードのデフォルトの電源状態を設定
bbswitch のデフォルトの挙動はカードの電源状態を変更しません。bumblebeed
が起動時にカードを無効化します。したがって以下は bumblebeed を使わずに bbswitch を使用する場合にのみ必要になります。
必要に応じてモジュールオプションの load_state
と unload_state
を設定してください (bbswitch のドキュメントを参照)。
/etc/modprobe.d/bbswitch.conf
options bbswitch load_state=0 unload_state=1
シャットダウン中に NVIDIA カードを有効にする
一部のノートパソコンでは、システムのシャットダウン時にカードの電源がオフになっていた場合、次の起動時に NVIDIA のカードが正しく初期化されないことがあります。/etc/bumblebee/bumblebee.conf
の (デフォルト設定である) TurnCardOffAtExit=false
によって Bumblebee デーモンが停止されるたびにカードが有効になってしまいます (例: シャットダウン時など)。この設定はデーモンが実行中の場合は電源状態に影響を及ぼさないため、optirun
や primusrun
プログラムを全て終了しても GPU は電源オフのままになります。
手動でデーモンを停止したときでも、シャットダウン中に 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
そして nvidia-enable.service
ユニットを有効化してください。
サスペンドから復帰した後に NVIDIA カードを有効にする
サスペンド後に bumblebee デーモンによるグラフィックカードの有効化が失敗することがあります。/etc/bumblebee/bumblebee.conf
でデフォルトの電源管理方法として bbswitch を設定することで解決します:
/etc/bumblebee/bumblebee.conf
[driver-nvidia] PMMethod=bbswitch # ... [driver-nouveau] PMMethod=bbswitch
マルチモニター
Intel のチップに出力が接続されている場合
端子 (DisplayPort/HDMI/VGA) が Intel のチップに接続されている場合、xorg.conf
でマルチモニターをセットアップすることができます。モニターが Intel カードを使うように設定しても、Bumblebee は NVIDIA カードを使用することが可能です。以下は解像度が 1080p の同等な2つのモニターで HDMI 出力を使う設定です。
/etc/X11/xorg.conf
Section "Screen" Identifier "Screen0" Device "intelgpu0" Monitor "Monitor0" DefaultDepth 24 Option "TwinView" "0" SubSection "Display" Depth 24 Modes "1920x1080_60.00" EndSubSection EndSection Section "Screen" Identifier "Screen1" Device "intelgpu1" Monitor "Monitor1" DefaultDepth 24 Option "TwinView" "0" SubSection "Display" Depth 24 Modes "1920x1080_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
おそらく BusID は変更する必要があります (Intel と NVIDIA カード両方)。
$ 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 サーバーを2つ実行する必要があります。1番目のサーバーは Intel ドライバーを使用してノートパソコンのパネルや VGA で接続されたディスプレイに表示します。2番目のサーバーは optirun を使って NVIDIA カードで起動し、デジタルディスプレイに表示します。
intel-virtual-output は xf86-video-intel ドライバーセットに含まれているツールです (v2.99 現在)。コマンドラインでの使用方法は以下のとおりです:
$ intel-virtual-output [OPTION]... [TARGET_DISPLAY]...
-d <source display> 出力先ディスプレイ -f フォアグラウンドで実行 (コンソールからデタッチしてデーモン化してはいけません) -b bumblebee の起動 -a 全てのローカルディスプレイに接続 (:1, :2 など) -S シングルトンの使用を無効化して intel-virtual-output プロセスを新しく起動 -v 全ての詳細な出力を有効化 (-f も有効になります) -V <category> 特定の詳細な出力を有効化 (-f も有効になります) -h ヘルプ
ターゲットディスプレイをコマンドラインで指定しなかった場合、intel-virtual-output はどれかのローカルディスプレイに接続します [3]。認識されたディスプレイは xrandr や KDE Display などデスクトップのディスプレイマネージャで管理できます。
ツールは bumblebee の起動も行います (Bumblebee はデフォルトインストールで問題ありません)。詳しくは Bumblebee の wiki ページ を見てください。
-f
スイッチを使用しないでターミナルから実行すると自動的にデーモン化されます。intel-virtual-output をフォアグラウンドモードで実行する利点として、外部ディスプレイが切断されたときに、intel-virtual-output を終了して nvidia チップを無効化できる点があげられます。ディスプレイをエクスポートして (export DISPLAY=:8
) optirun game_bin
でゲームを起動した場合、カーソルやキーボードが完全に取られることはありません。export DISPLAY=:0
で標準の操作に戻れます。
Bumblebee を使わないで CUDA
bumblebee を使わずに CUDA を使用することができます。必要なことは nvidia カードがオンになっているようにするだけです:
# tee /proc/acpi/bbswitch <<< ON
これで CUDA アプリケーションを起動した時に自動で必要なモジュールが全てロードされます。
CUDA を使った後に nvidia カードをオフにするには以下を実行:
# rmmod nvidia_uvm # rmmod nvidia # tee /proc/acpi/bbswitch <<< OFF
トラブルシューティング
[VGL] ERROR: Could not open display :8
親プロセスをフォークしたり kill したりする Wine アプリケーションで発生する既知の問題です (例えば F2P のオンラインゲーム "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
を編集して ConnectedMonitor
オプションを CRT-0
に設定することで解決します。
Xlib: extension "GLX" missing on display ":0.0"
NVIDIA のウェブサイトから NVIDIA ドライバーをインストールしようとした場合、上手く動作しません。
1. 同じ方法でドライバーをアンインストールしてください:
# ./NVIDIA-Linux-*.run --uninstall
2. NVIDIA によって生成された Xorg 設定ファイルを削除してください:
# rm /etc/X11/xorg.conf
3. 適切な NVIDIA ドライバーを(再)インストールしてください: #Intel/NVIDIA で Bumblebee をインストール
[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
ファイルをどこか別のところへ移動して、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
ドライバーに切り替えてみて下さい。
lspci
の出力を見て、適切な BusID
を使って、どこかで (例えば /etc/X11/xorg.conf.d
のファイル) NVIDIA カードを定義する必要があります:
Section "Device" Identifier "nvidiagpu1" Driver "nvidia" BusID "PCI:0:1:0" EndSection
lspci
の出力は16進数ですが、Xorg では10進数です。つまり、lspci
の出力が 0a:00.0
だった場合 BusID
は PCI:10:0:0
となります。
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"
Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)
rcutree.rcu_idle_gp_delay=1
をブートローダーの設定のカーネルパラメータに追加してください (元の BBS の投稿 に設定例が載っています)。
Failed to initialize the NVIDIA GPU at PCI:1:0:0 (Bumblebee daemon reported: error: [XORG] (EE) NVIDIA(GPU-0))
スリープからの復帰時 primusrun
やoptirun
コマンドが動かない問題に直面するかもしれません。この問題を解決するために2つ方法があります。システムの再起動か、次のコマンドを実行することです:
# echo 1 > /sys/bus/pci/rescan
そしてprimusrun
やoptirun
が動く事を試して下さい。上記のコマンドで直らなかった場合、次を試して、NVIDIA cardのバスIDを調べて下さい:
$ lspci | grep NVIDIA
例えば、上記のコマンドによってバスIDが01:00.0
と分かった場合、次のコマンドを試すことが使えます:
# echo 1 > /sys/bus/pci/devices/0000:01:00.0/remove # echo 1 > /sys/bus/pci/rescan
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 ドライバーが Linux カーネルのバージョンとあっていないのが原因です。NVIDIA ドライバーは最新なのにカーネルのバージョンが古い場合に起こります。システムをアップデートすることで問題は解決します。アップデートで問題が修正されない場合、nvidia-dkms を使ったり ABS で nvidia をコンパイルして、最新のカーネルにあわせて nvidia パッケージを手動でコンパイルする必要があります。
NOUVEAU(0): [drm] failed to set drm interface version
公式の nvidia ドライバーに切り替えて下さい。ここにあるコメントの通り、nouveau ドライバーにはカードによって bumblebee で問題が発生します。
/dev/dri/card0: failed to set DRM interface version 1.4: Permission denied
/etc/bumblebee/xorg.conf.nvidia
に以下の行を追加することで対処できます ([4] を参照):
Section "Screen" Identifier "Default Screen" Device "DiscreteNvidia" EndSection
ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded: ignored
おそらく64ビット環境で bumblebee を使って32ビットアプリケーションを起動するのに必要なパッケージがインストールされていません。インストールの32ビットアプリケーションに関する部分を見て下さい。問題が解決しない場合やアプリケーションが64ビットの場合、primus ブリッジを使ってみてください。
/etc/bumblebee/bumblebee.conf
の KeepUnusedXServer
を false
から true
に変更してください。プログラムはバックグラウンドにフォークされ bumblebee はプログラムについて関知しません。
ティアリング
ティアリングは Bumblebee でよくある問題です。修正するには、垂直同期を有効にする必要があります。Intel のカードではデフォルトで有効になっているはずですが、Xorg のログで確認してみてください。NVIDIA で垂直同期が有効になっているか確認するには、次を実行:
$ optirun nvidia-settings -c :8
X Server XVideo Settings -> Sync to VBlank
と OpenGL Settings -> Sync to VBlank
を両方有効化してください。Intel のカードでは一般的にティアリングはおだやかなので、動画再生には、Intel のカードを使ってください。特にビデオデコーディングでは VA-API を使って下さい (例えば mplayer-vaapi
に -vsync
パラメータを渡す)。
Intel カードでティアリングを修正する方法は Intel の記事を見て下さい。
それでもティアリングが修正されない場合は、デスクトップ環境のコンポジットを無効にしてみてください。また、トリプルバッファも無効にしてみてください。
Bumblebee がソケットに接続できない
以下のような表示がされる場合:
$ 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
)、ソケット /var/run/bumblebeed.socket
を削除してみてください。
ログイン後にコンソールから X.org を実行 (ルートレス X.org)
Xorg#Rootless Xorg (v1.16) を見て下さい。
Primusrun によってマウスが遅延する/垂直同期の無効化
primusrun
では VSYNC
がデフォルトで有効になっているため、マウスの入力が遅れたり性能が少しだけ落ちたりすることがあります。VSYNC
を無効化して primusrun
をテストするには:
$ vblank_mode=0 primusrun glxgears
上記の設定に満足したらエイリアスを作成すると良いでしょう (例: alias primusrun="vblank_mode=0 primusrun"
)。性能の比較:
垂直同期 | FPS | スコア | 最小 FPS | 最大 FPS |
---|---|---|---|---|
無効 | 31.5 | 793 | 22.3 | 54.8 |
有効 | 31.4 | 792 | 18.7 | 54.2 |
コンポジットウィンドウマネージャにおける Primus の問題
コンポジットを有効にして Primus を使った際にフリッカーが発生したり性能が落ち込む場合、primus のディスプレイスレッドとアプリケーションのレンダリングスレッドを同期することで問題が解決する場合があります:
$ PRIMUS_SYNC=1 primusrun ...
上記の設定をすると primus は先にレンダリングされたフレームを表示します。
スタンバイから復帰した後の bumblebee の問題
システムによっては、スタンバイから復帰した後に nvidia モジュールがロードされることがあります。解決方法としては acpi_call や acpi パッケージをインストールしてください。
Optirun が動作せず、何も出力しない
Bumblebee のインストールは正しく行ったのに以下のコマンドを実行しても何も出力されず、glxgears のウィンドウも表示されないという報告があります:
$ optirun glxgears -info
3D アクセラレーションを必要とするプログラムは全てクラッシュします:
$ optirun bash $ glxgears Segmentation fault (core dumped)
これは特定のバージョンの virtualgl のバグです。primus と lib32-primus をインストールして以下のコマンドを使ってください:
$ primusrun glxspheres64 $ optirun -b primus glxspheres64
詳しくは こちらの投稿 を参照。
カーネル 4.8 で電源管理が機能しない
新しいノートパソコンを使っている場合 (2015年以降の BIOS)、Linux 4.8 から刷新された電源管理に対応していないために bbswitch が機能しなくなることがあります (bbswitch issue 140)。dGPU の電源を入れられなくなったり、あるいは電源を切れなくなったりします。
対処方法としてはカーネルパラメータに pcie_port_pm=off
を追加してください。
もしくは、省電力設定を使いたい場合、bbswitch を削除して Nouveau の電源管理を使ってみてください (新しい電源管理をサポートしています)。
ロックアップの問題 (lspci がフリーズする)
GTX 965M などを搭載した新しいノートパソコンにおける問題については NVIDIA Optimus#ロックアップ問題 (lspci がフリーズ) を見てください。
参照
freenode.net の #bumblebee に参加しましょう。