eGPUをイジェクト(取り外し)するターミナルコマンド

需要があるかどうかはわからないが、通常はメニューバーのアイコンから行う必要があるeGPUの取り外し(イジェクト)をターミナルで行う方法、及び関連コマンドを紹介する。

管理人の環境は以下の通り。

  • Mac mini 2018
  • macOS Catalina 10.15.6
  • Blackmagic eGPU Radeon Pro 580

eGPUイジェクトコマンド

ターミナルで下記のコマンドを実行するとeGPUがイジェクトされる。

なお、イジェクト可能なGPUだけがイジェクトされるため、CPU内蔵グラフィックなどは影響を受けない。

SafeEjectGPU Eject

上記コマンドを実行すると全てのアプリケーションが再起動し、eGPUのイジェクトが始まる。

「finalize」と出れば正常にイジェクト成功。

なお、eGPUをターミナルでイジェクトしてもeGPUに接続している外付けドライブなどの周辺機器はイジェクトされない。

外付けドライブなどをターミナル上でイジェクト・マウントする方法は下記記事を参照して頂きたい。

ターミナルでディスクを強制的にアンマウント・マウントする方法

ファイナライズに失敗した場合

前述のeGPUイジェクトコマンドは実験してみた限り、ファイナライズ処理がループしファイナライズに失敗することがある。

ファイナライズ処理がループすることがある

下記コマンドでイジェクトのキャンセルが可能だが、僕の環境では効果がなかった。

SafeEjectGPU Cancel

ファイナライズに失敗した場合、Thunderbolt 3ケーブルを物理的に接続解除する必要がある。

関連コマンド

マニュアルを表示

下記のコマンドでSafeEjectGPUコマンドのマニュアルを表示可能。

man SafeEjectGPU

使用可能なオプションには「Initiate」や「Relaunch」があるが、管理人の環境では実行しても一切変化が現れなかった。

Thunderbolt 3のPCI-Eストリームを切断

イジェクトした後に下記コマンドでkextをアンロードするとeGPUとのPCI-Eストリームを切断できるが、Catalinaではエラーが出る。

Thunderbolt 3のPCI-Eストリーム再接続

下記のコマンドでアンロードしたkextをロードすると再接続可能だが、前述の通り管理人の環境ではアンロードができないため、エラーは出ないものの効果を確認できない。

sudo kextload /System/Library/Extensions/AppleThunderboltPCIAdapters.kext/Contents/PlugIns/AppleThunderboltPCIUpAdapter.kext/

まとめ

eGPU.IOのフォーラムではイジェクトと再接続を正常に実行できたという報告が複数あり、イジェクトと再接続の処理を一括で行うスクリプトも紹介されているがmacOS Catalinaの管理人の環境では前述のようにエラーが出るため、イジェクトのみ可能な状況だ。

参考 Connect/Mount eGPU using command line eGPU.IO

SIPを無効化すればいいのかもしれないが、そこまでするなら普通にケーブルを再接続した方が早い。

ただ、macOS High SierraやMojaveを利用しているのであれば前述のコマンドでeGPUの切断と再接続を手間なく行える可能性があるため場合によっては便利かもしれない。

ここ数日ターミナルでeGPUを制御する方法を探っているため、もしmacOS Catalinaや次期Big Surでも有効な方法を発見したら改めて追記したい。