今回やりたかったのは、社内で複数の人が一台の共有マシンを使って、とある時間のかかる処理をするための環境作成です。
最初はxinetd+Xvfb+x11vncでgdmをあーやってこーやって…って色々試していたのですが、Windowsのリモートデスクトップ接続をクライアントに使えた方が便利だなぁとか思ってRDPで転送する方法がないか調べたところ、むしろさっきまで小難しくやろうとしていたすべてをまるっとまとめてやってくれるxrdpというものを発見!
これならシンクライアントっぽいものが一瞬で作れる!ということでさっそく導入してみたので手順解説します。
このxrdp、デフォルトのままならリモートデスクトップユーザからシステムに変更を加える作業はできないので、今回の用途に最適です。
xrdp | Get xrdp at SourceForge.net
ユーザの追加も、通常通りLinuxにユーザ追加するだけで、リモートデスクトップログインできるようになります。
VNCに対する利点は多分こんなところ
設定にあたってはこちらのブログのエントリが大変参考になりました。これがないとまともにキーボード使えませんでした。
- xrdp 0.5.0 (cvsベース) – Sceneries through the lenses
- xrdp 0.5.0 rpm for CentOS 5.4 x64 – Sceneries through the lenses
- xrdp 0.5.0 / 日本語入力 – Sceneries through the lenses
サーバはUbuntu Server 9.10(Karmic Koala)を使いました。別にUbuntuデスクトップ版でも良かった説。
とりあえずインストール時にこれらを選択しておきます。インストール後なら$ sudo taskselでもOK。
- Basic Ubuntu server
- OpenSSH Server
- Ubuntu desktop
xrdpですが、aptやSourceForgeからtar.gzでダウンロードできるものはバージョンが古く、Windows7のリモートデスクトップ接続クライアントに対応していません。なので、cvsレポジトリから最新を持ってくる必要があります。
今回チェックアウトしたものは2009-12-26に最終更新されたバージョンです。
まずは下準備とチェックアウトまで。
$ sudo aptitude update
$ sudo aptitude install cvs autoconf libtool libssl-dev libpam0g-dev libx11-dev libxfixes-dev tightvncserver scim scim-anthy
$ cd ~/
$ mkdir xrdp
$ cd xrdp
$ cvs -d:pserver:anonymous@xrdp.cvs.sourceforge.net:/cvsroot/xrdp login
$ cvs -z3 -d:pserver:anonymous@xrdp.cvs.sourceforge.net:/cvsroot/xrdp co .
$ cd xrdp
で、前述のブログを参考にいくつかファイルを修正します。
$ vi xrdp/lang.c
if ((code >= 0) && (code < 128))
を
if ((code >= 0) && (code < 135))
に。
$ vi xrdp/xrdp_types.h
struct xrdp_key_info keys_noshift[128];
struct xrdp_key_info keys_shift[128];
struct xrdp_key_info keys_altgr[128];
struct xrdp_key_info keys_capslock[128];
struct xrdp_key_info keys_shiftcapslock[128];
を
struct xrdp_key_info keys_noshift[135];
struct xrdp_key_info keys_shift[135];
struct xrdp_key_info keys_altgr[135];
struct xrdp_key_info keys_capslock[135];
struct xrdp_key_info keys_shiftcapslock[135];
に。
$ ./bootstrap
$ ./configure
$ make
$ sudo make install
次は日本語キーボード用にキーマップを作成します。キーマップファイルは/usr/local/bin/xrdp-genkeymapを使って作ることもできるのですが、「\」や「_」のキーが効かなくなる現象があるので、さきほどのエントリからコピーしてきます。
とは言ってもファイル単体では公開されていないので、xrdp-0.5.0-instfiles.patchから当該部分を引っこ抜いてくる形になります。
ちなみに自分で生成する場合は、GUI上の端末から(ここ重要)
$ sudo /usr/local/bin/xrdp-genkeymap /etc/xrdp/km-0411.ini
でOKです。
それ以外は普通にSSHから作業できます。認識する名前別にキーマップの複製。lnでもいいかも。
$ cd /etc/xrdp/
$ sudo cp km-0411.ini km-e0200411.ini
$ sudo cp km-0411.ini km-e0210411.ini
$ sudo cp km-0411.ini km-e0010411.ini
$ sudo vi /etc/xrdp/startwm.sh
startwm.shの内容は前述のエントリからまるごとコピペして上書きします。が、Ubuntuで試したところ、ログイン後にキー配列がめちゃくちゃになる現象(「qwerty」が「c.gvn 」になる)があるので、一行追加して対策します。
export XKL_XMODMAP_DISABLE=1
を、for WindowManager in $SESSIONSの前にでも入れておきます。
で、あとは起動するだけです。
$ sudo /etc/xrdp/xrdp.sh start
複数のユーザが同時にログインしても問題なく動作します。1200×1920とかの解像度でもストレスなく作業できました。
Mac OS Xな人々にはRemote Desktop Connection Client for Mac 2もあるのでばっちりです。
追記:あ、右シフトキーが効かない現象がありました。謎。