2016/12/28

x11vnc、Xvfb、Xdummy、VirtualGL とか

最終的には、HeadlessでRemoteで仮想VMも全部がGPUアクセラレーションが機能するようにしたいわけだが、ひとまずはx11vncとその周辺から。

gdm + gnome-session
前回までのセットアップでは、Xを手動でstartxして起動していたが、実験の意味もあり
GDMを入れることにした。

lightdmを最初に入れたが、なぜかログインできず。原因がXAuthorityパーミンションでもなく、解決困難だったため lightdm をやめて gdm に切り替えた。

$ sudo apt install gdm
これだけでXorgでgdmが自動起動するようになる。gnome-sessionも同時に入る。

$ sudo systemctl stop gdm
ってやってもXが止まってくれない。defaultがgraphical.targetだからかな。。

gdm 常時offにしたい時
$ sudo systemctl set-default multi-user.target してリブート

gdm 常時onにしたい時
$ sudo systemctl set-default graphical.target してリブート

$ systemctl get-defaultで
multi-user.targetとなっている場合は、systemctl start/stop gdmがうまく動く。

x11vnc
これを使うと、物理ディスプレイのXをVNCでミラーリングできる。物理ディスプレイをリモート操作できるっていう代物。
$ sudo apt install x11vnc

別のホストPCで使っているvnc4serverとかは仮想XドライバなのでGPUが機能しない。
GPUイネーブルなドライバが機能するのは、ディスプレイデバイスに接続されているX環境だけなのだ。正確には物理GPUアクセス可能なネイティブなビデオドライバが動くX環境。

x11vncは以下のXvfbやDummyと組み合わせて使うとより自由度が高まる。

Xvfb
Xの仮想フレームバッファドライバ。残念ながら3DはMesaで3DHWは使えない。
仮想X環境をいくつも簡単に作れるので便利ではある。
$ sudo apt install xvfb

XDummy
これはスクリプトと説明されているけれど、プログラムソースコードが含まれている。
これを動かすためには、dummyビデオドライバとgccやclangなどのコンパイラが必要。
$ sudo apt install xserver-xorg-video-dummy
$ sudo apt install clang
$ XDummy install

すると、スクリプト内に含まれているプログラムがコンパイルされて~/bin/xdummy.so が作られる。
これがx11vncが起動するXの仮想ドライバになる・・・のかな?・・・

XDummyスクリプトを通して、このxdummy.soを使うとdlsymがundefinedだとかでエラー。

XDummy スクリプトで cc でコンパイルしている行に" -ldl" を追加して再度実行。
ユーザレベル起動だとハング!!

$ sudo XDummy :0
でやっと動いた。rootじゃなくても動くようになったと書いてあったけどなぁ。
なにかやり忘れているのかもしれないが、ちゃんとした説明がなく、-help 頼み。

org-video-dummyのdummyドライバを使ったXorg起動とこのxdummy.soは関係あるのか、ないのかイマイチ体感できず。

XDummyはXvfbよりちょっとだけ優れているのだそうな。RandRとGLX extensionsが機能することと、2Dパフォーマンスがいいらしいが、結局仮想ドライバなので、GLXはソフトエミュ。

x11vnc設定ファイル
x11vncには山ほどのオプション設定がある。sshトンネル経由とか。。把握しきれない。
色々物色して、.x11vncrcと言う名前のファイルにオプションの'-'外して羅列することで設定できるとわかり、色々実験した結果、自分なりの.x11vncrcは以下の通り。

.x11vncrc の内容
usepw
nonc
shared
noxrecord
noxdamage
noxfixes
norc
xkb
repeat
scr_keyrepeat 4-10
o x11vnc.log
usepwで初回起動でpw設定できる。いちいち-storepasswordとかやらなくていい。
あとはだいたいお決まりオプション。

VirtualGL
これはXGLなアプリをこのツールを通して実行することで、GPUイネーブルなドライバが動いているXでGLコマンドを実行させて出力イメージを転送表示するツールみたいなもの。

Linux Packages からvirtualglのdebパッケージをダウンロード
$ sudo dpkg -i debファイル

vglrunとか、vgl**なコマンドが使えるようになる。
vglconnectやvglclientとかは、より遠方のX端末同士をつなぐ時に使うみたい。
自分がやりたいこととは若干違ったので、vglrunだけ試してみた。


次回は、これらを用意した後、現実に使う流れについて書く予定。

0 件のコメント:

コメントを投稿