アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

XRDPでLinuxをRDPサーバーにする

Linuxで遠隔操作と言えば、sshでコンソールにつないで作業が普通ですね。
64kbpsでも割と快適に操作でき、信頼性も高いツールです。
WebサーバーやDBサーバー用途などでは不便なことは有りませんが、クライアント用途となるとGUIで遠隔操作出来ないと辛い場面が有ります。
(Gimpを操作とか、ローカルの画像を確認など)

もちろん、X11をネットワーク経由で使うのがシンプルですが、
ネットワークが100Mでつながっているならともかく、細い帯域の場合は非常に重い。
前に自宅PCからThunderbirdX11-forwardしたところ、メールの一覧を描画するのに1分くらいかかったことが(ry
あと、vncはそれに比べればマシですが、それでも遅い。

その点、WindowsのRDP(リモートデスクトッププロトコル)は早い。
光100Mでつながっていれば、ほぼローカルにかと思えるほど早い。
社内でも、LinuxクライアントからXen上のWindowsに接続してMS-Officeなど触っていますが、非常に快適です。
M$頑張りすぎ。

クライアントのrdesktopがあるのだから、サーバーも無いかと思いググってみると、ありました。
その名も XRDP。

とりあえず入れて使ってみたので、以下その手順を書いておきます。

1・インストール

$ sudo apt-get install xrdp

以上。

2・ユーザーの追加

XRDPを使うユーザーはxrdpグループに登録する必要があるので、
/etc/group

(省略)
xrdp:x:113:hogeuser

のように、groupに追加してください。

3・サービス起動

$ sudo /etc/init.d/xrdp start

Debianなので起動しているとはおもいますが念のため)

4・クライアントから接続

$ rdesktop 172.16.10.100 -a 16 -g 1200x1600 -k ja -K

こんな感じ
ちなみに、オプションですが、

172.16.10.100 xrdpを起動したサーバーのIP
-a 16 色深度16bit(8か16しか受付ないようです)
-g 1200x166 解像度
-k ja キーボードのタイプを日本語に
        (したはずですが、効かないようです)
-K キー入力を完全にフックさせない

この状態で実行すると、ログイン画面が表示されるので、

Moduleはsessman-Xvncを選択し、
ユーザー名とパスワードを入力すれば、ログイン出来ます。

4・使用感

VNCより高速に感じます。
試しにyoutubeで適当な動画を再生してみたところ、コマ落ちはしますがなんとか見られるレベルです。
(VNCだと反応がなくなる・・・)

あとは、音の転送が出来ればなお良しですが、-r sound を追加しても音が出ない。
同じオプションでwindows機に繋ぐと音は出るのでサーバー側の問題。
(内部はVNC使っているからしょうがない?)

もしかしたら、その辺りうまい方法が有るかもしれないので、引き続き調査します。


余談
そういえば、音声転送が出来たら、iPadにRDPクライアント入れてゲームが出来そうです。

それか、windowsで同じ事すればできますね。
だが断る

まあ、どちらにろ、3G回線の場合は使い物にならないとは思いますのでWifi限定で。

Debianを使ってシンクライアントっぽいものを作ってみました

この間、開発に使用していたWindows機(Thinkpad T23)のHDDが異音を発してお亡くなりになりました。
カッコン・・・カッコン・・・カッ・・カッ・・・カツン。
となって、何かアクセスしようとするとブルーバックになってしまいました。

こうなれば当然再起動しても無駄、HDD交換しか直す方法はありませんが、当然IDE2.5inなんて予備があるわけもなく、新品HDDを買って復活させるほど価値があるわけでも無いので、机の上に放置していました。

先日、プロジェクトの表示テストのため、リモートデスクトップWindowsにつないでIEのテストをしていましたが、
ひたすら、IE開く->確認->手直し->確認->ローカルのFireFox開く->確認・・・
仮想デスクトップ使っても切り替えが面倒なので、もう一つ画面がほしい。
リモートデスクトップが動く程度のマシンを探してまわりを見渡すと、壊れたThinkPadがふと目に入り、

「たかがハードディスクがやられただけだ!」

と台詞が浮かんできたので、これを使うことにしました。

さて、ハードディスクがやられた程度のThinkPadですが、割と致命的なところがやられています。
メインカメラの比ではありません。
むしろ足がなくなったようなものですが、

「あんなの飾りです!偉い人にはそれがわからんのですよ!」
要は、足の代わりにスラスターを使うと。

ということで、代用品を考えます。
ただし、お金はかけたくないということで自然と、

・ネットワークブート
・LiveCD
USBメモリにインストール
辺りになります。

・ネットワークブート -> DHCPの設定が必要なので、面倒+間違えると危険
・LiveCD -> メモリが128MBしか無いので、軽量化が必要なため面倒
USBメモリにインストール -> Debianからはscsiバイスとして見えるので、インストールは簡単、カスタマイズも簡単。

ということで、USBメモリのインストールを選択。


インストールは普通に、

まずUSBメモリをさします
lennyのCDを入れてます。
普通に最小インストールします。(ただし遅い)
 (゚д゚)ウマー

以上。

あとは細々とカスタマイズしていきます。
リモートデスクトップが使える程度のパッケージをインストールし、
synergyを入れて入力デバイスを共通化します。

インストール中のPC(命名:thinkpad)

マシン名設定


# hostname thinkpad
# echo thinkpad > /etc/hostname


sshのインストール


# apt-get install ssh


ネットワークの設定(/etc/network/interfaces)


auto eth0
iface eth0 inet static
address 192.168.xxx.xxx
network 192.168.yyy.yyy
netmask 255.255.255.0
gateway 192.168.yyy.yyy


(以下、sshで作業)

Xのインストール


# apt-get install xserver-xorg


rdesktopのインストール


# apt-get install rdesktop


synergyのインストール


# apt-get install synergy


起動スクリプトの準備


#!/bin/sh

if [ -z `pidof X` ]
then
  X  &
  sleep 8
fi
export DISPLAY=:0
kill -KILL `pidof synergyc`
synergyc 192.168.xxx.xxx    # メインPCのアドレス
rdesktop 192.168.yyy.yyy -f -u 'hoge-domain\hogeuser' -K -k ja  &   # リモートデスクトップ接続先のWindows機とアカウントを指定


このスクリプトを /usr/local/bin/startrdesktop あたりに配置し、

/etc/rc.localに


/usr/local/bin/startrdesktop  &

を追記すれば完成です。
これで、再起動すると自動的にXとrdesktopとsynergyが立ち上がります。


次に、メインPCにてsynergys(サーバー側)の設定をします。
こんな感じのファイルをホームディレクトリに保存し、


#thinkpad -> インストール中のPC
#main -> メインPC

#使用するスクリーンを指定
section: screens
    thinkpad:
    main:
end

#配置を設定
section: links
    thinkpad:
       right = main
    main:
       left = thinkpad
end

#画面の切り替えをキーボードするための設定
section: options
  keystroke(control+alt+j) = switchInDirection(left)
  keystroke(control+alt+k) = switchInDirection(right)
end


以下のコマンドでサーバー側を起動します。


synergys --config ~/.synergy.conf

.xsession辺りにこのコマンドを追加して自動起動するようにしておけば完成。


早速、thinkpadの方を再起動します。

ブートローダーをロードが遅い。(30秒)

・・・

やっとgrubを読んだと思ったら遅い。(1分)

・・・

カーネル読み込みが遅い(30秒)

・・・

さらにinitrdの読み込みが異様に遅い(2分)

・・・

起動はまあまあ(1分)

多分、USB1.1なため遅いのかと。2.0だったらもう少し早いのかもしれません。
ですが、
出社->起動->飲み物買ってくる->一息つく
辺りでXが起動するので、起動の遅さは許容範囲です。

さらに、起動さえしてしまえばメモリ上の作業なので快適です。


結果
思いつきでインストールしてみましたが、思いのほか快適に動いています。
リモートデスクトップのレスポンスですが、WindowsXP入れていた時よりもサクサク動いている気がします。

rdesktopまで起動後はこんな感じです


hoge@thinkpad:~$ free -m
             total       used       free     shared    buffers     cached
Mem:           122         50         72          0          4         22
-/+ buffers/cache:         23         99
Swap:          196          0        196

hoge@thinkpad:~$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             749M  490M  221M  69% /
tmpfs                  62M     0   62M   0% /lib/init/rw
udev                   10M  140K  9.9M   2% /dev
tmpfs                  62M     0   62M   0% /dev/shm



おまけ
・rdesktopが起動してから一定時間でログインしないとrdesktopが終了するので注意。
(-p でパスワード設定してもいいですが、セキュリティのため省略してます)

Youtube再生してみました
リモートデスクトップの場合、最大化しなければ普通に再生できます。
Xフォワードの場合は、動きが多い画面の場合はだいぶカクカクします。
予想以上にリモートデスクトップのパフォーマンスにビックリしました。

linuxでリモートデスクトップ

今回は、rdesktopについて書いていきます。

Windowsで遠隔操作と言えば、手軽に出来るリモートデスクトップが有名です。
XP以降デフォルトで入っているので手間をかけずにかつ、レスポンスも高速なのでかなり便利な機能ですが、
実はLinuxからでもrdesktopを使えばアクセスできます。

それを実現するのが rdesktop(http://www.rdesktop.org/) です。

インストールは、

apt-get install rdesktop

以上。

使い方は、



rdesktop サーバー名


で、ログイン画面を表示出来ます。

私の場合は、もう少しオプションを付加して、



rdesktop 192.168.100.100 -g 1680x1050 -u 'hogedomain\\yuji' -K


こんな感じになります。

-g 解像度
-u ドメイン名\\ユーザー名
-K キーボードを乗っ取らせない(デフォルトでは、キーボードからの入力を完全に乗っとるので、ratpoisonのキーが使えない・・・)

その他オプションはman pageを見てください。


実際の使用感としては、vncに比べかなり高速。
vncの場合は、プロトコルがシンプルで画面をそのままキャプチャして送るのでどうしても遅くなりがちですが、リモートデスクトップはできるだけ必要最小限にする工夫をしてあるのでこれだけの速度が出る模様。
ただし、スクロールなど短時間で書き換えが起こる場合はやはり通信速度がネックになります。

windowsを使う必要があって、リモートデスクトップで十分な場合にはかなり役立つツールかと思いますので、ぜひ使ってみてください。

おまけ
Xenの完全仮想化でwindowsXPなどを動かす場合は、付属のコンソールを使うよりrdesktop使った方が軽快に動くかもしれません。