Docker 19.03で実装された–gpusを使ってGPUが使えるコンテナを作るで作ったGPUコンテナ上でXVfbを実行してブラウザを動かす、といった事をやりたかったのだけど、VirtualGLなどを駆使してみたり、このへんとかを見ながらガチャガチャやってみたが、結果的にうまくいかなかった

1
2
3
4
5
6
7
// glxinfoでディスプレイドライバを確認(Xvfbで作った仮想スクリーン)
container:/$ /opt/VirtualGL/bin/glxinfo -display :99.0 -c | grep "OpenGL vendor"
OpenGL vendor string: VMware, Inc.

// glxinfoでディスプレイドライバを確認(ホストからマウントしたスクリーン)
container:/$ /opt/VirtualGL/bin/glxinfo -display :0 -c | grep "OpenGL vendor"
OpenGL vendor string: NVIDIA Corporation

先に結論

Xvfbを使わず、Nvidia Linux Display DriverのAllowEmptyInitialConfigurationオプションを使って仮想ディスプレイを用意しました

1
$ sudo nvidia-xconfig --enable-all-gpus --allow-empty-initial-configuration --use-display-device=None --virtual=1920x1080

/etc/X11/xorg.confに以下のような内容が追加されます(xorg.conf自体が無い場合は新規作成してくれる)

1
2
3
4
5
6
7
8
9
10
11
12
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "AllowEmptyInitialConfiguration" "True"
Option "ConnectedMonitor" "None"
SubSection "Display"
Virtual 1920 1080
Depth 24
EndSubSection
EndSection

AllowEmptyInitialConfigurationとは

NVIDIA DRIVERS Linux x64 (AMD64/EM64T) Display Driver

上記より抜粋

立ち上げ時に接続されたディスプレイデバイスが検出されない場合でも Xサーバが始動できる新たなオプション、AllowEmptyInitialConfiguration を追加しました。このオプションは、”sudo nvidia-xconfig –allow-empty-initial-configuration”を動作することで、有効化することができます。

ようするに、わざわざXvfbを使用しなくても、Nvidia GPU単体でXサーバを起動出来るらしく、これを使用する事にしました

なんか動かないなーという時のログ出力先

0の所はディスプレイ番号?(未確認)

1
$ cat /var/log/Xorg.0.log

参考リンク