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だけ試してみた。


2016/12/10

Ubuntu16.04 intel-graphics-update-toolでドライバインストール

久々の投稿です。

Intel Skylakeアーキテクチャーのセットトップボックス Beebox-S 6200U/B/BB を買ってしまった。愛用中のShuttle DS57Uはサーバーに徹しているので、今回のBeeboxはデスクトップ環境で使っていこうと思う。


自分のBeebox-sの構成は、CPU Core-i5 6200U(Intel Graphics HD 520)、メモリ 16GB、ストレージ SATA-SSD 256GB + M.2-SSD 512GB。
ストレージデバイスを2つ内蔵できるのがいい。デュアルブートにしたかったので。
All SSDなので、ファンレスでOK。Shuttle DS57U並みに静音です。


Ubuntu16.04 Serverインストール
Desktopインストールではない。後で色々やりたいことがあるんで、gdmとか使わない。
インストーラで、Virtual Machine HostとOpenSSHにチェックを入れてインストール。
その後はおきまりの手順。
$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade

そうそう、Ubuntu14.04を入れようと思ったけど、構成が新しすぎなのか、ネットワークデバイスが認識されなかった。

X環境インストール
$ sudo apt install ubuntu-desktop とかで入れちゃうとgdmとかがセットアップされてしまうので、バラで入れていきます。

$ sudo apt install xserver-xorg-video-intel
$ sudo apt install xfonts-100dpi xfonts-75dpi xfonts-scalable
$ sudo apt install xserver-xorg
$ sudo apt install xinit

startsで素のXが起動する段階。

Xfce4 デスクトップ環境インストール

$ sudo apt install xfce4 xfce4-goodies

$ sudo apt install fonts-takao-pgothic fonts-takao-gothic fonts-takao-mincho
で、日本語フォントも入れる。
startxすると綺麗なXfce4デスクトップでXが動く。

Intelグラフィックスドライバインストール

ちょっと前までは、intel-graphics-installerがUbuntu15.10までしか対応していなくて難儀していた感がありましたが、今はintel-graphics-update-toolに改名され、16.04にも対応しました。
ここの 2.0.2 の方を使います。2.0.3は、16.10用です。

$ sudo apt install fonts-ancient-scripts
$ sudo apt install libpackagekit-glib2-18
$ sudo dpkg -i intel-graphics-update-tool_2.0.2_amd64.deb (ダウンロードしたやつ)

Xサーバー起動してドライバセットアップ
$ startx
$ sudo intel-gaphics-update-tool

で起動したインストーラウイザードに沿ってドライバインストールして再起動。

ちゃんと入ったかな?
$ sudo apt install mesa-utils
$ glxinfo | grep Device
  Device: Mesa DRI Intel(R) HD Graphics 520 (Skylake GT2) (0x1916)
よし。

$ glxinfo | grep version
server glx version string: 1.4
client glx version string: 1.4
GLX version: 1.4
    Max core profile version: 3.3
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.1
OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.2
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 11.2.2
OpenGL shading language version string: 1.30
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 11.2.2
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10

ふむ。3.3ですか。4.xなら良かったのに。GLES3.1はちょっと嬉しいかも。

ということで、このマシンではGPU関係のことを中心にいろいろと遊ぶ予定です。