XephyrとXvncを駆使して、可変サイズデスクトップを提供する

追記 : 今日TigerVNCがリリースされ、XRANDR等も正常にサポートしている。というわけでいきなりこのようなテクニックを駆使する必要が無くなってしまった。。
要するにX11サーバを3つ立てる。

  • 1600x1200固定サイズのXvnc - ここでXephyrを動かす
  • Xephyr - ここでデスクトップ環境を動かす
  • リモートユーザの希望に合わせたサイズのXvnc - ここで上のXvncをvncviewerで表示させる

都合、Xephyr1つ、Xvnc2つ、VNCビューア2つが必要と言うことになる。ちょっと無駄すぎる気がするが、常識的なパフォーマンスで動作するのでよしとする。
最初の2つは、ユーザのセッション中は常に起動していなければならない。最後のXvncは任意のタイミングで起動/終了することができる。
XRANDRに対応したXvncよりも、Xephyrの方が安定して動作するので好ましい。最近のXephyrはGLXにも対応しており、それ以外のエクステンションも大概備えている。
最初のXvncを直接vncviewerで見ないのは、単にクリッピングを行うため。
最後のXvnc上で動かすvncviewerは-fullscreenではなく、-gで明示的にジオメトリを指定する方が好ましい。
原理的には通常のX11とdummy ビデオドライバ、VNC拡張を使えば全く同じことが一つのXサーバで出来るはずだが、上手く行った試しがない。
TigerVNCも、将来的には直接このようなXRANDRによるダイナミックスケーリングをサポートすることになっているので、そのうちこのような(せせこましい)テクニックは不要になるだろう。↑追記参照