2008年 1月 16日 水曜日
|
|
Messages in cipher reflected in the looking glass [ Yasuhiro Fujitsuki's Weblog ] |
(JA) xrdp 0.4.0
http://xrdp.sourceforge.net/
で開発されている xrdp というソフトウェアがあります。
以前、このブログで紹介した事のある rdesktop は
Windows Terminal Server に接続するためのソフトウェアですが、
xrdp は linux を Terminal Server 化してしまうソフトウェアです。
(xrdp は rdesktop や vnc などの機能を内部で利用しているそうです。)
Linux や Solaris などの X-Window システムでは、
他のマシンに Xのアプリケーションを転送することなどは簡単なので、
用途は少なそうですが、xrdp を使うことにより、RDP でアクセス可能になるため、
Windows XP などのターミナルサーバ接続を利用して Linux に接続が行えるようになります。
っと、これがうれしいかどうかわかりませんが、せっかくなので試してみました。
linux用なんですけど、無謀にも Solaris Express 動かしてみようと思い、
中を除くと、autoconfを利用していないようで、Makefileしかありません。
Makefile を見ると、linux用に作り込んでいるので、Solaris用に改変が必要でした。
大まかに書くと、
- 全部のMakefile内の make を gmake に変更、install を/usr/ucb/install に変更。
- libxrdp/Makefile の LIBS = -ldl の -ldl を削除。
- sesman/Makefile の DEFINES に -D_POSIX_PTHREAD_SEMANTICS を追加。LDFLAGS に -lsocket を追加。
- sesman/libscp/Makefile の LDFLAGS の -lpthread を削除。
- sesman/tools/Makefile の LDFLAGS に -lsocketを追加。
その後、下記の通り、環境変数をセットし、gmake を実行。
# setenv PATH $PATH":/usr/sfw/bin" # setenv LD_LIBRARY_PATH /usr/lib:/usr/ccs/lib:/usr/sfw/lib # setenv LD /usr/sfw/bin/gld # # gmake # gmake install
これでとりあえずビルドはなんとかなりました。
ただ、本当にこの変更が正しいのか自信はまったくありません(笑。
一応、インストールされたので、
# /usr/local/xrdp/xrdp_control.sh start
を実行して daemon を起動しようとしましたが、動きません。
中身を見てみると、一行めが #!/bin/sh になってます。
Linux の場合、sh = bash だったりするので、 #!/bin/bash に変更しました。
それ以外に、grep を利用してプロセスの存在を確認する部分があるのですが、
これも Solaris では動かないので変更しました。
#ps u --noheading -C $XRDP | grep -q -i $XRDP /usr/ucb/ps auc | ggrep -v xrdp_control.sh | ggrep -q -i $XRDP #ps u --noheading -C $SESMAN | grep -q -i $SESMAN /usr/ucb/ps auc | ggrep -q -i $SESMAN
これでなんとか、起動しました。
後は rdesktop などで接続したのですが、デスクトップが英語になってしまいます。
この制御は /usr/local/xrdp/startwm.sh に書いてあります。
一応、そのままでも動きますが、先頭は #!/bin/bash に変更。
あと、LANG を日本語に変更し、gnome-session を dtlogin の実行する Xsession.jds に変更しました。こうすると ATOK の起動も全部やってくれるので楽ちんです。^-^;
export LANG=ja_JP.UTF-8 # gnome which gnome-session if [ $? -eq 0 ]; then #gnome-session /usr/dt/config/Xsession.jds exit 0 fi
これで起動してみると動きますが、Solaris Expressではなんとか動いているという感じです。不安定だったり謎の挙動もあります…。
本当はソースをちゃんと確かめないといけないのでしょうが、
今回は Makefile を適当に改変^-^;しただけなので、当然と言えば当然かもしれません。
あと、キーボードが英語キーボードの配列になってます…。
それで、
http://xrdp.sourceforge.net/documents/keymap/newkeymap.html
を見てみると、xrdp 0.4.0 では外部 keymap ファイルには対応しておらず、
内部のキーマップを参照しているとのこと。
ちょっとソースコードを調べて見たところ、xrdp/lang.c が該当するようです。
中身を見てみると、en_US, Italy, en_UK, Portuguese(Brazil), German, French と書いてあります。
ここをイジれば、なんちゃって日本語対応もできそうです。
適当にイジってみて、何となく日本語キーボードを認識するようになりました。
0.5.0では外部キーマップに対応する予定らしいので、もうちょっとまともになっていくのかもしれません。
ということで、全部パッチにしてみました。
-
xrdp-0.4.0-ja.gdiff : 日本語キーボードレイアウトの追加パッチ
ja(0x0411), ja-JP.unicode(0xe000411)では強制的に日本語キーボードになります。xrdp/lang.c へのパッチです。 - xrdp-0.4.0-sxce.gdiff : Solaris Express 用パッチ
- startwm.sh : Solaris用日本語環境向け
# gpatch -p0 < xrdp-0.4.0-ja.gdiff
という感じで当ててください。
あとは上記の通り、gmake, gmake install (linuxの場合は patch, make, make install) でインストールすれば完了です。
xrdp-0.4.0-ja.gdiff は Linux でも使えると思います。
(追記 : 2008/01/23)
Solaris Express 用パッチ( xrdp-0.4.0-sxce.gdiff )に
sesman/env.c に対するパッチを追加しています。
コメントアウトした部分がどうも Segmentation Fault を引き起こすみたいです。
その前に pw_shell 変数の値を取得する部分があるのですが、
ここで値がうまく取れていないみたいなので、
セットしないようにしました。
g_clearenv();
//g_setenv("SHELL", pw_shell, 1);
g_setenv("PATH", "/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin", 1);
g_setenv("USER", username, 1);
g_sprintf(text, "%d", uid);
rdesktopでxrdpサーバに接続したところ(ログイン画面)
Solaris Express にログインしたところ (gnome)
Posted at 05:01午後 1 16, 2008 by Yasuhiro Fujitsuki in Linux & Solaris |