「Bumblebee」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(1版 をインポートしました)
(→‎インストール: 記事を更新)
 
(5人の利用者による、間の20版が非表示)
7行目: 7行目:
 
[[ru:Bumblebee]]
 
[[ru:Bumblebee]]
 
[[tr:Bumblebee]]
 
[[tr:Bumblebee]]
[[zh-CN:Bumblebee]]
+
[[zh-hans:Bumblebee]]
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|PRIME}}
  +
{{Related|Nvidia-xrun}}
 
{{Related|NVIDIA Optimus}}
 
{{Related|NVIDIA Optimus}}
{{Related2|Nouveau|Nouveau}}
+
{{Related|Nouveau}}
{{Related2|NVIDIA|NVIDIA}}
+
{{Related|NVIDIA}}
{{Related2|Intel Graphics|Intel Graphics}}
+
{{Related|Intel Graphics}}
 
{{Related articles end}}
 
{{Related articles end}}
 
Bumblebee の [https://github.com/Bumblebee-Project/Bumblebee/wiki/FAQ FAQ] より:
 
Bumblebee の [https://github.com/Bumblebee-Project/Bumblebee/wiki/FAQ FAQ] より:
   
 
"''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 ==
   
[http://www.nvidia.com/object/optimus_technology.html Optimus Technology] はハードウェアマルチプレクサを使用しない ''[http://hybrid-graphics-linux.tuxfamily.org/index.php?title=Hybrid_graphics ハイブリッドグラフィック]'' の実装です。内蔵 GPU はディスプレイを管理する一方、ディスクリート GPU は計算量が多いレンダリングを担当して内蔵 GPU に計算結果を転送して表示させます。ノートパソコンがバッテリーで動作しているときは、ディスクリート GPU の電源はオフにされ電力を節約してバッテリーをもたせます。Intel 内蔵グラフィックと nVidia の外付けグラフィックカードが搭載されたデスクトップマシンでも動作させることが可能です。
+
[https://www.nvidia.com/object/optimus_technology.html Optimus Technology] はハードウェアマルチプレクサを使用しない ''[http://hybrid-graphics-linux.tuxfamily.org/index.php?title=Hybrid_graphics ハイブリッドグラフィック]'' の実装です。内蔵 GPU はディスプレイを管理する一方、ディスクリート GPU は計算量が多いレンダリングを担当して内蔵 GPU に計算結果を転送して表示させます。ノートパソコンがバッテリーで動作しているときは、ディスクリート GPU の電源はオフにされ電力を節約してバッテリーをもたせます。Intel 内蔵グラフィックと nVidia の外付けグラフィックカードが搭載されたデスクトップマシンでも動作させることが可能です。
   
 
Bumblebee のソフトウェア実装は2つの部分から構成されています:
 
Bumblebee のソフトウェア実装は2つの部分から構成されています:
31行目: 35行目:
 
== インストール ==
 
== インストール ==
   
Bumblebee をインストールする前に BIOS を確認して Optimus を有効にしてください (古いノートパソコンでは "switchable graphics" と呼ばれます)。BIOS によっては Optimus を有効にするオプションが存在しないこともあります。また、内蔵カード [[Intel Graphics|Intel ドライバー]]をインストールしてください。
+
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|bbswitch}} (または {{AUR|bbswitch-dkms}}) - NVIDIA カードを無効化して電力を抑えたいときに推奨。
 
  +
* NVIDIA ドライバーの適切なバージョンについては、[[NVIDIA#インストール]]を参照。
* (任意) 電力の節約以上のことがしたい場合、単体の NVIDIA カードでレンダリングするには以下も必要になります:
 
  +
* 必要に応じて、{{Pkg|xf86-video-intel}} - Intel ドライバーをインストール。
** NVIDIA カードのドライバー。オープンソースの [[nouveau|nouveau]] ドライバーまたはクローズドソースの [[NVIDIA|NVIDIA]] ドライバー。サブセクションを参照してください。
 
** レンダー/ディスプレイブリッジ。現在 {{Pkg|primus}} (もしくは {{AUR|primus-git}}) と {{Pkg|virtualgl}} の2つのパッケージが利用可能です。必要なのはどちらか片方だけですが、両方インストールしても問題ありません。
 
* (任意) テストプログラムの glxgears を実行したいときは、mesa-demos パッケージをインストールしてください。
 
* (任意) テストプログラムの glxspheres や glxspheres64 を実行したいときは、virtualgl パッケージをインストールしてください。
 
   
  +
32ビットのアプリケーションを使用する場合、以下のパッケージをインストールしてください ([[Multilib]] を有効にする必要があります):
{{Note|64ビット環境で32ビットのアプリケーションを実行したいならば、プログラムにあわせて適当な lib32-* ライブラリをインストールしなくてはなりません。さらにライブラリの他に、使用するレンダーブリッジによって、{{Pkg|lib32-virtualgl}} か {{Pkg|lib32-primus}} のどちらかをインストールする必要があります。Primus レンダーブリッジを使用すると決めたときは {{ic|optirun}} の代わりに {{ic|primusrun}} を実行するようにしてください。}}
 
  +
* {{Pkg|lib32-virtualgl}} - 32ビットアプリケーションのレンダリング・ディスプレイブリッジ。
  +
* {{Pkg|lib32-nvidia-utils}} または {{AUR|lib32-nvidia-340xx-utils}} あるいは他 - 64ビットのパッケージと対応するパッケージをインストールしてください。
   
  +
Bumblebee を使用するには、通常ユーザーを {{ic|bumblebee}} グループに追加する必要があります:
=== Intel/NVIDIA で Bumblebee をインストール ===
 
   
  +
# gpasswd -a ''user'' bumblebee
{{Pkg|mesa-dri}}, {{Pkg|xf86-video-intel}}, {{Pkg|bumblebee}}, {{Pkg|nvidia}} をインストールしてください。既に {{Pkg|mesa-dri}} と {{Pkg|xf86-video-intel}} をインストールしている場合でも、{{Pkg|mesa-dri}} と {{Pkg|nvidia}} の依存関係の衝突を避けるために全て一緒に再インストールする必要があります。
 
   
  +
グループに追加したら {{ic|bumblebeed.service}} を[[有効化]]してください。システムを再起動してから[[#使用方法]]に従います。
64ビット環境で32ビットのアプリケーションを実行 (wine でゲームを動かすなど) したいときは {{Pkg|lib32-nvidia-utils}} も必要です ({{ic|primusrun}} を使用する場合は {{Pkg|lib32-mesa-dri}} も)。
 
   
  +
{{Note|{{Pkg|bumblebee}}は、カーネルモジュール{{ic|nvidia-drm}}をブート中にロードさせないように、ブラックリストのファイルをインストールします。Bumblebeeではなく他の方法に変える際、アンインストールする時は覚えておいてください。}}
{{Warning|{{pkg|lib32-nvidia-libgl}} はインストールしないで下さい。Bumblebee はこのパッケージがなくても適切な lib32 の NVIDIA ライブラリを見つけます。}}
 
 
=== Intel/Nouveau で Bumblebee をインストール ===
 
 
{{Warning|この方法は非推奨になっており、おそらく動作しません。代わりに nvidia モジュールを使って下さい。nouveau を使いたい場合は、[[PRIME]] を使用してください。}}
 
 
以下をインストール:
 
* {{Pkg|xf86-video-nouveau}} - 実験的な 3D アクセラレーションドライバー。
 
* {{Pkg|nouveau-dri}} - Mesa classic DRI + Gallium3D ドライバー。
 
* {{Pkg|mesa}} - Mesa 3D グラフィックライブラリ。
 
 
== Bumblebee の起動 ==
 
 
Bumblebee を使うにはユーザーを bumblebee グループに追加する必要があります:
 
 
# gpasswd -a $USER bumblebee
 
 
{{ic|$USER}} は追加するユーザーのログイン名に置き換えて下さい。一度ログオフしてからログインしなおすことでグループの変更が適用されます。
 
 
{{Tip|ブート時に '''bumblebee''' を起動したい場合は、[[systemd|systemd]] サービスの '''bumblebeed''' を有効化してください。}}
 
 
これで完了です。システムを再起動したらシェルプログラム {{ic|[[#使用方法|optirun]]}} を使って Optimus NVIDIA レンダリングが行えます。
 
 
NVIDIA カードを無効化したいだけなら、後は {{ic|bbswitch}} をインストールするだけで必要なことは終わりです。デフォルトで、bumblebeed デーモンは起動した時にカードの電源を切るように bbswitch に命令します。下の[[#電源管理|電源管理]]セクションを参照してください。
 
   
 
== 使用方法 ==
 
== 使用方法 ==
   
  +
=== テスト ===
Optimus NVIDIA カードでアプリケーションを動かしたいときは Bumblebee に入っているコマンドラインプログラム {{ic|optirun}} が良き相棒となってくれるでしょう。
 
   
Optimus テムで Bumblebee が動作するテストしてみてください:
+
{{Pkg|mesa-demos}} をイントールして、{{ic|glxgears}} を使って Optimus 環境で Bumblebee が動作することをテストしてください:
 
$ optirun glxgears -info
 
$ optirun glxgears -info
 
成功だったらターミナルに NVIDIA について何か Optimus with Bumblebee is working! のような表示がされます。
 
   
 
失敗する場合、次のコマンドを試して下さい (64ビット環境):
 
失敗する場合、次のコマンドを試して下さい (64ビット環境):
 
$ optirun glxspheres64 -info
 
$ optirun glxspheres64 -info
 
もしくは、32ビット環境ならば:
 
もしくは、32ビット環境ならば:
$ optirun glxspheres -info
+
$ optirun glxspheres32
   
  +
ウィンドウが開いてアニメーションが表示されたら、Bumblebee で Optimus が動作しています。
基本的な使用方法:
 
   
  +
{{Note|{{ic|glxgears}} が動作しないのに {{ic|glxspheres''XX''}} は動作する場合、{{ic|glxgears}} を全て {{ic|glxspheres''XX''}} に置き換えてください。}}
$ optirun [options] ''application'' [application-parameters]
 
   
  +
=== 基本的な使用方法 ===
使用例:
 
   
  +
$ optirun [options] ''application'' [application-parameters]
Windows アプリケーションを Optimus で起動:
 
   
  +
使用例 (Windows アプリケーションを Optimus で起動):
$ optirun wine ''windows application''.exe
 
   
  +
$ optirun wine application.exe
NVIDIA Settings を Optimus で使う:
 
  +
  +
NVIDIA Settings を Optimus で使う場合:
   
 
$ optirun -b none nvidia-settings -c :8
 
$ optirun -b none nvidia-settings -c :8
   
  +
{{Note|{{AUR|nvdock-bumblebee}} パッケージをインストールすることで {{AUR|nvdock}} にパッチがあたったバージョンを使うことができます。}}
{{ic|optirun}} で使えるオプションのリストはマニュアルページを見て下さい。
 
   
  +
{{ic|optirun}} で使えるオプションのリストは、マニュアルページを見てください:
パフォーマンスで優れる新しいプログラム primus がすぐにデフォルトの選択になるでしょう。今のところは別個にプログラムを実行する必要がありますが ({{ic|optirun}} とは違ってオプションを指定できません)、将来的には optirun によって実行されるようになる予定です。使用方法:
 
  +
$ primusrun glxgears
 
  +
$ man optirun
   
 
== 設定 ==
 
== 設定 ==
113行目: 94行目:
 
必要に応じて Bumblebee の挙動は設定をすることが可能です。速度の最適化や電源管理などの調整は {{ic|/etc/bumblebee/bumblebee.conf}} で設定することができます。
 
必要に応じて Bumblebee の挙動は設定をすることが可能です。速度の最適化や電源管理などの調整は {{ic|/etc/bumblebee/bumblebee.conf}} で設定することができます。
   
=== VirtualGL をブリッジとして使って速度最適化 ===
+
=== 速度最適化 ===
  +
スクリーン外のレンダリングの欠点にパフォーマンスの悪化があります。下の表は、最適化を行わないそのままの状態での概要です。[[Lenovo_ThinkPad_T480]]と NVIDIA GTX 1060 6GBのeGPUセットアップにおいて、{{AUR|unigine-heaven}}でのベンチマークを示します(1920x1080、max settings、8xAA)。
   
  +
{| class="wikitable"
Bumblebee は VirtualGL によって裏の X サーバーで Optimus NVIDIA カードを使ってフレームをレンダリングし、表の X サーバーに転送を行います。
 
  +
! コマンド !! ディスプレイ !! 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 の高速化・最適化とすることができます:
 
  +
  +
Bumblebee は VirtualGL によって裏の X サーバーで Optimus NVIDIA カードを使ってフレームをレンダリングし、表の X サーバーに転送を行います。フレームは転送される前に圧縮が施され、それによって帯域を節約して bumblebee の高速化・最適化とすることができます。
   
 
単一のアプリケーションで別の圧縮方式を使うには:
 
単一のアプリケーションで別の圧縮方式を使うには:
123行目: 117行目:
 
$ optirun -c ''compress-method'' application
 
$ optirun -c ''compress-method'' application
   
圧縮方式は CPU と GPU の使用におけるパフォーマンスに影響を与えます。({{ic|jpeg}} などの) 圧縮方式を使うと CPU の負担は多くなりますが GPU の負担は最小限に抑えられます。逆に非圧縮の方式を使うと GPU の負担が高まり CPU の負担は減ります。
+
圧縮方式は CPU と GPU のパフォーマンスに影響を与えます。({{ic|jpeg}} などの) 圧縮方式を使うと CPU の負担は多くなりますが GPU の負担は最小限に抑えられます。逆に非圧縮の方式を使うと GPU の負担が高まり CPU の負担は減ります。
   
 
圧縮方式: {{ic|jpeg}}, {{ic|rgb}}, {{ic|yuv}}。
 
圧縮方式: {{ic|jpeg}}, {{ic|rgb}}, {{ic|yuv}}。
   
 
非圧縮方式: {{ic|proxy}}, {{ic|xv}}。
 
非圧縮方式: {{ic|proxy}}, {{ic|xv}}。
  +
  +
以下は [[ASUS N550JV]] ノートパソコンで {{AUR|unigine-heaven}} ベンチマークアプリを使ってテストしたときの結果です:
  +
  +
{| class="wikitable"
  +
! コマンド !! 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
  +
|}
  +
{{Note|{{ic|jpeg}} 圧縮方式を使用するとラグが発生することがあります。}}
   
 
全てのアプリケーションで共通の圧縮方式を使いたい場合は {{ic|/etc/bumblebee/bumblebee.conf}} で {{ic|VGLTransport}} を {{ic|''compress-method''}} に設定してください:
 
全てのアプリケーションで共通の圧縮方式を使いたい場合は {{ic|/etc/bumblebee/bumblebee.conf}} で {{ic|VGLTransport}} を {{ic|''compress-method''}} に設定してください:
141行目: 154行目:
   
 
# PBO should be faster.
 
# PBO should be faster.
VGL_READBACK=pbo optirun glxspheres64
+
VGL_READBACK=pbo optirun glxgears
 
# The default value is sync.
 
# The default value is sync.
VGL_READBACK=sync optirun glxspheres64
+
VGL_READBACK=sync optirun glxgears
   
  +
{{Note|CPU の周波数スケーリングはレンダリングパフォーマンスに直接影響を与えます。}}
もしくは、32ビット環境の場合:
 
   
  +
==== Primusrun ====
# PBO should be faster.
 
VGL_READBACK=pbo optirun glxspheres
 
# The default value is sync.
 
VGL_READBACK=sync optirun glxspheres
 
   
  +
{{Note|コンポジットは性能に影響を与えるので、コンポジット WM で primus を実行することは推奨されません。[[#コンポジットウィンドウマネージャにおける Primus の問題]]を参照。}}
{{Note|CPU の周波数スケーリングはレンダリングパフォーマンスに直接影響を与えます。}}
 
  +
({{Pkg|primus}} パッケージに含まれている) {{ic|primusrun}} は {{ic|optirun}}/{{ic|virtualgl}} よりも省電力で高い性能を発揮するため、人気が出てきています。単体で実行することができますが、{{ic|optirun}} と同じオプションを使うことはできません。{{ic|primus}} を {{ic|optirun}} のブリッジとして設定することで柔軟に動作させることができます。
  +
  +
64ビットのマシンで32ビットのアプリケーションを実行するには {{Pkg|lib32-primus}} をインストールしてください ([[multilib]] を有効にする必要があります)。
  +
  +
使用方法 (単体で実行):
  +
$ primusrun glxgears
  +
  +
使用方法 ({{ic|optirun}} のブリッジとして実行):
  +
  +
デフォルト設定ではブリッジとして {{ic|virtualgl}} が設定されます。コマンドラインで上書きするには:
  +
$ optirun -b primus glxgears
  +
  +
もしくは {{ic|/etc/bumblebee/bumblebee.conf}} に {{ic|1=Bridge=primus}} と記述することで永続的に設定できます。
  +
  +
{{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
   
 
=== 電源管理 ===
 
=== 電源管理 ===
   
電源管理機能の目的は NVIDIA のカードが bumblebee によって使われていないときに電源を切ることです。bbswitch がインストールされていれば、Bumblebee デーモンが起動した時に自動で検知されます。追加の設定は必要ありません。
+
電源管理機能の目的は NVIDIA のカードが bumblebee によって使われていないときに電源を切ることです。{{Pkg|bbswitch}} (または {{Pkg|bbswitch-dkms}}) がインストールされていれば、Bumblebee デーモンが起動した時に自動で検知されます。追加の設定は必要ありません。ただし、{{Pkg|bbswitch}} は [https://bugs.launchpad.net/ubuntu/+source/bbswitch/+bug/1338404/comments/6 デスクトップコンピュータでは動作しません] 。そのため、デスクトップコンピュータで Bumblebee の電源管理を使うことはできず、{{Pkg|bbswitch}} をインストールする意味もありません (Bumblebee の他の機能はデスクトップコンピュータでも動作します)
   
 
==== bbswitch を使って NVIDIA カードのデフォルトの電源状態を設定 ====
 
==== bbswitch を使って NVIDIA カードのデフォルトの電源状態を設定 ====
168行目: 199行目:
   
 
==== シャットダウン中に NVIDIA カードを有効にする ====
 
==== シャットダウン中に NVIDIA カードを有効にする ====
システムのシャットダウン時にカードの電源がオフになっていた場合、次の起動時に NVIDIA のカード正しく初期化されないことがあります。一つの手として {{ic|/etc/bumblebee/bumblebee.conf}} {{ic|TurnCardOffAtExit=false}} を設定することができますが、これでは Bumblebee デーモンが停止されるたびにカードが有効になってしまいます (たとえ手動で停止されたとしても)。シャットダウン中に NVIDIA カードの電源が入っているようするには、以下の [[systemd|systemd]] サービス追加してください ({{pkg|bbswitch}} を使用している場合):
+
一部のノートパソコンでは、システムのシャットダウン時にカードの電源がオフになっていた場合、次の起動時に NVIDIA のカード正しく初期化されないことがあります。{{ic|/etc/bumblebee/bumblebee.conf}} の (デフォルト設定である) {{ic|TurnCardOffAtExit=false}} によって Bumblebee デーモンが停止されるたびにカードが有効になってしまいます (例: シャットダウン時など)。この設定はデーモンが実行中の場合は電源状態影響及ぼため、{{ic|optirun}} や {{ic|primusrun}} プログラム全て終了しても GPU は電源オフのままになります。
  +
  +
手動でデーモンを停止したときでも、シャットダウン中に NVIDIA カードの電源が入っているようにするには、以下の [[systemd]] サービスを追加してください ({{pkg|bbswitch}} を使用している場合):
   
 
{{hc|/etc/systemd/system/nvidia-enable.service|2=
 
{{hc|/etc/systemd/system/nvidia-enable.service|2=
183行目: 216行目:
 
}}
 
}}
   
そして root で {{ic|systemctl enable nvidia-enable.service}} を実行してサービスを有効してください。
+
そして {{ic|nvidia-enable.service}} ユニット[[有効化]]してください。
  +
  +
==== サスペンドから復帰した後に NVIDIA カードを有効にする ====
  +
サスペンド後に bumblebee デーモンによるグラフィックカードの有効化が失敗することがあります。{{ic|/etc/bumblebee/bumblebee.conf}} でデフォルトの電源管理方法として {{Pkg|bbswitch}} を設定することで解決します:
  +
  +
{{hc|/etc/bumblebee/bumblebee.conf|2=
  +
[driver-nvidia]
  +
PMMethod=bbswitch
  +
  +
# ...
  +
  +
[driver-nouveau]
  +
PMMethod=bbswitch
  +
}}
  +
  +
{{Note|上記の方法はシステムを再起動しないと反映されません。bumblebee サービスを再起動するだけでは不十分です。}}
   
 
=== マルチモニター ===
 
=== マルチモニター ===
200行目: 248行目:
 
SubSection "Display"
 
SubSection "Display"
 
Depth 24
 
Depth 24
Modes "1980x1080_60.00"
+
Modes "1920x1080_60.00"
 
EndSubSection
 
EndSubSection
 
EndSection
 
EndSection
212行目: 260行目:
 
SubSection "Display"
 
SubSection "Display"
 
Depth 24
 
Depth 24
Modes "1980x1080_60.00"
+
Modes "1920x1080_60.00"
 
EndSubSection
 
EndSubSection
 
EndSection
 
EndSection
262行目: 310行目:
 
==== NVIDIA のチップに出力が接続されている場合 ====
 
==== NVIDIA のチップに出力が接続されている場合 ====
   
  +
ノートパソコンによっては、デジタルビデオ出力 (HDMI や DisplayPort) が NVIDIA のチップに接続されている場合があります。そのような環境で全てのディスプレイを使用するには、X サーバーを2つ実行する必要があります。1番目のサーバーは Intel ドライバーを使用してノートパソコンのパネルや VGA で接続されたディスプレイに表示します。2番目のサーバーは optirun を使って NVIDIA カードで起動し、デジタルディスプレイに表示します。
On some notebooks, the digital Video Output (HDMI or DisplayPort) is hardwired to the NVIDIA chip. If you want to use all the displays on such a system simultaniously, you have to run 2 X Servers. The first will be using the Intel driver for the notebooks panel and a display connected on VGA. The second will be started through optirun on the NVIDIA card, and drives the digital display.
 
   
  +
''intel-virtual-output'' は {{Pkg|xf86-video-intel}} ドライバーセットに含まれているツールです (v2.99 現在)。コマンドラインでの使用方法は以下のとおりです:
There are currently several instructions on the web how such a setup can be made to work. One can be found on the bumblebee [https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup wiki page]. Another approach is described below.
 
   
===== xf86-video-intel-virtual-crtc と hybrid-screenclone =====
+
{{hc|$ 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'' はどれかのローカルディスプレイに接続します [https://cgit.freedesktop.org/xorg/driver/xf86-video-intel/tree/tools/]。認識されたディスプレイは xrandr や KDE Display などデスクトップのディスプレイマネージャで管理できます。
This method uses a patched Intel driver, which is extended to have a VIRTUAL Display, and the program hybrid-screenclone which is used to copy the display over from the virtual display to a second X Server which is running on the NVIDIA card using Optirun. Credit goes to [http://judsonsnotes.com/notes/index.php?option=com_content&view=article&id=673:triple-head-monitors-on-thinkpad-t520&catid=37:tech-notes&Itemid=59 Triple-head monitors on a Thinkpad T520] {{Dead link|2014|10|03}} which has a detailed explanation on how this is done on a Ubuntu system.
 
   
  +
ツールは bumblebee の起動も行います (Bumblebee はデフォルトインストールで問題ありません)。詳しくは [https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup Bumblebee の wiki ページ] を見てください。
For simplicity, DP is used below to refer to the Digital Output (DisplayPort). The instructions should be the same if the notebook has a HDMI port instead.
 
   
  +
{{Note|デバイスの解像度が正しく認識されない場合 {{ic|/etc/bumblebee/xorg.conf.nvidia}} の中の {{ic|UseEDID}} と {{ic|Option "AutoAddDevices" "false"}} を {{ic|"true"}} に変更してください。NVIDIA GPU に接続されたディスプレイを使用するには {{ic|Option "UseDisplayDevices" "none"}} という行のコメントアウトも必要です。}}
* Set system to use NVIDIA card exclusively, test DP/Monitor combination and generate xorg.nvidia.conf. This step is not required, but recommended if your system Bios has an option to switch the graphics into NVIDIA-only mode. To do this, first uninstall the bumblebee package and install just the NVIDIA driver. Then reboot, enter the Bios and switch the Graphics to NVIDIA-only. When back in Arch, connect you Monitor on DP and use startx to test if it is working in principle. Use Xorg -configure to generate an xorg.conf file for your NVIDIA card. This will come in handy further down below.
 
   
  +
{{ic|-f}} スイッチを使用しないでターミナルから実行すると自動的にデーモン化されます。''intel-virtual-output'' をフォアグラウンドモードで実行する利点として、外部ディスプレイが切断されたときに、''intel-virtual-output'' を終了して nvidia チップを無効化できる点があげられます。ディスプレイをエクスポートして ({{ic|1=export DISPLAY=:8}}) {{ic|optirun ''game_bin''}} でゲームを起動した場合、カーソルやキーボードが完全に取られることはありません。{{ic|1=export DISPLAY=:0}} で標準の操作に戻れます。
* Reinstall bumlbebee and bbswitch, reboot and set the system Gfx back to Hybrid in the BIOS.
 
* Install {{AUR|xf86-video-intel-virtual-crtc}}, and replace your xf86-video-intel package with it.
 
* Install {{AUR|screenclone-git}}
 
* Change these bumblebee.conf settings:
 
{{hc|/etc/bumblebee/bumblebee.conf|2=
 
KeepUnusedXServer=true
 
Driver=nvidia
 
}}
 
{{Note|Leave the PMMethod set to "bumblebee". This is contrary to the instructions linked in the article above, but on arch this options needs to be left alone so that bbswitch module is automatically loaded}}
 
* Copy the xorg.conf generated in Step 1 to {{ic|/etc/X11}} (e.g. {{ic|/etc/X11/xorg.nvidia.conf}}). In the [driver-nvidia] section of {{ic|bumblebee.conf}}, change {{ic|XorgConfFile}} to point to it.
 
* Test if your {{ic|/etc/X11/xorg.nvidia.conf}} is working with {{ic|startx -- -config /etc/X11/xorg.nvidia.conf}}
 
* In order for your DP Monitor to show up with the correct resolution in your VIRTUAL Display you might have to edit the Monitor section in your {{ic|/etc/X11/xorg.nvidia.conf}}. Since this is extra work, you could try to continue with your auto-generated file. Come back to this step in the instructions if you find that the resolution of the VIRTUAL Display as shown by xrandr is not correct.
 
** First you have to generate a Modeline. You can use the tool [http://zi.fi/amlc/ amlc], which will genearte a Modeline if you input a few basic parameters.
 
 
::Example: 24" 1920x1080 Monitor
 
::start the tool with {{ic|amlc -c}}
 
{{bc|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}}
 
 
This is the Monitor section which {{ic|amlc}} generated for this input:
 
{{bc|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}}
 
 
Change your {{ic|xorg.nvidia.conf}} to include this Monitor section. You can also trim down your file so that it only contains ServerLayout, Monitor, Device and Screen sections. For reference, here is mine:
 
{{hc|/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
 
}}
 
* Plug in both external monitors and startx. Look at your {{ic|/var/log/Xorg.0.log}}. Check that your VGA Monitor is detected with the correct Modes there. You should also see a VIRTUAL output with modes show up.
 
* Run {{ic|xrandr}} and three displays should be listed there, along with the supported modes.
 
* If the listed Modelines for your VIRTUAL display doesn't have your Monitors native resolution, make note of the exact output name. For me that is {{ic|VIRTUAL1}}. Then have a look again in the Xorg.0.log file. You should see a message: "Output VIRTUAL1 has no monitor section" there. We will change this by putting a file with the needed Monitor section into {{ic|/etc/X11/xorg.conf.d}}. Exit and Restart X afterward.
 
{{hc|/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
 
}}
 
* Turn the NVIDIA card on by running: {{ic|sudo tee /proc/acpi/bbswitch <<< ON}}
 
* Start another X server for the DisplayPort monitor: {{ic|sudo optirun true}}
 
* Check the log of the second X server in {{ic|/var/log/Xorg.8.log}}
 
* Run xrandr to set up the VIRTUAL display to be the right size and placement, eg.: {{ic|xrandr --output VGA1 --auto --rotate normal --pos 0x0 --output VIRTUAL1 --mode 1920x1080 --right-of VGA1 --output LVDS1 --auto --rotate normal --right-of VIRTUAL1}}
 
* Take note of the position of the VIRTUAL display in the list of Outputs as shown by xrandr. The counting starts from zero, i.e. if it is the third display shown, you would specify {{ic|-x 2}} as parameter to {{ic|screenclone}} (Note: This might not always be correct. If you see your internal laptop display cloned on the monitor, try {{ic|-x 2}} anyway.)
 
* Clone the contents of the VIRTUAL display onto the X server created by bumblebee, which is connected to the DisplayPort monitor via the NVIDIA chip:
 
: {{ic|screenclone -d :8 -x 2}}
 
 
Thats it, all three displays should be up and running now.
 
 
== Windows のように単体 GPU と内蔵 GPU を切り替える ==
 
 
Windows では、Optimus を必要とするアプリケーションのホワイトリストを NVIDIA が保持しており、必要に応じてホワイトリストにアプリケーションを追加することもできます。アプリケーションが起動した時に、どちらかのカードを使用するか自動的に決定します。
 
 
この挙動を Linux でも真似したい場合は、{{AUR|libgl-switcheroo-git}} を使うことができます。インストールした後、以下を .xprofile に追加してください。
 
 
{{hc|~/.xprofile|2=
 
mkdir -p /tmp/libgl-switcheroo-$USER/fs
 
gtkglswitch &
 
libgl-switcheroo /tmp/libgl-switcheroo-$USER/fs &
 
}}
 
 
To enable this, you must add the below to the shell that you intend to launch applications from (I simply added it to the .xprofile file)
 
export LD_LIBRARY_PATH=/tmp/libgl-switcheroo-$USER/fs/\$LIB${LD_LIBRARY_PATH+:}$LD_LIBRARY_PATH
 
 
Once this has all been done, every application you launch from this shell will pop up a GTK+ window asking which card you want to run it with (you can also add an application to the whitelist in the configuration). The configuration is located in {{ic|$XDG_CONFIG_HOME/libgl-switcheroo.conf}}, usually {{ic|~/.config/libgl-switcheroo.conf}}
 
 
{{Note|This tool acts by making a FUSE file system and then adding it into the dynamic library searching path, which may lead to slow spead or even segmentation faults when launching a software.}}
 
   
 
== Bumblebee を使わないで CUDA ==
 
== Bumblebee を使わないで CUDA ==
393行目: 336行目:
 
bumblebee を使わずに CUDA を使用することができます。必要なことは nvidia カードがオンになっているようにするだけです:
 
bumblebee を使わずに CUDA を使用することができます。必要なことは nvidia カードがオンになっているようにするだけです:
 
 
# tee /proc/acpi/bbswitch <<< ON
+
# tee /proc/acpi/bbswitch <<< ON
   
 
これで CUDA アプリケーションを起動した時に自動で必要なモジュールが全てロードされます。
 
これで CUDA アプリケーションを起動した時に自動で必要なモジュールが全てロードされます。
399行目: 342行目:
 
CUDA を使った後に nvidia カードをオフにするには以下を実行:
 
CUDA を使った後に nvidia カードをオフにするには以下を実行:
   
# rmmod nvidia_uvm
+
# rmmod nvidia_uvm
# rmmod nvidia
+
# rmmod nvidia
# tee /proc/acpi/bbswitch <<< OFF
+
# tee /proc/acpi/bbswitch <<< OFF
   
 
== トラブルシューティング ==
 
== トラブルシューティング ==
409行目: 352行目:
 
=== [VGL] ERROR: Could not open display :8 ===
 
=== [VGL] ERROR: Could not open display :8 ===
   
  +
親プロセスをフォークしたり kill したりする Wine アプリケーションで発生する既知の問題です (例えば F2P のオンラインゲーム "Runes of Magic" で起こることがあります)。
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")
 
   
  +
VirtualGL に関する問題です。bumblebee 3.1 現在、Primus をレンダラーブリッジとして使用する方法があります:
This is a known problem with VirtualGL. As of bumblebee 3.1, so long as you have it installed, you can use Primus as your render bridge:
 
   
 
$ optirun -b primus wine ''windows program''.exe
 
$ optirun -b primus wine ''windows program''.exe
   
  +
上記の方法で直らない場合、以下を実行する方法もあります:
If this does not work, an alternative walkaround for this problem is:
 
   
 
$ optirun bash
 
$ optirun bash
 
$ optirun wine ''windows program''.exe
 
$ optirun wine ''windows program''.exe
   
If using NVIDIA drivers a fix for this problem is to edit {{ic|/etc/bumblebee/xorg.conf.nvidia}} and change Option {{ic|ConnectedMonitor}} to {{ic|CRT-0}}.
+
NVIDIA ドライバーを使っている場合、{{ic|/etc/bumblebee/xorg.conf.nvidia}} を編集して {{ic|ConnectedMonitor}} オプションを {{ic|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 ===
 
=== [ERROR]Cannot access secondary GPU: No devices detected ===
444行目: 397行目:
 
EndSection
 
EndSection
 
}}
 
}}
  +
  +
{{ic|lspci}} の出力は16進数ですが、Xorg では10進数です。つまり、{{ic|lspci}} の出力が {{ic|0a:00.0}} だった場合 {{ic|BusID}} は {{ic|PCI:10:0:0}} となります。
   
 
==== NVIDIA(0): Failed to assign any connected display devices to X screen 0 ====
 
==== NVIDIA(0): Failed to assign any connected display devices to X screen 0 ====
460行目: 415行目:
 
Option "ConnectedMonitor" "CRT"
 
Option "ConnectedMonitor" "CRT"
   
  +
==== Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!) ====
==== systemd-logind: failed to get session: PID XXX does not belong to any known session ====
 
   
  +
{{ic|1=rcutree.rcu_idle_gp_delay=1}} を[[ブートローダー]]の設定の[[カーネルパラメータ]]に追加してください (元の [https://bbs.archlinux.org/viewtopic.php?id=169742 BBS の投稿] に設定例が載っています)。
以下のようにコンソール出力される場合 (''PID'' は変わります):
 
   
  +
==== Failed to initialize the NVIDIA GPU at PCI:1:0:0 (Bumblebee daemon reported: error: [XORG] (EE) NVIDIA(GPU-0)) ====
[ERROR]Cannot access secondary GPU - error: [XORG] (EE) systemd-logind: failed to get session: PID 753 does not belong to any known session
 
  +
スリープからの復帰時 {{ic|primusrun}}や{{ic|optirun}}コマンドが動かない問題に直面するかもしれません。この問題を解決するために2つ方法があります。システムの再起動か、次のコマンドを実行することです:
[ERROR]Aborting because fallback start is disabled.
 
   
  +
# echo 1 > /sys/bus/pci/rescan
{{ic|/etc/mkinitcpio.conf}} の MODULES を以下のように変更してください:
 
   
  +
そして{{ic|primusrun}}や{{ic|optirun}}が動く事を試して下さい。上記のコマンドで直らなかった場合、次を試して、NVIDIA cardのバスIDを調べて下さい:
MODULES="i915 bbswitch"
 
   
  +
$ lspci | grep NVIDIA
もしくは:
 
   
  +
例えば、上記のコマンドによってバスIDが{{ic|01:00.0}}と分かった場合、次のコマンドを試すことが使えます:
MODULES="i915 nouveau bbswitch"
 
 
変更したら次を実行してください:
 
 
# mkinitcpio -p linux
 
 
このコマンドはカーネルをアップデートするたびに実行する必要があります。
 
 
さらに、[[#Failed_to_initialize_the_NVIDIA_GPU_at_PCI:1:0:0_.28GPU_fallen_off_the_bus_.2F_RmInitAdapter_failed.21.29|下]]で解説されているようにカーネルパラメータを[[ブートローダー]]の設定に加える必要があるかもしれません。
 
 
==== Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!) ====
 
   
  +
# echo 1 > /sys/bus/pci/devices/0000:'''01:00.0'''/remove
{{ic|1=rcutree.rcu_idle_gp_delay=1}} を[[ブートローダー]]の設定の[[カーネルパラメータ]]に追加してください (元の [https://bbs.archlinux.org/viewtopic.php?id=169742 BBS の投稿]に設定例が載っています)。
 
  +
# echo 1 > /sys/bus/pci/rescan
   
 
==== Could not load GPU driver ====
 
==== Could not load GPU driver ====
498行目: 444行目:
 
modprobe: ERROR: could not insert 'nvidia': Exec format error
 
modprobe: ERROR: could not insert 'nvidia': Exec format error
   
{{aur|nvidia-dkms}} を使ったり [[ABS|ABS]] で {{pkg|nvidia}} をコンパイルして、最新のカーネルにあわせて nvidia パッケージを手動でコンパイルする必要があります。
+
NVIDIA ドライバーが Linux カーネルのバージョンとあっていないのが原因です。NVIDIA ドライバーは最新なのにカーネルのバージョンが古い場合に起こります。システムをアップデートすることで問題は解決します。アップデートで問題が修正されない場合、{{Pkg|nvidia-dkms}} を使ったり [[ABS]] で {{pkg|nvidia}} をコンパイルして、最新のカーネルにあわせて nvidia パッケージを手動でコンパイルする必要があります。
   
 
==== NOUVEAU(0): [drm] failed to set drm interface version ====
 
==== NOUVEAU(0): [drm] failed to set drm interface version ====
505行目: 451行目:
   
 
=== /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied ===
 
=== /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied ===
This could be worked around by appending following lines in {{ic|/etc/bumblebee/xorg.conf.nvidia}} (see [https://github.com/Bumblebee-Project/Bumblebee/issues/580 here]):
+
{{ic|/etc/bumblebee/xorg.conf.nvidia}} に以下の行を追加することで対処できます ([https://github.com/Bumblebee-Project/Bumblebee/issues/580] を参照):
 
{{bc|
 
{{bc|
 
Section "Screen"
 
Section "Screen"
515行目: 461行目:
 
=== ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded: ignored ===
 
=== ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded: ignored ===
   
おそらく64ビット環境で bumblebee を使って32ビットアプリケーションを起動するのに必要なパッケージがインストールされていません。[[#インストール|インストール]]の "Note" ボクスを見て下さい。
+
おそらく64ビット環境で bumblebee を使って32ビットアプリケーションを起動するのに必要なパッケージがインストールされていません。[[#インストール|インストール]]の32ビトアプリケーションに関する部分を見て下さい。問題が解決しない場合やアプリケーションが64ビットの場合、[[#Primusrun|primus ブリッジ]]を使ってみてください。
   
 
=== Fatal IO error 11 (Resource temporarily unavailable) on X server ===
 
=== Fatal IO error 11 (Resource temporarily unavailable) on X server ===
527行目: 473行目:
 
$ optirun nvidia-settings -c :8
 
$ optirun nvidia-settings -c :8
   
{{ic|1=X Server XVideo Settings -> Sync to VBlank}} and {{ic|1=OpenGL Settings -> Sync to VBlank}} should both be enabled. The Intel card has in general less tearing, so use it for video playback. Especially use VA-API for video decoding (e.g. {{ic|mplayer-vaapi}} and with {{ic|-vsync}} parameter).
+
{{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]] の記事を見て下さい。
539行目: 485行目:
 
$ optirun glxspheres64
 
$ optirun glxspheres64
 
または (32ビットの場合):
 
または (32ビットの場合):
{{hc|$ optirun glxspheres|
+
{{hc|$ optirun glxspheres32|
 
[ 1648.179533] [ERROR]You've no permission to communicate with the Bumblebee daemon. Try adding yourself to the 'bumblebee' group
 
[ 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?
 
[ 1648.179628] [ERROR]Could not connect to bumblebee daemon - is it running?
548行目: 494行目:
 
=== ログイン後にコンソールから X.org を実行 (ルートレス X.org) ===
 
=== ログイン後にコンソールから X.org を実行 (ルートレス X.org) ===
   
[[Xorg#Rootless Xorg (v1.16)|Xorg#Rootless Xorg (v1.16)]] を見て下さい。
+
[[Xorg#Rootless Xorg (v1.16)]] を見て下さい。
  +
  +
=== Primusrun によってマウスが遅延する/垂直同期の無効化 ===
  +
  +
{{ic|primusrun}} では {{ic|VSYNC}} がデフォルトで有効になっているため、マウスの入力が遅れたり性能が少しだけ落ちたりすることがあります。{{ic|VSYNC}} を無効化して {{ic|primusrun}} をテストするには:
  +
  +
$ vblank_mode=0 primusrun glxgears
  +
  +
上記の設定に満足したら[[エイリアス]]を作成すると良いでしょう (例: {{ic|1=alias primusrun="vblank_mode=0 primusrun"}})。性能の比較:
  +
  +
{| class="wikitable"
  +
! 垂直同期 !! FPS !! スコア !! 最小 FPS !! 最大 FPS
  +
|-
  +
| 無効 || 31.5 || 793 || 22.3 || 54.8
  +
|-
  +
| 有効 || 31.4 || 792 || 18.7 || 54.2
  +
|}
  +
  +
{{Note|システム全体で垂直同期を無効化したい場合、[[Intel Graphics#垂直同期 (VSYNC) を無効にする]]を見てください。}}
  +
  +
=== コンポジットウィンドウマネージャにおける Primus の問題 ===
  +
  +
コンポジットを有効にして Primus を使った際にフリッカーが発生したり性能が落ち込む場合、primus のディスプレイスレッドとアプリケーションのレンダリングスレッドを同期することで問題が解決する場合があります:
  +
  +
$ PRIMUS_SYNC=1 primusrun ...
  +
  +
上記の設定をすると primus は先にレンダリングされたフレームを表示します。
  +
  +
=== スタンバイから復帰した後の bumblebee の問題 ===
  +
  +
システムによっては、スタンバイから復帰した後に nvidia モジュールがロードされることがあります。解決方法としては {{pkg|acpi_call}} や {{pkg|acpi}} パッケージをインストールしてください。
  +
  +
=== Optirun が動作せず、何も出力しない ===
  +
  +
Bumblebee のインストールは正しく行ったのに以下のコマンドを実行しても何も出力されず、glxgears のウィンドウも表示されないという報告があります:
  +
  +
$ optirun glxgears -info
  +
  +
3D アクセラレーションを必要とするプログラムは全てクラッシュします:
  +
  +
$ optirun bash
  +
$ glxgears
  +
Segmentation fault (core dumped)
  +
  +
これは特定のバージョンの virtualgl のバグです。{{Pkg|primus}} と {{Pkg|lib32-primus}} を[[インストール]]して以下のコマンドを使ってください:
  +
  +
$ primusrun glxspheres64
  +
$ optirun -b primus glxspheres64
  +
  +
詳しくは [https://bbs.archlinux.org/viewtopic.php?pid=1643609 こちらの投稿] を参照。
  +
  +
=== カーネル 4.8 で電源管理が機能しない ===
  +
  +
新しいノートパソコンを使っている場合 (2015年以降の BIOS)、Linux 4.8 から刷新された電源管理に対応していないために bbswitch が機能しなくなることがあります ([https://github.com/Bumblebee-Project/bbswitch/issues/140 bbswitch issue 140])。dGPU の電源を入れられなくなったり、あるいは電源を切れなくなったりします。
  +
  +
対処方法としては[[カーネルパラメータ]]に {{ic|1=pcie_port_pm=off}} を追加してください。
  +
  +
もしくは、省電力設定を使いたい場合、bbswitch を削除して [[Nouveau]] の電源管理を使ってみてください (新しい電源管理をサポートしています)。
  +
  +
=== ロックアップの問題 (lspci がフリーズする) ===
  +
GTX 965M などを搭載した新しいノートパソコンにおける問題については [[NVIDIA Optimus#ロックアップ問題 (lspci がフリーズ)]] を見てください。
   
 
== 参照 ==
 
== 参照 ==
   
* [http://www.bumblebee-project.org Bumblebee プロジェクトリポジトリy]
+
* [http://www.bumblebee-project.org Bumblebee プロジェクトリポジトリ]
 
* [http://wiki.bumblebee-project.org/ Bumblebee リポジトリ wiki]
 
* [http://wiki.bumblebee-project.org/ Bumblebee リポジトリ wiki]
 
* [https://github.com/Bumblebee-Project/bbswitch Bumblebee プロジェクト bbswitch リポジトリ]
 
* [https://github.com/Bumblebee-Project/bbswitch Bumblebee プロジェクト bbswitch リポジトリ]

2023年7月3日 (月) 14:49時点における最新版

関連記事

Bumblebee の FAQ より:

"Bumblebee は GNU/Linux システムで NVIDIA Optimus が搭載されたノートパソコンを動作させようという試みです。この機能では2枚のグラフィックカードを必要とし、異なる電源消費のプロファイルがレイヤーによって接続され1つのフレームバッファを共有することになります。"

ノート: Bumblebee には重大なパフォーマンスの問題があります[1][2]。代替ソリューションについては、NVIDIA Optimus を参照してください。

目次

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有効化してください。システムを再起動してから#使用方法に従います。

ノート: bumblebeeは、カーネルモジュールnvidia-drmをブート中にロードさせないように、ブラックリストのファイルをインストールします。Bumblebeeではなく他の方法に変える際、アンインストールする時は覚えておいてください。

使用方法

テスト

mesa-demos をインストールして、glxgears を使って Optimus 環境で Bumblebee が動作することをテストしてください:

$ optirun glxgears -info

失敗する場合、次のコマンドを試して下さい (64ビット環境):

$ optirun glxspheres64 -info

もしくは、32ビット環境ならば:

$ optirun glxspheres32

ウィンドウが開いてアニメーションが表示されたら、Bumblebee で Optimus が動作しています。

ノート: glxgears が動作しないのに glxspheresXX は動作する場合、glxgears を全て glxspheresXX に置き換えてください。

基本的な使用方法

$ optirun [options] application [application-parameters]

使用例 (Windows アプリケーションを Optimus で起動):

$ optirun wine application.exe

NVIDIA Settings を Optimus で使う場合:

$ optirun -b none nvidia-settings -c :8
ノート: nvdock-bumblebeeAUR パッケージをインストールすることで nvdockAUR にパッチがあたったバージョンを使うことができます。

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
ノート: jpeg 圧縮方式を使用するとラグが発生することがあります。

全てのアプリケーションで共通の圧縮方式を使いたい場合は /etc/bumblebee/bumblebee.confVGLTransportcompress-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
ノート: CPU の周波数スケーリングはレンダリングパフォーマンスに直接影響を与えます。

Primusrun

ノート: コンポジットは性能に影響を与えるので、コンポジット WM で primus を実行することは推奨されません。#コンポジットウィンドウマネージャにおける Primus の問題を参照。

(primus パッケージに含まれている) primusrunoptirun/virtualgl よりも省電力で高い性能を発揮するため、人気が出てきています。単体で実行することができますが、optirun と同じオプションを使うことはできません。primusoptirun のブリッジとして設定することで柔軟に動作させることができます。

64ビットのマシンで32ビットのアプリケーションを実行するには lib32-primus をインストールしてください (multilib を有効にする必要があります)。

使用方法 (単体で実行):

$ primusrun glxgears

使用方法 (optirun のブリッジとして実行):

デフォルト設定ではブリッジとして virtualgl が設定されます。コマンドラインで上書きするには:

$ optirun -b primus glxgears

もしくは /etc/bumblebee/bumblebee.confBridge=primus と記述することで永続的に設定できます。

ヒント: VSYNC を無効化したい場合は #Primusrun によってマウスが遅延する/垂直同期の無効化を見てください。マウスの移動ラグをなくして性能を少しだけ上げることができます。

Pvkrun

primus_vkパッケージのpvkrunは、Vulkanベースのアプリケーションの実行を可能にするprimusrunの置き換えです(議論 en2:Talk:Bumblebee#Using_primus_vk も参照)。vulkan-toolsvulkaninfoを使って、簡単な確認が出来ます。

$ pvkrun vulkaninfo

電源管理

電源管理機能の目的は NVIDIA のカードが bumblebee によって使われていないときに電源を切ることです。bbswitch (または bbswitch-dkms) がインストールされていれば、Bumblebee デーモンが起動した時に自動で検知されます。追加の設定は必要ありません。ただし、bbswitchデスクトップコンピュータでは動作しません 。そのため、デスクトップコンピュータで Bumblebee の電源管理を使うことはできず、bbswitch をインストールする意味もありません (Bumblebee の他の機能はデスクトップコンピュータでも動作します)。

bbswitch を使って NVIDIA カードのデフォルトの電源状態を設定

bbswitch のデフォルトの挙動はカードの電源状態を変更しません。bumblebeed が起動時にカードを無効化します。したがって以下は bumblebeed を使わずに bbswitch を使用する場合にのみ必要になります。

必要に応じてモジュールオプションの load_stateunload_state を設定してください (bbswitch のドキュメントを参照)。

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

シャットダウン中に NVIDIA カードを有効にする

一部のノートパソコンでは、システムのシャットダウン時にカードの電源がオフになっていた場合、次の起動時に NVIDIA のカードが正しく初期化されないことがあります。/etc/bumblebee/bumblebee.conf の (デフォルト設定である) TurnCardOffAtExit=false によって Bumblebee デーモンが停止されるたびにカードが有効になってしまいます (例: シャットダウン時など)。この設定はデーモンが実行中の場合は電源状態に影響を及ぼさないため、optirunprimusrun プログラムを全て終了しても 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
ノート: 上記の方法はシステムを再起動しないと反映されません。bumblebee サービスを再起動するだけでは不十分です。

マルチモニター

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-outputxf86-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 ページ を見てください。

ノート: デバイスの解像度が正しく認識されない場合 /etc/bumblebee/xorg.conf.nvidia の中の UseEDIDOption "AutoAddDevices" "false""true" に変更してください。NVIDIA GPU に接続されたディスプレイを使用するには Option "UseDisplayDevices" "none" という行のコメントアウトも必要です。

-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

トラブルシューティング

ノート: wiki で説明されているようにバグは Bumblebee-Project の GitHub トラッカーに報告してください。

[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 だった場合 BusIDPCI: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))

スリープからの復帰時 primusrunoptirunコマンドが動かない問題に直面するかもしれません。この問題を解決するために2つ方法があります。システムの再起動か、次のコマンドを実行することです:

# echo 1 > /sys/bus/pci/rescan

そしてprimusrunoptirunが動く事を試して下さい。上記のコマンドで直らなかった場合、次を試して、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 を使ったり ABSnvidia をコンパイルして、最新のカーネルにあわせて 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 ブリッジを使ってみてください。

Fatal IO error 11 (Resource temporarily unavailable) on X server

/etc/bumblebee/bumblebee.confKeepUnusedXServerfalse から true に変更してください。プログラムはバックグラウンドにフォークされ bumblebee はプログラムについて関知しません。

ティアリング

ティアリングは Bumblebee でよくある問題です。修正するには、垂直同期を有効にする必要があります。Intel のカードではデフォルトで有効になっているはずですが、Xorg のログで確認してみてください。NVIDIA で垂直同期が有効になっているか確認するには、次を実行:

$ optirun nvidia-settings -c :8

X Server XVideo Settings -> Sync to VBlankOpenGL 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
ノート: システム全体で垂直同期を無効化したい場合、Intel Graphics#垂直同期 (VSYNC) を無効にするを見てください。

コンポジットウィンドウマネージャにおける Primus の問題

コンポジットを有効にして Primus を使った際にフリッカーが発生したり性能が落ち込む場合、primus のディスプレイスレッドとアプリケーションのレンダリングスレッドを同期することで問題が解決する場合があります:

$ PRIMUS_SYNC=1 primusrun ...

上記の設定をすると primus は先にレンダリングされたフレームを表示します。

スタンバイから復帰した後の bumblebee の問題

システムによっては、スタンバイから復帰した後に nvidia モジュールがロードされることがあります。解決方法としては acpi_callacpi パッケージをインストールしてください。

Optirun が動作せず、何も出力しない

Bumblebee のインストールは正しく行ったのに以下のコマンドを実行しても何も出力されず、glxgears のウィンドウも表示されないという報告があります:

$ optirun glxgears -info

3D アクセラレーションを必要とするプログラムは全てクラッシュします:

$ optirun bash
$ glxgears
Segmentation fault (core dumped)

これは特定のバージョンの virtualgl のバグです。primuslib32-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 に参加しましょう。