X11色々
X11関係で徒然と。
テーマはXdmx, Xvnc, Xnest, VirtualGL, xrdp, rdesktopなど。
x11 転送関係
https://www.qoosky.io/techs/b71444ec83
複数のX11サーバを立ち上げる方法
一つのマシンに複数のコンソールを立ち上げる事は良くあること。立ち上げ後、CTRL-ALT-FunctionKeyでコンソールを切り替える。
一方、インストール直後は一台のマシンにX11サーバが一つ。コンソールの様にXも複数立ち上げられるか?
期待値は欲しい数だけXを立ち上げる事。Xの切り替えはコンソール同様に、C-ALT-FuncKeyだとやりやすい。
$ X :1 $ X :2 $ X :3
上記だと、上がったとしても、素のXサーバ。WindowManagerなども同時に起動したいなら、
$ startx -- :1 $ startx -- :2 $ startx -- :3
最近のXはディスプレイが無いと上がらない場合があり、その対策も必要かもしれない。
とりあえず、startxは複雑過ぎて上手く行かず、素のX で何とか立ち上がる。
ubuntu18.04 だと、2つ目のXのvtを指定しないと失敗した。また、root権限が必要とlogに出たのでsudo。立ち上がったのは、
- sudo X vt2 :1
しかし、Xが上がっただけでアプリもWMもいない。つまり、何もできない。:1用のWindowManagerを立上げ、適当にxterm等を上げて、C-A-F2 で:1のXに切り替わる。
startx では vt# を自動で検索してくれたり便利なのだが、動かないものは使えない。時間ができたら考える。
昔の仮想デスクトップのイメージ。
startx
さて、前項ではstartxのX起動中にfailしたため、startxの裏側を調査。
詳細はrefを参照して欲しいが簡単に。
全体の流れは個々のDistributionにより異なるがらUbuntuでは下記の流れ。
- stratx : /usr/bin/startx
- xinitrc : ~/.xinitrc or /etc/X11/xinit/xinitrc
- xserverrc : ~/, or /etc/X11/xinit/
- xsession : /etc/X11/Xsession
- session-mamager or window-mamager or terminal-emlator
とても深く、かつ、それぞれの段階で選択肢がある。また、OS毎に異なる。AIXの場合の始まりは、
startx [ -d Display:0 ] [ -t | -w ] [ -x Startup | [ -r Resources ] [ -m Window_Manager ] ] [ -wait ]
Xorgだと、
startx [ [ client ] options ... ] [ -- [ server ] options ... ]
https://www.x.org/releases/X11R6.9.0/doc/html/startx.1.html
以後はxorg版で。startx は色々な確認後、client用にxinitrcを探し、server用にxserverrc を探す。
個人用xinitrc, xserverrcがない場合、それぞれグローバルなものを使う。
xinitrc はxsession を起動するだけ。 xserverrcはXを起動するだけ。
xsessionは、/etc/X11/Xsession.d/配下のスクリプトを順に実行し、スクリプトがSM or WM or TEを起動する。
SMだった場合、SMがX とWMを起動する。
また、xinitのオプション形式は、
xinit [ [ client ] options ] [ -- [ server ] [ display ] options ]
これはstartxと全く同じ。機能もほぼ同様。実質的にxinitはstartxに置き換えられたと見るのが正しいのかもしれない。xinitはxorgが提供し、startxはデストリブューターが提供するという、提供元の違いと言う面もある。
ref
http://www.nslabs.jp/startx.rhtml
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_71/com.ibm.aix.cmds5/startx.htm
Xのスクリーン
X では、ディスプレイをhost:display.screen で指定する。displayがディスプレイ=Xサーバ、screenがモニター番号を示す。
一つのXサーバで複数のスクリーンを持つことが出来る。xorg.conf にてスクリーンを割り当てる。
スクリーンが複数ある場合、DISPLAY変数が異なるため、通常はウインドウの移動等はできない。よって、複数のスクリーンを一つに見せる xinerama extensionやrandrがある。また、nvidiaにはtwinviewドライバがある。
詳細は下記ref参照。
ref
マルチなX、なんなんなん行くさん
https://sites.google.com/site/teyasn001/ubuntu-12-10/huan-jing-bian-shudisplay
xnest/ xephyr
xnest/xephyr 共に基本機能は同じ。xnestは収束の方向で、今後の利用にはxephyrが推奨されている。
機能は、別のXserver のウインドウとして新たなXサーバー画面を表示する。
Xの中にXがあると言うネスト構造から、xnestと命名されたと思われる。
xnest/xephyrの用途としては、
Xのデスクトップ表示はxdmcpプロトコルであり、これを表示できるのはXサーバである。
中継は、app - x1 - x2 - x3 の様にappの出力をXサーバを中継して転送する。Firewall 等の理由により直接通信できない環境で、遠隔画面の表示が可能となる。
起動のコマンドラインは下記の通り。
DISPLAY=<d1> Xephyr -display :<d2>
- d1 : ウインドウを表示するXサーバ
- d2 : 新たに立ち上げるXサーバ
d2 Xサーバで受けたXプロトコルをd1のウインドウに表示する。xapp - d2 - d1 の流れでイメージが転送される。
OpenGL拡張等への対応が課題。
ref
xdmx
複数のXサーバの画面を一つのXdmxサーバで表示する。
一言で言うと、リモートXサーバの乗っ取り。
2つのpc a,bが共にXサーバを起動している時、aでxdmxを立ち上げると、bのXサーバがaのセカンドモニタとなる。
例えば、下記のような立上げコマンドをa上で打つと、a/b2台のpcがaのモニタとなる。入力はaのkbd,mouseが使える。
xdmx -display a:0 -display b:0 +xinerama
下記のコマンドラインとコンフィグファイルを使うと、4台のpcの画面を一台のサーバで表示する事ができる。
$ Xdmx :1 -configfile xdmx.conf -config example2 +xinerama &
xdmx.conf virtual example2 { display PC01:0 1280x1024 @0x0; display PC02:0 1280x1024 @1280x0; display PC03:0 1280x1024 @0x1024; display PC04:0 1280x1024 @1280x1024; }
コマンドラインを見ると分かるが、xinerama拡張を利用する。
通信における暗号化等のセキュリティについては詳細不明。
xdmxサーバを親、個別のXサーバを子と呼ぶと、参考例では、子から下記のsshで親に入りxdmxを立上げていた。
子$ ssh -X -c blowfish-cbc 親 親$ env|grep DISP 親$ xdmx :10 -display :0 -display 前のコマンド出力 -input 前のコマンド出力
上記は子のキーボードを使用する。親のキーボードを使用する場合は、-input :0とする。
ref
man xdmx
http://dmx.sourceforge.net/Xdmx.html#toc
https://www.atmarkit.co.jp/flinux/rensai/linuxtips/844xdmxsetting.html
http://etc2myday.jugem.jp/?eid=76
若き日の過ち
http://hakurei-shain.blogspot.com/2009/03/?m=1
intellilinx / How to share a window across multiple computers using Xorg
https://web.archive.org/web/20110225150836/http://intellilinux.info/node/25
xrandr
xinerama拡張を使ったxdmxと同様なXサーバ。
wikipediaによると、「XRandR(エックス・アール・アンド・アール)は、X Window System を再起動せずに解像度の変更や、画面の回転、表示モニターの切替え、マルチモニターの設定など、を行うことを容易にするライブラリとコマンドである。XRandRは、X Window System Resize and Rotate Extension を略したもの。」
コマンド
コマンドの使用例編集 モニターと可能な設定の表示 xrandr 全てのモニターを最高解像度で、同じ画面を表示する。 xrandr --auto 内蔵モニターの右側に外部モニターを表示。モニターの名前は、上の xrandr で調べられる。ここでは 内部モニター:LVDS、外部モニター:VGA とする。 xrandr --output VGA --right-of LVDS 内蔵モニターの上側に外部モニターを表示。 xrandr --output VGA --above LVDS マルチモニターを使用する場合、X11の設定ファイル:通常 /etc/X11/xorg.conf で、仮想スクリーンの範囲を大きく取っておく。 例: Virtual 2048 2048
ref
https://ja.m.wikipedia.org/wiki/XRandR
https://keithp.com/~keithp/talks/randr/
xvnc
その他
いつか。
ref
x11 サーバ複数起動
http://memolinux.blogspot.com/2009/06/xorg.html?m=1
Xdmx
https://www.atmarkit.co.jp/flinux/rensai/linuxtips/836usedmx.html