3Dシミュレーションや可視化を、GPUを備えたLinuxサーバーで実行し、Macから操作したい場合があります。サーバーでOpenGLの描画を行い、描画済みの画面をクライアントに転送する構成として、VirtualGLとTurboVNCを組み合わせる方法を紹介します。
2026年10月8日改訂。旧記事のUbuntu 18.04・vnc4serverを前提とした導入手順を見直しました。パッケージの対応OS・GPUドライバーは導入時点の公式資料で確認してください。
それぞれの役割
| 構成要素 | 役割 |
|---|---|
| LinuxサーバーのGPU | OpenGLアプリケーションの3D描画 |
| VirtualGL | アプリケーションの描画をサーバー側GPUへ向ける |
| TurboVNC Server | 仮想デスクトップの画面を転送する |
| MacのTurboVNC Viewer | 画面の表示とキーボード・マウス操作 |
| SSH | 接続の認証と通信経路の暗号化 |
X11の転送だけでGPU描画が利用できるとは限りません。また、この構成はOpenGL向けであり、Vulkanや各アプリケーション固有の描画方式にそのまま適用できるわけではありません。The VirtualGL Projectの公式ガイドで対象アプリケーションの条件を確認します。
導入前に確認すること
サーバーには、対応GPU・ドライバー・デスクトップ環境・SSH接続が必要です。VirtualGLのGLXバックエンドはGPUに接続したXサーバーを使用し、EGLバックエンドは対応するEGLデバイスを使用します。どちらを使うかで設定が変わります。
VirtualGLとTurboVNCは、それぞれの公式サイトから対応するパッケージを取得します。VirtualGLのサーバー設定は管理者が公式手順に従って行い、GPUを共有するユーザーを限定します。旧記事の設定回答を一律に流用せず、既存の画面セッションやアクセス権への影響も確認してください。
SSH経由で画面に接続する
以下は、標準の/opt/TurboVNCに導入済みのサーバーで、ディスプレイ番号1を使う例です。対応するVNCのTCPポートは5901です。空き番号や既存セッションを確認してから起動します。
サーバー上で実行します。-localhostにより、VNCの接続先をサーバー自身からの接続に限定します。
/opt/TurboVNC/bin/vncserver :1 -localhost
Mac側ではSSHのローカルポート転送を開きます。devuserはサーバーのログインユーザー、server.example.comは接続先、5901はこの例の転送用ポートです。実際の環境の値に置き換えます。
ssh -N -o ExitOnForwardFailure=yes \
-L 127.0.0.1:5901:127.0.0.1:5901 \
devuser@server.example.com
SSH接続を維持したまま、MacのTurboVNC Viewerで127.0.0.1::5901へ接続します。二重コロンの後ろはTCPポートを直接指定しています。Mac自身のローカルポートから、SSHを通じてサーバーのVNCへ到達する構成です。TurboVNCの公式ガイドにもSSHトンネルとローカル接続の説明があります。
アプリケーションをGPUで起動する
接続したVNCデスクトップ内のターミナルから、VirtualGLを介して起動します。your-opengl-appは対象アプリケーションの実行コマンドを表す例示名です。
/opt/VirtualGL/bin/vglrun your-opengl-app
まず公式ガイドの診断方法でGPUの利用を確認し、その後に対象アプリケーションを試します。画面が出ることとGPUで描画できることは別なので、レンダラー情報も確認します。
遅い・映らないときの切り分け
- GPUドライバー、GLX/EGLの選択、ユーザーのGPUアクセス権。
- VNCデスクトップの起動ログと、選択したデスクトップ環境の対応。
- SSHの転送ポートの競合、VNCのディスプレイ番号。
- アプリケーション固有のOpenGL要件。
- 回線遅延・帯域、画面解像度、転送画質。
描画速度と操作時の応答性は別の指標です。GPUを使っても通信遅延は残るため、実際のモデル・解像度・回線で評価してください。
