OpenGL Remote

リモートでOpenGLを動かしてローカルにその画面を写す方法
リモート Ubuntu 16.04 + GeForce GTX 1060 + lightdm ローカル mac OS X High Sierra 10.13.4
で確認しました。

VirtualGL + VNC による方法

基本的には下記手順の通り。

github.com

リモートにVirtualGL のインストール

sudo dpkg -i virtualgl_*_amd64.deb

リモートのVirtualGL の設定

sudo systemctl stop lightdm
/opt/VirtualGL/bin/vglserver_config

vglserver_configの途中で確認される事項は下記を確認

User’s Guide for VirtualGL 2.2.1

sudo systemctl start lightdm
xauth merge /etc/opt/VirtualGL/vgl_xauth_key

リモートにTurboVNC のインストール

sudo dpkg -i turbovnc_*_amd64.deb

リモートでTurboVNCの起動

/opt/TurboVNC/bin/vncserver -depth 24

起動した時の:1などを確認。ポート番号や環境変数として指定する値になる。

ローカルからリモートへVNC接続

TurboVNCを起動した時:1であれば普通5901番ポートなので
VNCで<IPアドレス>:1に接続
真っ黒な画面が表示されれば成功

リモートのターミナルで表示させたいOpenGLアプリを起動する。

今回は歯車を表示してくれる glxgears を起動してみる。

DISPLAY=:1 vglrun glxgears

DISPLAY=:1 の数字は起動したVNCの番号による

Direct Rendering の確認

vglrun /opt/VirtualGL/bin/glxinfo -c |grep 

実行した結果、Yesであればちゃんとビデオカードで処理されている(らしい)

X Forward による方法

上手く行きませんでした。

lightdm等のウィンドウマネージャにGLX アクセスを許可する。

lightdmだと /etc/lightdm/lightdm.conf.d/ に50-xserver-command.conf を作成し、下記を書き込む。

[SeatDefaults]
xserver-command=X -core +iglx

環境変数のLD_PRELOADの設定はクライアントがMacの場合必要ないかも。

itakeshi.hatenablog.com

libGL の場所を探す。

find /usr -iname "*libGL.so*" -exec ls -l -- {} + 

askubuntu.com

Mac OS X の場合 XQuartz を 2.7.9 以上にした上で下記コマンド

defaults write org.macosforge.xquartz.X11 enable_iglx -bool true

Setting X11 Forwarding for GUI Applications