本家様 http://www.virtualgl.org/
Linux-PC環境において、X描画(2D/3D)を担当するPC側のXサーバ描画をより高速にするために、
大本のXクライアント側のリソースを使い描画を補助して、その結果をPC側に流して、PC側のX描画(2D/3D)の負担/未対応を減らす。
重い処理はLinux側のグラフィックカードに任せるって感じで、その担当が「VirtualGL」となる.
VirtualGLの結果をPC側で受ける方法に2つ方法がある。
- VirtualGLクライアントをPCにインストール(VGL Transport)
macOSのXサーバの「XQuartz」に対応
windowsPCではXサーバの「OpenText Exceed」「Cygwin/X」に対応 共に「MIT-SHM extension」機能があるのが重要. Xmingは未対応...
- VirtualGLと中継するVNCをサーバに入れて、このVNCサーバ経由でPCに接続する(X11 Transport)
汎用的に使用可能であるが、接続まで手間が掛かる 仮想フレームバッファっぽいのだが、、、、
VirtualGLサーバをインストールする †
*「サーバ」と「クライアント」、「Xサーバ」と「Xクライアント」の違いには要注意
サーバ側には最低限のX環境を構築して、一応X環境で動作を確認しておきます。nvidia/amdのカードで描画できるかなど
ここではnvidiaのQuadro K600を使ってます. Xがこのnvidiaカードを使用しています.
[root@e ~]# nvidia-smi
Tue Jul 18 23:39:04 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.51 Driver Version: 375.51 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Quadro K600 Off | 0000:01:00.0 Off | N/A |
| 25% 51C P8 N/A / N/A | 14MiB / 979MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 694 G /usr/bin/Xorg 8MiB |
| 0 955 G gnome-shell 5MiB |
+-----------------------------------------------------------------------------+
[root@e ~]#
次に、一旦シングルモードにして再起動して、「VirtualGL」をインストールします
入手先はhttps://sourceforge.net/projects/virtualgl/
で「Files」から「VirtualGL-2.5.2.x86_64.rpm」を入手した
[root@e ~]# systemctl set-default multi-user
[root@e ~]# reboot
:
[root@e ~]# yum localinstall ./VirtualGL-2.5.2.x86_64.rpm
インストール後に設定を行う.
[root@e ~]# /opt/VirtualGL/bin/vglserver_config
1) Configure server for use with VirtualGL
2) Unconfigure server for use with VirtualGL
X) Exit
Choose:
1 <---- [1]を入力してリターン
Restrict 3D X server access to vglusers group (recommended)?
[Y/n]
n <---- [n]を入力してリターン
Restrict framebuffer device access to vglusers group (recommended)?
[Y/n]
n <---- [n]を入力してリターン
Disable XTEST extension (recommended)?
[Y/n]
Y <---- [Y]を入力してリターン
:
(中略
:
1) Configure server for use with VirtualGL
2) Unconfigure server for use with VirtualGL
X) Exit
Choose:
X <---- [X]を入力してリターン
[root@e ~]#
これで設定は完了である。
*SELinuxは外した方がいいかも。あとfirewalldは停止の方向で
次に、Xをgraphicalモードに戻して再起動します
[root@e ~]# systemctl set-default graphical
[root@e ~]# reboot
以上でVirtualGLサーバのインストールと設定は完了
接続方法:VGL Transport、MIT-SHM extension機能を使用するなら †
前述の通り、MIT-SHM extensionな機能を有するPC-Xサーバで利用可能.
macOSのxquartz経由で試してみる. xquartz向けのVirtualGLはhttps://sourceforge.net/projects/virtualgl/
の「Files」から「VirtualGL-2.5.2.dmg」で、これをmacOSにインストールする. XQuartz
はインストール済みとします
ただし、ダウンロードした「VirtualGL-2.5.2.dmg」をダブルクリックすると下記メッセージが表示されるかも.

この場合、「システム環境設定」の「セキュリティーとプライバシー」画面へ行くと、
下記画面のように「"VirtualGL.pkg"は開発元を確認できないため、開けませんでした。」とあるが、その右隣の「そのまま開く」ボタンを押下して、VirtualGLのインストールを進めます。

するとVirtualGLのインストーラーが起動します。そのまま続けてインストールを完了させます

これでVirtualGLに関するアプリが/opt/VirtualGL配下にインストールされます.
っで下準備はこれで完了. 次に実際にopenglアプリを動かしてみます
http://www.virtualgl.org/vgldoc/2_2_1/#hd007に寄れば、XQuartzのターミナルを起動させ(単にXQuartzを起動すれば端末も起動します)、そこからVirtualGLのコマンドvglconnectを使ってVirtualGLサーバにアクセスします. 別にterminal.appでも出来ます
bash-3.2$ /opt/VirtualGL/bin/vglconnect illya@e
illya@e's password:
[illya@e ~]$
そしてこのセッションの中でVirtualGLサーバにインストールした VirtualGL コマンドで openGLアプリを起動します
[illya@e ~]$ /opt/VirtualGL/bin/vglrun \
/usr/local/cuda/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/particles
すると新たな画面が表示され particles アプリが動きます

windowsでcygwin/Xを使った場合 cygwin#o7698e63
接続方法:X11 Transport、VNCで繋ぎ通すなら †
前述の通り、見た目には「仮想フレームバッファ」で実際もそんなもんかな
Linuxにvncサーバをインストールします
[root@e ~]# yum install http://downloads.sourceforge.net/project/turbovnc/2.1/turbovnc-2.1.x86_64.rpm
そして、vncで接続したいユーザでアクセスして、vncserverを起動します
もし初回の起動ならパスワードの定義が求められます。
[illya@e ~]$ /opt/TurboVNC/bin/vncserver -depth 24
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
Desktop 'TurboVNC: e.sybyl.local:1 (illya)' started on display e.sybyl.local:1
Creating default startup script /home/illya/.vnc/xstartup.turbovnc
Starting applications specified in /home/illya/.vnc/xstartup.turbovnc
Log file is /home/illya/.vnc/e.sybyl.local:1.log
[illya@e ~]$
これでユーザ「illya」の「今」のアクセスは「e.sybyl.local:1」であると判明します。
事前の他のユーザでvncserverが起動されていれば、ディスプレイ番号が変わって「e.sybyl.local:2」とかになります。
vncserverを停止するには
[illya@e ~]$ /opt/TurboVNC/bin/vncserver -kill :1
Killing Xvnc process ID 2681
[illya@e ~]$
とします。-kill の以降はディスプレイ番号です
っで、まずはwindowsPCからアクセスしてみます。windowsPCにもTurboVNCをインストールして「e:1」へアクセスしてみます

パスワードが問われ、先ほど定義したパスワードを入力します。

っが、下図のような画面が表示されます。

この画面は「e.sybyl.local:1」のVirtualGL画面のようで、これにOpenGLなアプリの画面を流し込みます
[illya@e ~]$ export DISPLAY=localhost.localdomain:1
[illya@e ~]$ /opt/VirtualGL/bin/vglclient -detach -force
[illya@e ~]$ export VGL_CLIENT=127.0.0.1
[illya@e ~]$ /opt/VirtualGL/bin/vglrun \
/usr/local/cuda/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release/particles
最終行で実行すべきOpenGLなアプリをしていしてます。「particles」はNVIDIA_CUDA-8.0_Samplesのサンプルプログラムの一つです

他、「smokeParticles」とかも動きました。
[illya@e ~]$ cd /usr/local/cuda/NVIDIA_CUDA-8.0_Samples/bin/x86_64/linux/release
[illya@e release]$ /opt/VirtualGL/bin/vglrun ./smokeParticles

ただ、、この方法は面倒...