「NVIDIA Optimus」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(en:NVIDIA Optimusへの転送ページ)
 
1行目: 1行目:
  +
[[Category:グラフィック]]
#redirect[[en:NVIDIA Optimus]]
 
  +
[[en:NVIDIA Optimus]]
  +
[[zh-CN:NVIDIA Optimus]]
  +
{{Related articles start}}
  +
{{Related|Bumblebee}}
  +
{{Related|Nouveau}}
  +
{{Related|NVIDIA}}
  +
{{Related articles end}}
  +
  +
NVIDIA Optimus は Intel の内蔵 GPU とディスクリートの NVIDIA GPU をノートパソコンに組み込んで利用できるようにする技術です。Arch Linux で Optimus グラフィックを動作させるには、以下で示すような複雑な手順が必要となります。複数の方法が存在います:
  +
  +
* BIOS でどちらかのデバイスを無効化する。NVIDIA デバイスを無効化した場合、バッテリーの持ちがよくなりますが、BIOS によっては無効化できない場合もあり GPU 切り替えができなくなります。
  +
  +
* プロプライエタリの NVIDIA ドライバーに含まれている公式の Optimus サポートを使う。NVIDIA のパフォーマンスを最大限発揮できますが、GPU 切り替えは不可能で、さらにオープンソースドライバーよりもバグが多く存在します。
  +
  +
* オープンソースの nouveau ドライバーの PRIME 機能を使う。GPU 切り替えが可能ですがプロプライエタリの NVIDIA ドライバーと比べるとパフォーマンスで劣ります。さらに省電力機能は実装されていません。
  +
  +
* サードパーティの Bumblebee プログラムを使って Optimus のような機能を実現する。GPU 切り替えが可能で省電力機能も使えますが別個に設定が必要です。
  +
  +
以下では上記の方法を説明します。
  +
  +
== スイッチャブルグラフィックスの無効化 ==
  +
  +
特定の GPU だけを使用して切り替えをしない場合、システムの BIOS で切り替えを無効にできないか確認してください。カードのどちらか片方を無効化するオプションがあるはずです。ノートパソコンによってはディスクリートカードしか無効化できない場合や逆の場合もありますが、片方のカードしか使わないときは確認する価値があるでしょう。両方のカードを使う場合、または使うつもりのないカードを無効化できないときは、以下の方法を見て下さい。
  +
  +
== nvidia を使う ==
  +
  +
[[NVIDIA|プロプライエタリの NVIDIA ドライバー]]は nouveau ドライバーのような動的な切り替えはサポートしていません (つまり NVIDIA デバイスしか使用できません)。また、NVIDIA は画面にティアリングが発生する問題を認識していますが未だに修正がなされていません。そのかわり、ディスクリート GPU を利用して nouveau ドライバーよりも高い性能を発揮することができます (2013年10月現在)。
  +
  +
まず公式リポジトリから {{Pkg|nvidia}}, {{Pkg|nvidia-libgl}}, {{Pkg|xorg-xrandr}} をインストールしてください。
  +
  +
そして、{{ic|xorg.conf}} を設定します。NVIDIA カードの PCI アドレスを知る必要があるので、次のコマンドを実行してください:
  +
  +
$ lspci | grep -E "VGA|3D"
  +
  +
NVIDIA と書かれた行の最初の7文字が PCI アドレスです。例えば {{ic|01:00.0}} などと表記されます。{{ic|xorg.conf}} では {{ic|#:#:#}} という形式で表記する必要があります。例えば {{ic|01:00.0}} の場合 {{ic|1:0:0}} となります。
  +
  +
{{Note|
  +
* Xorg-server 1.17-1 から {{ic|modesetting}} モジュールに関連する {{Bug|43830}} が Optimus で発現します。システムによっては以下の設定のように {{ic|Option "AccelMethod"}} を {{ic|"none"}} に設定することで解決します。また、場合によっては {{ic|"sna"}} に設定する必要がある場合もあります。[[#別の設定]] を見て下さい。
  +
* セットアップによっては EDID ファイルによる nvidia ドライバーのディスプレイの値の自動検出がされなくなることがあります。解決方法は [[#解像度や画面スキャンが正しく認識されず Xorg.log に EDID のエラーが表示される]] を見て下さい。
  +
}}
  +
  +
{{hc|/etc/X11/xorg.conf|
  +
Section "ServerLayout"
  +
Identifier "layout"
  +
Screen 0 "nvidia"
  +
Inactive "intel"
  +
EndSection
  +
  +
Section "Device"
  +
Identifier "nvidia"
  +
Driver "nvidia"
  +
'''# Change BusID if necessary. Tips: (lspci | grep 3D) (Change 01:00.0 to 1:0:0)'''
  +
'''BusID "PCI:1:0:0"'''
  +
EndSection
  +
  +
Section "Screen"
  +
Identifier "nvidia"
  +
Device "nvidia"
  +
Option "AllowEmptyInitialConfiguration" "Yes"
  +
EndSection
  +
  +
Section "Device"
  +
Identifier "intel"
  +
Driver "modesetting"
  +
'''# Change BusID if necessary. Tips: (lspci | grep VGA) (Change 00:02.0 to 0:2:0)'''
  +
'''BusID "PCI:0:2:0"'''
  +
Option "AccelMethod" "none"
  +
EndSection
  +
  +
Section "Screen"
  +
Identifier "intel"
  +
Device "intel"
  +
EndSection
  +
  +
}}
  +
  +
次に、{{ic|~/.xinitrc}} の最初に以下の2行を追加してください:
  +
  +
{{hc|~/.xinitrc|
  +
xrandr --setprovideroutputsource modesetting NVIDIA-0
  +
xrandr --auto
  +
}}
  +
  +
そしてドライバーをロードするために再起動し、X を起動させます。
  +
  +
ディスプレイの dpi が正しくない場合は以下の行を追加してください:
  +
  +
xrandr --dpi 96
  +
  +
X の起動時に黒画面が表示される場合、{{ic|~/.xinitrc}} に記述した {{ic|xrandr}} コマンドの後にアンパサンドがないことを確認してください。アンパサンドがある場合、{{ic|xrandr}} コマンドが実行し終える前にウィンドウマネージャが起動してしまうことがあり、そうなると黒画面になってしまいます。
  +
  +
アンパサンドがないのに黒画面になる場合、下の [[#別の設定]] を見て下さい。
  +
  +
=== 別の設定 ===
  +
  +
リリース 1.17.1 から、上記の設定を使っていて Xorg-server がクラッシュするようになった場合、{{ic|/etc/X11/xorg.conf}} の Intel デバイスのセクションを以下のように修正してください:
  +
  +
{{hc|# nano /etc/X11/xorg.conf|
  +
Section "Device"
  +
Identifier "intel"
  +
Driver "modesetting"
  +
BusID "PCI:0:2:0"
  +
Option "AccelMethod" "sna"
  +
#Option "TearFree" "True"
  +
#Option "Tiling" "True"
  +
#Option "SwapbuffersWait" "True"
  +
EndSection}}
  +
  +
上の設定と同じように、{{ic|BusID}} は ''lspci'' コマンドの出力にあわせて置き換えてください。Intel という文字列が含まれた "VGA compatible controller" の行を検索してください。例:
  +
$ lspci | grep VGA
  +
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
  +
  +
{{Tip|最後のコメントアウトされている3つのオプションは (有効にすると) ティアリングを抑える効果がありますが、代わりにパフォーマンスが多少落ちます。{{ic|TearFree}} オプションは {{ic|"sna"}} アクセラレーションでのみ使えるので注意してください。[[Intel Graphics]] を参照。{{ic|"AccelMethod"}} オプションには {{ic|"sna"}} または {{ic|"uxa"}} を使うことができます。Lenovo Ideapad Z50-70 59-432128 での {{ic|xorg.conf}} の例が次のページにあります: [http://pastebin.com/tMtPz381]。}}
  +
  +
=== ディスプレイマネージャ ===
  +
  +
ディスプレイマネージャを使用する場合、{{ic|~/.xinitrc}} の代わりにディスプレイマネージャのディスプレイ設定スクリプトを作成・編集する必要があります。
  +
  +
==== LightDM ====
  +
  +
[[LightDM]] ディスプレイマネージャの場合:
  +
  +
{{hc|/etc/lightdm/display_setup.sh|
  +
xrandr --setprovideroutputsource modesetting NVIDIA-0
  +
xrandr --auto
  +
}}
  +
  +
スクリプトに実行可能属性を付与:
  +
  +
# chmod +x /etc/lightdm/display_setup.sh
  +
  +
{{ic|/etc/lightdm/lightdm.conf}} の {{ic|[SeatDefaults]}} セクションを編集してスクリプトを実行するように lightdm を設定:
  +
  +
{{hc|/etc/lightdm/lightdm.conf|output=
  +
[SeatDefaults]
  +
display-setup-script=/etc/lightdm/display_setup.sh
  +
}}
  +
  +
再起動して、ディスプレイマネージャが起動するのを確認してください。
  +
  +
==== SDDM ====
  +
[[SDDM]] ディスプレイマネージャの場合:
  +
  +
{{hc|/usr/share/sddm/scripts/Xsetup|
  +
xrandr --setprovideroutputsource modesetting NVIDIA-0
  +
xrandr --auto
  +
}}
  +
  +
==== GDM ====
  +
[[GDM]] ディスプレイマネージャの場合 {{ic|.desktop}} ファイルを作成します:
  +
  +
{{hc|/usr/share/gdm/greeter/autostart/display_setup.desktop|
  +
<nowiki>[Desktop Entry]
  +
Type=Application
  +
Name=Display setup
  +
Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto"
  +
NoDisplay=true
  +
X-GNOME-AutoRestart=true</nowiki>
  +
}}
  +
  +
動作しない場合、以下のように {{ic|/etc/X11/xinit/xinitrc.d}} ディレクトリにスクリプトを追加してください:
  +
  +
{{hc|/etc/X11/xinit/xinitrc.d/nvidia-optimus.sh|
  +
<nowiki>#!/bin/sh
  +
xrandr --setprovideroutputsource modesetting NVIDIA-0
  +
xrandr --auto</nowiki>
  +
}}
  +
  +
そして次を実行:
  +
  +
# chmod +x /etc/X11/xinit/xinitrc.d/nvidia-optimus.sh
  +
  +
また、GDM が [[GDM#Xorg バックエンドを使う|Xorg バックエンドを使う]]ようになっているか確認してください。
  +
  +
==== KDM ====
  +
  +
KDE の [[KDM]] の場合、{{ic|/usr/share/config/kdm/Xsetup}} に xrandr の行を追加してください。
  +
  +
=== 3D の確認 ===
  +
  +
NVIDIA グラフィックが使われているかどうかは {{Pkg|mesa-demos}} をインストールして次のコマンドを実行することで確認できます:
  +
  +
$ glxinfo | grep NVIDIA
  +
  +
=== 詳細情報 ===
  +
  +
詳しい情報は、NVIDIA の公式ページ [http://http.download.nvidia.com/XFree86/Linux-x86_64/340.32/README/randr14.html] を見て下さい。
  +
  +
== トラブルシューティング ==
  +
  +
=== 垂直同期が機能せずティアリングが発生する ===
  +
  +
残念ながら、この問題に解決方法はありません。また、[https://devtalk.nvidia.com/default/topic/775691/linux/vsync-issue-nvidia-prime-ux32vd-with-gt620-m-/ NVIDIA はこのことを認識しています] 。
  +
  +
=== Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!) ===
  +
  +
カーネルパラメータに {{ic|1=rcutree.rcu_idle_gp_delay=1}} を追加してください。詳しくは [https://bbs.archlinux.org/viewtopic.php?id=169742 こちら] を参照。
  +
  +
=== 解像度や画面スキャンが正しく認識されず Xorg.log に EDID のエラーが表示される ===
  +
  +
nVidia ドライバーがディスプレイの EDID を検出できないのが原因です。手動で EDID ファイルのパスを指定するか、同じような方法で同一の情報を提供する必要があります。
  +
  +
EDID ファイルのパスを指定するには {{ic|Xorg.conf}} の nvidia カードの Device セクションを編集して、以下の行を追加して適当にパスを置き換えてください:
  +
  +
{{hc|/etc/X11/xorg.conf|
  +
Section "Device"
  +
Option "ConnectedMonitor" "CRT-0"
  +
Option "CustomEDID" "CRT-0:/sys/class/drm/card0-LVDS-1/edid"
  +
Option "IgnoreEDID" "false"
  +
Option "UseEDID" "true"
  +
EndSection
  +
}}
  +
  +
Xorg が起動しない場合は、CRT という文字列を全て DFB に置き換えてみて下さい。card0 は intel カードの識別子でディスプレイは LVDS で接続されています。edid バイナリはこのディレクトリに存在します。ハードウェアの構成が異なっている場合、CustomEDID の値も変わってくるので確認するようにしてください。パスの先頭の {{ic|/sys/class/drm}} は変わらないはずです。
  +
  +
または、{{Pkg|read-edid}} などのツールを使って edid を自分で作成して、作成したファイルを使うようにドライバーを設定することもできます。modeline も使えますが、"UseEDID" と "IgnoreEDID" は変更するようにしてください。
  +
  +
== nouveau を使う ==
  +
  +
オープンソースの [[nouveau]] ドライバー ({{Pkg|xf86-video-nouveau}}) は PRIME という技術を使って Intel のドライバー ({{Pkg|xf86-video-intel}}) との動的な切り替えが可能です。詳しくは、[[PRIME]] の記事を見て下さい。
  +
  +
== Bumblebee を使う ==
  +
  +
省電力機能などの便利な機能を実装している Bumblebee を使いたい場合、[[Bumblebee]] の記事を見て下さい。

2015年11月10日 (火) 15:48時点における版

関連記事

NVIDIA Optimus は Intel の内蔵 GPU とディスクリートの NVIDIA GPU をノートパソコンに組み込んで利用できるようにする技術です。Arch Linux で Optimus グラフィックを動作させるには、以下で示すような複雑な手順が必要となります。複数の方法が存在います:

  • BIOS でどちらかのデバイスを無効化する。NVIDIA デバイスを無効化した場合、バッテリーの持ちがよくなりますが、BIOS によっては無効化できない場合もあり GPU 切り替えができなくなります。
  • プロプライエタリの NVIDIA ドライバーに含まれている公式の Optimus サポートを使う。NVIDIA のパフォーマンスを最大限発揮できますが、GPU 切り替えは不可能で、さらにオープンソースドライバーよりもバグが多く存在します。
  • オープンソースの nouveau ドライバーの PRIME 機能を使う。GPU 切り替えが可能ですがプロプライエタリの NVIDIA ドライバーと比べるとパフォーマンスで劣ります。さらに省電力機能は実装されていません。
  • サードパーティの Bumblebee プログラムを使って Optimus のような機能を実現する。GPU 切り替えが可能で省電力機能も使えますが別個に設定が必要です。

以下では上記の方法を説明します。

スイッチャブルグラフィックスの無効化

特定の GPU だけを使用して切り替えをしない場合、システムの BIOS で切り替えを無効にできないか確認してください。カードのどちらか片方を無効化するオプションがあるはずです。ノートパソコンによってはディスクリートカードしか無効化できない場合や逆の場合もありますが、片方のカードしか使わないときは確認する価値があるでしょう。両方のカードを使う場合、または使うつもりのないカードを無効化できないときは、以下の方法を見て下さい。

nvidia を使う

プロプライエタリの NVIDIA ドライバーは nouveau ドライバーのような動的な切り替えはサポートしていません (つまり NVIDIA デバイスしか使用できません)。また、NVIDIA は画面にティアリングが発生する問題を認識していますが未だに修正がなされていません。そのかわり、ディスクリート GPU を利用して nouveau ドライバーよりも高い性能を発揮することができます (2013年10月現在)。

まず公式リポジトリから nvidia, nvidia-libgl, xorg-xrandr をインストールしてください。

そして、xorg.conf を設定します。NVIDIA カードの PCI アドレスを知る必要があるので、次のコマンドを実行してください:

$ lspci | grep -E "VGA|3D"

NVIDIA と書かれた行の最初の7文字が PCI アドレスです。例えば 01:00.0 などと表記されます。xorg.conf では #:#:# という形式で表記する必要があります。例えば 01:00.0 の場合 1:0:0 となります。

ノート:
  • Xorg-server 1.17-1 から modesetting モジュールに関連する FS#43830 が Optimus で発現します。システムによっては以下の設定のように Option "AccelMethod""none" に設定することで解決します。また、場合によっては "sna" に設定する必要がある場合もあります。#別の設定 を見て下さい。
  • セットアップによっては EDID ファイルによる nvidia ドライバーのディスプレイの値の自動検出がされなくなることがあります。解決方法は #解像度や画面スキャンが正しく認識されず Xorg.log に EDID のエラーが表示される を見て下さい。
/etc/X11/xorg.conf
Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    # Change BusID if necessary. Tips: (lspci | grep 3D) (Change 01:00.0 to 1:0:0)
    BusID "PCI:1:0:0"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration" "Yes"
EndSection

Section "Device"
    Identifier "intel"
    Driver "modesetting"
    # Change BusID if necessary. Tips: (lspci | grep VGA) (Change 00:02.0 to 0:2:0)
    BusID "PCI:0:2:0"
    Option "AccelMethod"  "none"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

次に、~/.xinitrc の最初に以下の2行を追加してください:

~/.xinitrc
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

そしてドライバーをロードするために再起動し、X を起動させます。

ディスプレイの dpi が正しくない場合は以下の行を追加してください:

xrandr --dpi 96

X の起動時に黒画面が表示される場合、~/.xinitrc に記述した xrandr コマンドの後にアンパサンドがないことを確認してください。アンパサンドがある場合、xrandr コマンドが実行し終える前にウィンドウマネージャが起動してしまうことがあり、そうなると黒画面になってしまいます。

アンパサンドがないのに黒画面になる場合、下の #別の設定 を見て下さい。

別の設定

リリース 1.17.1 から、上記の設定を使っていて Xorg-server がクラッシュするようになった場合、/etc/X11/xorg.conf の Intel デバイスのセクションを以下のように修正してください:

# nano /etc/X11/xorg.conf
Section "Device"
    Identifier  "intel"
    Driver      "modesetting"
    BusID       "PCI:0:2:0"
    Option      "AccelMethod"  "sna"
    #Option      "TearFree" "True"
    #Option      "Tiling" "True"
    #Option      "SwapbuffersWait" "True"
EndSection

上の設定と同じように、BusIDlspci コマンドの出力にあわせて置き換えてください。Intel という文字列が含まれた "VGA compatible controller" の行を検索してください。例:

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 0b)
ヒント: 最後のコメントアウトされている3つのオプションは (有効にすると) ティアリングを抑える効果がありますが、代わりにパフォーマンスが多少落ちます。TearFree オプションは "sna" アクセラレーションでのみ使えるので注意してください。Intel Graphics を参照。"AccelMethod" オプションには "sna" または "uxa" を使うことができます。Lenovo Ideapad Z50-70 59-432128 での xorg.conf の例が次のページにあります: [1]

ディスプレイマネージャ

ディスプレイマネージャを使用する場合、~/.xinitrc の代わりにディスプレイマネージャのディスプレイ設定スクリプトを作成・編集する必要があります。

LightDM

LightDM ディスプレイマネージャの場合:

/etc/lightdm/display_setup.sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

スクリプトに実行可能属性を付与:

# chmod +x /etc/lightdm/display_setup.sh

/etc/lightdm/lightdm.conf[SeatDefaults] セクションを編集してスクリプトを実行するように lightdm を設定:

/etc/lightdm/lightdm.conf
[SeatDefaults]
display-setup-script=/etc/lightdm/display_setup.sh

再起動して、ディスプレイマネージャが起動するのを確認してください。

SDDM

SDDM ディスプレイマネージャの場合:

/usr/share/sddm/scripts/Xsetup
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

GDM

GDM ディスプレイマネージャの場合 .desktop ファイルを作成します:

/usr/share/gdm/greeter/autostart/display_setup.desktop
[Desktop Entry]
Type=Application
Name=Display setup
Exec=sh -c "xrandr --setprovideroutputsource modesetting NVIDIA-0; xrandr --auto"
NoDisplay=true
X-GNOME-AutoRestart=true

動作しない場合、以下のように /etc/X11/xinit/xinitrc.d ディレクトリにスクリプトを追加してください:

/etc/X11/xinit/xinitrc.d/nvidia-optimus.sh
#!/bin/sh
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto

そして次を実行:

# chmod +x /etc/X11/xinit/xinitrc.d/nvidia-optimus.sh

また、GDM が Xorg バックエンドを使うようになっているか確認してください。

KDM

KDE の KDM の場合、/usr/share/config/kdm/Xsetup に xrandr の行を追加してください。

3D の確認

NVIDIA グラフィックが使われているかどうかは mesa-demos をインストールして次のコマンドを実行することで確認できます:

$ glxinfo | grep NVIDIA

詳細情報

詳しい情報は、NVIDIA の公式ページ [2] を見て下さい。

トラブルシューティング

垂直同期が機能せずティアリングが発生する

残念ながら、この問題に解決方法はありません。また、NVIDIA はこのことを認識しています

Failed to initialize the NVIDIA GPU at PCI:1:0:0 (GPU fallen off the bus / RmInitAdapter failed!)

カーネルパラメータに rcutree.rcu_idle_gp_delay=1 を追加してください。詳しくは こちら を参照。

解像度や画面スキャンが正しく認識されず Xorg.log に EDID のエラーが表示される

nVidia ドライバーがディスプレイの EDID を検出できないのが原因です。手動で EDID ファイルのパスを指定するか、同じような方法で同一の情報を提供する必要があります。

EDID ファイルのパスを指定するには Xorg.conf の nvidia カードの Device セクションを編集して、以下の行を追加して適当にパスを置き換えてください:

/etc/X11/xorg.conf
Section "Device"
       	Option		"ConnectedMonitor" "CRT-0"
       	Option		"CustomEDID" "CRT-0:/sys/class/drm/card0-LVDS-1/edid"
	Option		"IgnoreEDID" "false"
	Option		"UseEDID" "true"
EndSection

Xorg が起動しない場合は、CRT という文字列を全て DFB に置き換えてみて下さい。card0 は intel カードの識別子でディスプレイは LVDS で接続されています。edid バイナリはこのディレクトリに存在します。ハードウェアの構成が異なっている場合、CustomEDID の値も変わってくるので確認するようにしてください。パスの先頭の /sys/class/drm は変わらないはずです。

または、read-edid などのツールを使って edid を自分で作成して、作成したファイルを使うようにドライバーを設定することもできます。modeline も使えますが、"UseEDID" と "IgnoreEDID" は変更するようにしてください。

nouveau を使う

オープンソースの nouveau ドライバー (xf86-video-nouveau) は PRIME という技術を使って Intel のドライバー (xf86-video-intel) との動的な切り替えが可能です。詳しくは、PRIME の記事を見て下さい。

Bumblebee を使う

省電力機能などの便利な機能を実装している Bumblebee を使いたい場合、Bumblebee の記事を見て下さい。