「ハイブリッドグラフィックス」の版間の差分
細 (リンクを修正) |
Kusanaginoturugi (トーク | 投稿記録) (カテゴリを修正) |
||
(2人の利用者による、間の3版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category:グラフィック]] |
+ | [[Category:グラフィックス]] |
[[en:Hybrid graphics]] |
[[en:Hybrid graphics]] |
||
+ | [[ru:Hybrid graphics]] |
||
− | [[tr:Hibrit_Grafik_Teknolojileri]] |
||
[[zh-hans:Hybrid graphics]] |
[[zh-hans:Hybrid graphics]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
7行目: | 7行目: | ||
{{Related|PRIME}} |
{{Related|PRIME}} |
||
{{Related|Xorg}} |
{{Related|Xorg}} |
||
− | {{Related| |
+ | {{Related|外付け GPU}} |
{{Related articles end}} |
{{Related articles end}} |
||
− | ハイブリッドグラフィックは同一のコンピュータで2つのグラフィックカードを動作させるというコンセプトです。 |
+ | ハイブリッドグラフィックスは同一のコンピュータで2つのグラフィックカードを動作させるというコンセプトです。ノート PC の製造業者たちは、性能と電力消費量の異なる2つのグラフィックカードを単一のコンピュータ上で使用する技術を開発しました。ハイブリッドグラフィックスでは、専用 GPU (ディスクリート GPU) を非アクティブにしておいて、統合 GPU よりも 3D 描画パフォーマンスが要求される場合にアクティブ化させることで、高パフォーマンスなユースケースと省電力なユースケースの両方をサポートするように開発されています。 |
− | 様々なテクノロジーが存在し、問題を解決するために個々のメーカーによって独自の方法が開発されています。このテクノロジーは Windows ではしっかりとサポートされていますが、Linux ディストリビューションでは未だ実験的な段階です。このページでは、それぞれのアプローチとモデルについて軽く説明し、そして GNU/Linux システムのサポートが |
+ | 様々なテクノロジーが存在しており、この問題を解決するために個々のメーカーによって独自の方法が開発されています。このテクノロジーは Windows ではしっかりとサポートされていますが、Linux ディストリビューションでは未だ実験的な段階です。このページでは、それぞれのアプローチとモデルについて軽く説明し、そしてベンダーによる GNU/Linux システムのサポートが無いことに対するコミュニティによるソリューションを紹介します。 |
+ | {{Note|あなたの環境が 2010 年より前のものでない限り、システムは動的切り替えモデルを使用している可能性が高いです。以前のハイブリッドグラフィクスのソリューションでは、効果を発揮させるために再起動か、再ログインが必要なグラフィックスタック全体の再起動が必要でした。}} |
||
− | == 第一世代のハイブリッドモデル (ベーシックな切り替え) == |
||
+ | == 動的切り替え == |
||
− | {{Note|1=10年以上前のノートパソコンでない限り、大抵の場合は[[#動的な切り替えモデル|動的切り替え]]が使われます。}} |
||
+ | 新しいハイブリッドグラフィック技術のほとんどは2つのグラフィクカードを使用します: 専用 GPU と統合 GPU はフレームバッファに接続されていて、ハードウェアのマルチプレクサは存在しません。統合 GPU は常にオンになっており、省電力と構成のレンダリングのどちらが必要とされているのかに合わせて 専用 GPU はオン/オフが切り替えられます。ほとんどの場合、専用 GPU ''のみ''を使用するための方法は存在せず、GPU のオン/オフとレンダリングは全てソフトウェアによって制御されます。 |
||
− | ハイブリッドグラフィックの第一世代のノートパソコンではハードウェアマルチプレクサ ([[Wikipedia:Multiplexer|MUX]]) を使用していました。内蔵グラフィックプロセッサ (IGP) による省電力ながらローレベルな 3D レンダリングを使用するか、あるいは専用グラフィックプロセッサ (DGP) を使って電力消費量の多い高性能な 3D レンダリングを使うか選ぶことができます。ユーザーがグラフィックプロファイルを選べるのは起動あるいはログイン時だけで、ユーザーセッションの実行中はどちらかに固定されます。GPU の切り替えは以下のような手順で行われます: |
||
+ | 起動時に Linux カーネルは、あるビデオモードを使って起動し、アプリケーションによって使用される低レベルなグラフィックドライバをセットアップします。そして、ほとんどの Linux ディストリビューションは X.org を使用してグラフィク環境を整えます。最後に、いくつかの他のソフトウェアが起動されます: 最初にログインマネージャで、その次にウィンドウマネージャと言った具合です。このような階層的なシステムは、単一のグラフィックカードを使用する場合を想定して設計されています。 |
||
− | * ディスプレイをオフ |
||
− | * DGP をオン |
||
− | * マルチプレクサを切り替え |
||
− | * IGP をオフ |
||
− | * ディスプレイをオン |
||
+ | {{Note|NVIDIA のプロプライエタリドライバーを使用するハイブリッドグラフィックについては [[NVIDIA Optimus]] や [[Bumblebee]] を読んでください。その他 (AMD を使う場合や、[[nouveau]] で NVIDIA GPU を使う場合) については基本的に [[PRIME]] を読んでください。}} |
||
− | 一時的に画面が非表示になるためスムーズな切り替えではありません。下のモデルのほうがユーザーフレンドリです。 |
||
+ | === ディスクリート GPU の完全な電源オフ === |
||
− | == 動的な切り替えモデル == |
||
+ | バッテリー節約のために高性能なグラフィックプロセッサをオフにしたい場合があるでしょう。 |
||
− | {{Note|2016年現在、ほとんどのメーカーはこちらのモデルを使っています。}} |
||
+ | ==== BIOS/UEFI を使う ==== |
||
− | 新しいハイブリッドグラフィック技術のほとんどは [[#第一世代のハイブリッドモデル (ベーシックな切り替え)|基本的なスイッチング]]として2つのグラフィックカードを使います。 |
||
− | しかし、今では DGP と IGP はフレームバッファに接続されていてハードウェアマルチプレクサがありません。 |
||
− | IGP は常にオンとなっており省電力と高性能レンダリングどちらが必要なのかにあわせて DGP のオンオフが切り替わります。 |
||
− | ほとんどの場合は DGP だけを使用するということはできず、ソフトウェアによって切り替えやレンダリングが制御されます。 |
||
− | ブート時に、Linux カーネルはビデオモードを使用して起動されて、低水準なグラフィックドライバーが設定されます。ほとんどの Linux ディストリビューションは X.org を使用してグラフィック環境を整えます。最後に、ログインマネージャやウィンドウマネージャなどの他のソフトウェアが起動します。このような階層的なシステムは単一のグラフィックカードを使用する場合を想定して設計されています。 |
||
+ | 一部のノート PC のメーカーは、BIOS または UEFI に専用カードのオン/オフのためのオプションを提供しています。 |
||
− | {{Note|1=NVIDIA のプロプライエタリドライバーを使用するハイブリッドグラフィックについては [[NVIDIA Optimus]] や [[Bumblebee]] を読んでください。他のハイブリッドグラフィック (AMD Radeon を使用する場合や Nouveau ドライバーで NVIDIA のカードを使う場合) については [[PRIME]] を読んでください。}} |
||
+ | ==== udev ルールを使う ==== |
||
− | === ディスクリート GPU の完全な電源オフ === |
||
+ | まず、ディスプレイマネージャ設定から NVIDIA に関する設定を全て取り除いてください。 |
||
− | バッテリーの節約のためにグラフィックプロセッサーの電源をオフにしたい場合があるでしょう。この場合には以下の方法が可能です。 |
||
+ | 以下のファイルを作成して nouveau ドライバをブラックリストに追加してください: |
||
− | ==== bbswitch の使用 ==== |
||
+ | {{hc|/etc/modprobe.d/blacklist-nouveau.conf|2= |
||
− | NVidia GPU を使っている場合、 [[bbswitch]] を利用するとより安全に電源の制御が行えます。[[bbswitch]] は ディスクリート GPU を必要ないとき、あるいはブート時に自動的に無効化するため、正しい ACPI の呼び出しを行うカーネルパッケージで構成されています。 |
||
+ | blacklist nouveau |
||
+ | options nouveau modeset=0 |
||
+ | }} |
||
+ | そして、以下のルールを追加してください: |
||
− | {{Note|カーネル 4.8 以降では PCI Express の電源管理が動作しません。[[Bumblebee#カーネル 4.8 で電源管理が機能しない]] を参照。}} |
||
+ | {{hc|/etc/udev/rules.d/00-remove-nvidia.rules|2= |
||
− | ==== acpi_call の使用 ==== |
||
+ | # Remove NVIDIA USB xHCI Host Controller devices, if present |
||
+ | ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1" |
||
+ | # Remove NVIDIA USB Type-C UCSI devices, if present |
||
− | [[bbswitch]] がサポートしない GPU を使っている場合、あるいは他の選択肢として、 {{pkg|acpi_call}} パッケージをインストールすることで手動で行うことができます。 |
||
+ | ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1" |
||
+ | # Remove NVIDIA Audio devices, if present |
||
− | {{Tip|[[公式リポジトリ]]に含まれていないカーネルを使っている場合、代わりに {{Pkg|acpi_call-dkms}} を使ってください。[[DKMS]] も見てください。}} |
||
+ | ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1" |
||
+ | # Remove NVIDIA VGA/3D controller devices |
||
− | パッケージをインストールしたらカーネルモジュールをロードしてください: |
||
+ | ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1" |
||
+ | }} |
||
+ | 再起動し、{{ic|lspci}} を実行して NVIDIA GPU が存在しているか確認してください。 |
||
− | # modprobe acpi_call |
||
+ | ==== bbswitch を使う ==== |
||
− | カーネルモジュールをロードしたら次のスクリプトをダウンロードして、実行します: |
||
+ | NVIDIA GPU を使っている場合、[[bbswitch]] を使うことでより安全に電源の制御が行なえます。[[bbswitch]] は、ディスクリート GPU が必要とされていない時やブート時にその GPU を無効化する適切な ACPI 呼び出しを自動的に発行するカーネルパッケージで構成されています。 |
||
− | https://raw.githubusercontent.com/mkottman/acpi_call/master/examples/turn_off_gpu.sh |
||
+ | {{Note|カーネル 4.8 以降、PCI-E ポート電源管理の方法では bbswitch は機能しません。詳細は [[Bumblebee#カーネル 4.8 で電源管理が機能しない]] を参照してください。}} |
||
− | スクリプトは全てのデータバスを検査して、それらの電源を切ろうと試みます。この際、以下のように出力されます: |
||
+ | ==== acpi_call を使う ==== |
||
− | Trying \_SB.PCI0.P0P1.VGA._OFF: failed |
||
− | Trying \_SB.PCI0.P0P2.VGA._OFF: failed |
||
− | Trying \_SB_.PCI0.OVGA.ATPX: failed |
||
− | Trying \_SB_.PCI0.OVGA.XTPX: failed |
||
− | Trying \_SB.PCI0.P0P3.PEGP._OFF: failed |
||
− | Trying \_SB.PCI0.P0P2.PEGP._OFF: failed |
||
− | Trying \_SB.PCI0.P0P1.PEGP._OFF: failed |
||
− | Trying \_SB.PCI0.MXR0.MXM0._OFF: failed |
||
− | Trying \_SB.PCI0.PEG1.GFX0._OFF: failed |
||
− | Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed |
||
− | Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed |
||
− | '''Trying \_SB.PCI0.PEG0.PEGP._OFF: works!''' |
||
− | Trying \_SB.PCI0.XVR0.Z01I.DGOF: failed |
||
− | Trying \_SB.PCI0.PEGR.GFX0._OFF: failed |
||
− | Trying \_SB.PCI0.PEG.VID._OFF: failed |
||
− | Trying \_SB.PCI0.PEG0.VID._OFF: failed |
||
− | Trying \_SB.PCI0.P0P2.DGPU._OFF: failed |
||
− | Trying \_SB.PCI0.P0P4.DGPU.DOFF: failed |
||
− | Trying \_SB.PCI0.IXVE.IGPU.DGOF: failed |
||
− | Trying \_SB.PCI0.RP00.VGA._PS3: failed |
||
− | Trying \_SB.PCI0.RP00.VGA.P3MO: failed |
||
− | Trying \_SB.PCI0.GFX0.DSM._T_0: failed |
||
− | Trying \_SB.PCI0.LPC.EC.PUBS._OFF: failed |
||
− | Trying \_SB.PCI0.P0P2.NVID._OFF: failed |
||
− | Trying \_SB.PCI0.P0P2.VGA.PX02: failed |
||
− | Trying \_SB_.PCI0.PEGP.DGFX._OFF: failed |
||
− | Trying \_SB_.PCI0.VGA.PX02: failed |
||
+ | bbswitch によってサポートされていない GPU においては、{{pkg|acpi_call}} パッケージで同じことを手動で行うことができます。 |
||
− | "works" という文字はスクリプトが GPU が接続されているバスを発見して電源をオフにしたことを意味しています。バッテリーの持ちが良くなっているはずです。 |
||
+ | {{Tip|[[公式リポジトリ]]に含まれていないカーネルを使っている場合、代わりに {{Pkg|acpi_call-dkms}} を使ってください。[[DKMS]] も見てください。}} |
||
− | {{Tip| GPU を無効化した後に、システムのハイバーネートやサスペンドで問題があった場合には、適切な acpi_call を送出して有効化させることを試して下さい。こちらも参照してください [[電源管理#サスペンド/リジュームのサービスファイル]] 。}} |
||
+ | |||
+ | パッケージをインストールしたら、{{ic|acpi_call}} カーネルモジュールをロードしてください: |
||
+ | |||
+ | # modprobe acpi_call |
||
+ | |||
+ | カーネルモジュールをロードしたら、{{ic|/usr/share/acpi_call/examples/turn_off_gpu.sh}} スクリプトを実行してください。 |
||
+ | |||
+ | このスクリプトは、既知のデータバスを全て走査し、それらの電源を切ろうと試みます。この際、以下のように出力されます: |
||
+ | |||
+ | {{hc|# /usr/share/acpi_call/examples/turn_off_gpu.sh| |
||
+ | Trying \_SB.PCI0.P0P1.VGA._OFF: failed |
||
+ | Trying \_SB.PCI0.P0P2.VGA._OFF: failed |
||
+ | Trying \_SB_.PCI0.OVGA.ATPX: failed |
||
+ | Trying \_SB_.PCI0.OVGA.XTPX: failed |
||
+ | Trying \_SB.PCI0.P0P3.PEGP._OFF: failed |
||
+ | Trying \_SB.PCI0.P0P2.PEGP._OFF: failed |
||
+ | Trying \_SB.PCI0.P0P1.PEGP._OFF: failed |
||
+ | Trying \_SB.PCI0.MXR0.MXM0._OFF: failed |
||
+ | Trying \_SB.PCI0.PEG1.GFX0._OFF: failed |
||
+ | Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed |
||
+ | Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed |
||
+ | '''Trying \_SB.PCI0.PEG0.PEGP._OFF: works!''' |
||
+ | Trying \_SB.PCI0.XVR0.Z01I.DGOF: failed |
||
+ | Trying \_SB.PCI0.PEGR.GFX0._OFF: failed |
||
+ | Trying \_SB.PCI0.PEG.VID._OFF: failed |
||
+ | Trying \_SB.PCI0.PEG0.VID._OFF: failed |
||
+ | Trying \_SB.PCI0.P0P2.DGPU._OFF: failed |
||
+ | Trying \_SB.PCI0.P0P4.DGPU.DOFF: failed |
||
+ | Trying \_SB.PCI0.IXVE.IGPU.DGOF: failed |
||
+ | Trying \_SB.PCI0.RP00.VGA._PS3: failed |
||
+ | Trying \_SB.PCI0.RP00.VGA.P3MO: failed |
||
+ | Trying \_SB.PCI0.GFX0.DSM._T_0: failed |
||
+ | Trying \_SB.PCI0.LPC.EC.PUBS._OFF: failed |
||
+ | Trying \_SB.PCI0.P0P2.NVID._OFF: failed |
||
+ | Trying \_SB.PCI0.P0P2.VGA.PX02: failed |
||
+ | Trying \_SB_.PCI0.PEGP.DGFX._OFF: failed |
||
+ | Trying \_SB_.PCI0.VGA.PX02: failed}} |
||
+ | |||
+ | "works" は、スクリプトが GPU に接続されているバスを発見して、チップをオフにしたことを意味します。バッテリーの残り時間が伸びていることから、これを確認できるはずです。 |
||
+ | |||
+ | {{Tip|GPU を無効化した後に、システムのハイバーネートやサスペンドで問題があった場合には、適切な acpi_call を送出して有効化させてみてください。[[電源管理#サスペンド/リジュームのサービスファイル]] も参照してください。}} |
||
===== GPU の電源を自動的にオフにする ===== |
===== GPU の電源を自動的にオフにする ===== |
||
− | 上記のままでは GPU プロセッサは再起動によって元に戻ります。これに対応するために、 |
+ | 上記のままでは GPU プロセッサは再起動によって元に戻ります。これに対応するために、[[カーネルモジュール#モジュールの自動ロード|ブート時にモジュールをロード]]してください: |
{{hc|/etc/modules-load.d/acpi_call.conf| |
{{hc|/etc/modules-load.d/acpi_call.conf| |
||
#Load 'acpi_call.ko' at boot. |
#Load 'acpi_call.ko' at boot. |
||
− | acpi_call |
+ | acpi_call |
+ | }} |
||
====== 起動時 ====== |
====== 起動時 ====== |
||
− | 起動時に GPU をオフにしたい場合、[[ |
+ | 起動時に GPU をオフにしたい場合、[[systemd-tmpfiles]] を使うことが可能です。 |
− | {{hc|/etc/tmpfiles.d/acpi_call.conf| |
+ | {{hc|/etc/tmpfiles.d/acpi_call.conf| |
+ | w /proc/acpi/call - - - - ''\\_SB.PCI0.PEG0.PEGP._OFF''}} |
||
− | 上記の設定は起動時に systemd によってロードされます。特定の OFF シグナルを {{ic|/proc/acpi/call}} ファイルに書き込んで電源を切っています。{{ic|\_SB.PCI0.PEG0.PEGP._OFF}} は適当な値に置き換えてください (バックスラッシュでエスケープする必要があります)。 |
||
+ | |||
+ | 上記の設定は起動時に systemd によってロードされます。これは、特定の OFF シグナルを {{ic|/proc/acpi/call}} ファイルに書き込んで電源を切っています。もちろん、{{ic|\_SB.PCI0.PEG0.PEGP._OFF}} の部分は適当な値に置き換えてください (バックスラッシュでエスケープする必要があります)。 |
||
====== X サーバ初期化後 ====== |
====== X サーバ初期化後 ====== |
||
− | + | 一部のシステムでは、ディスクリート GPU を X サーバの初期化の前に電源オフにすることで、システムがハングするかもしれません。このような場合、X サーバの初期化が終わった後に GPU の電源を落すのがよいでしょう。これはいくつかのディスプレイマネージャでは可能で、例えば [[LightDM]] では、''display-setup-script'' seat configuration パラメータが root 権限で実行するスクリプトとして使えて、GPU を無効化することができます。 |
|
− | このような場合、 X サーバの初期化が終わった後に GPU の電源を落すのがよいでしょう。これはいくつかのディスプレイマネージャでは可能で、例えば [[LightDM]] では、 ''display-setup-script'' seat configuration パラメータが root 権限で実行するスクリプトとして使えて、 GPU を無効化することができます。 |
||
=== System76 === |
=== System76 === |
||
− | + | 一部の System76 ラップトップ([[System76 Oryx Pro|Oryx Pro]] など)には独自のハイブリッドグラフィックオプションがあります。これを使うには、{{AUR|system76-power}} をインストールし、{{ic|system76-power.service}} サービスを[[有効化]]して、{{ic|system76-power graphics hybrid}} を実行してください。 |
|
+ | |||
+ | ==== ディスクリート GPU の完全な電源オフ ==== |
||
+ | |||
+ | まず、{{ic|system76-power grahics integrated}} を実行し再起動して、統合グラフィックスモードで動作させてください。統合モードになったら、{{ic|system76-power graphics power off}} を実行してディスクリートグラフィックスカードの電源を落としてください。このコマンドは永続的ではなく、起動する度に実行する必要があります。 |
||
+ | |||
+ | {{TranslationStatus|Hybrid graphics|2023-08-24|779608}} |
2024年9月3日 (火) 22:42時点における最新版
関連記事
ハイブリッドグラフィックスは同一のコンピュータで2つのグラフィックカードを動作させるというコンセプトです。ノート PC の製造業者たちは、性能と電力消費量の異なる2つのグラフィックカードを単一のコンピュータ上で使用する技術を開発しました。ハイブリッドグラフィックスでは、専用 GPU (ディスクリート GPU) を非アクティブにしておいて、統合 GPU よりも 3D 描画パフォーマンスが要求される場合にアクティブ化させることで、高パフォーマンスなユースケースと省電力なユースケースの両方をサポートするように開発されています。
様々なテクノロジーが存在しており、この問題を解決するために個々のメーカーによって独自の方法が開発されています。このテクノロジーは Windows ではしっかりとサポートされていますが、Linux ディストリビューションでは未だ実験的な段階です。このページでは、それぞれのアプローチとモデルについて軽く説明し、そしてベンダーによる GNU/Linux システムのサポートが無いことに対するコミュニティによるソリューションを紹介します。
目次
動的切り替え
新しいハイブリッドグラフィック技術のほとんどは2つのグラフィクカードを使用します: 専用 GPU と統合 GPU はフレームバッファに接続されていて、ハードウェアのマルチプレクサは存在しません。統合 GPU は常にオンになっており、省電力と構成のレンダリングのどちらが必要とされているのかに合わせて 専用 GPU はオン/オフが切り替えられます。ほとんどの場合、専用 GPU のみを使用するための方法は存在せず、GPU のオン/オフとレンダリングは全てソフトウェアによって制御されます。
起動時に Linux カーネルは、あるビデオモードを使って起動し、アプリケーションによって使用される低レベルなグラフィックドライバをセットアップします。そして、ほとんどの Linux ディストリビューションは X.org を使用してグラフィク環境を整えます。最後に、いくつかの他のソフトウェアが起動されます: 最初にログインマネージャで、その次にウィンドウマネージャと言った具合です。このような階層的なシステムは、単一のグラフィックカードを使用する場合を想定して設計されています。
ディスクリート GPU の完全な電源オフ
バッテリー節約のために高性能なグラフィックプロセッサをオフにしたい場合があるでしょう。
BIOS/UEFI を使う
一部のノート PC のメーカーは、BIOS または UEFI に専用カードのオン/オフのためのオプションを提供しています。
udev ルールを使う
まず、ディスプレイマネージャ設定から NVIDIA に関する設定を全て取り除いてください。
以下のファイルを作成して nouveau ドライバをブラックリストに追加してください:
/etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau options nouveau modeset=0
そして、以下のルールを追加してください:
/etc/udev/rules.d/00-remove-nvidia.rules
# Remove NVIDIA USB xHCI Host Controller devices, if present ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1" # Remove NVIDIA USB Type-C UCSI devices, if present ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1" # Remove NVIDIA Audio devices, if present ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1" # Remove NVIDIA VGA/3D controller devices ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
再起動し、lspci
を実行して NVIDIA GPU が存在しているか確認してください。
bbswitch を使う
NVIDIA GPU を使っている場合、bbswitch を使うことでより安全に電源の制御が行なえます。bbswitch は、ディスクリート GPU が必要とされていない時やブート時にその GPU を無効化する適切な ACPI 呼び出しを自動的に発行するカーネルパッケージで構成されています。
acpi_call を使う
bbswitch によってサポートされていない GPU においては、acpi_call パッケージで同じことを手動で行うことができます。
パッケージをインストールしたら、acpi_call
カーネルモジュールをロードしてください:
# modprobe acpi_call
カーネルモジュールをロードしたら、/usr/share/acpi_call/examples/turn_off_gpu.sh
スクリプトを実行してください。
このスクリプトは、既知のデータバスを全て走査し、それらの電源を切ろうと試みます。この際、以下のように出力されます:
# /usr/share/acpi_call/examples/turn_off_gpu.sh
Trying \_SB.PCI0.P0P1.VGA._OFF: failed Trying \_SB.PCI0.P0P2.VGA._OFF: failed Trying \_SB_.PCI0.OVGA.ATPX: failed Trying \_SB_.PCI0.OVGA.XTPX: failed Trying \_SB.PCI0.P0P3.PEGP._OFF: failed Trying \_SB.PCI0.P0P2.PEGP._OFF: failed Trying \_SB.PCI0.P0P1.PEGP._OFF: failed Trying \_SB.PCI0.MXR0.MXM0._OFF: failed Trying \_SB.PCI0.PEG1.GFX0._OFF: failed Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed Trying \_SB.PCI0.PEG0.PEGP._OFF: works! Trying \_SB.PCI0.XVR0.Z01I.DGOF: failed Trying \_SB.PCI0.PEGR.GFX0._OFF: failed Trying \_SB.PCI0.PEG.VID._OFF: failed Trying \_SB.PCI0.PEG0.VID._OFF: failed Trying \_SB.PCI0.P0P2.DGPU._OFF: failed Trying \_SB.PCI0.P0P4.DGPU.DOFF: failed Trying \_SB.PCI0.IXVE.IGPU.DGOF: failed Trying \_SB.PCI0.RP00.VGA._PS3: failed Trying \_SB.PCI0.RP00.VGA.P3MO: failed Trying \_SB.PCI0.GFX0.DSM._T_0: failed Trying \_SB.PCI0.LPC.EC.PUBS._OFF: failed Trying \_SB.PCI0.P0P2.NVID._OFF: failed Trying \_SB.PCI0.P0P2.VGA.PX02: failed Trying \_SB_.PCI0.PEGP.DGFX._OFF: failed Trying \_SB_.PCI0.VGA.PX02: failed
"works" は、スクリプトが GPU に接続されているバスを発見して、チップをオフにしたことを意味します。バッテリーの残り時間が伸びていることから、これを確認できるはずです。
GPU の電源を自動的にオフにする
上記のままでは GPU プロセッサは再起動によって元に戻ります。これに対応するために、ブート時にモジュールをロードしてください:
/etc/modules-load.d/acpi_call.conf
#Load 'acpi_call.ko' at boot. acpi_call
起動時
起動時に GPU をオフにしたい場合、systemd-tmpfiles を使うことが可能です。
/etc/tmpfiles.d/acpi_call.conf
w /proc/acpi/call - - - - \\_SB.PCI0.PEG0.PEGP._OFF
上記の設定は起動時に systemd によってロードされます。これは、特定の OFF シグナルを /proc/acpi/call
ファイルに書き込んで電源を切っています。もちろん、\_SB.PCI0.PEG0.PEGP._OFF
の部分は適当な値に置き換えてください (バックスラッシュでエスケープする必要があります)。
X サーバ初期化後
一部のシステムでは、ディスクリート GPU を X サーバの初期化の前に電源オフにすることで、システムがハングするかもしれません。このような場合、X サーバの初期化が終わった後に GPU の電源を落すのがよいでしょう。これはいくつかのディスプレイマネージャでは可能で、例えば LightDM では、display-setup-script seat configuration パラメータが root 権限で実行するスクリプトとして使えて、GPU を無効化することができます。
System76
一部の System76 ラップトップ(Oryx Pro など)には独自のハイブリッドグラフィックオプションがあります。これを使うには、system76-powerAUR をインストールし、system76-power.service
サービスを有効化して、system76-power graphics hybrid
を実行してください。
ディスクリート GPU の完全な電源オフ
まず、system76-power grahics integrated
を実行し再起動して、統合グラフィックスモードで動作させてください。統合モードになったら、system76-power graphics power off
を実行してディスクリートグラフィックスカードの電源を落としてください。このコマンドは永続的ではなく、起動する度に実行する必要があります。