rdesktop の tips

Linux から Windowsリモートデスクトップ(もしくはターミナルサービス)に RDP で接続するのには rdesktop というコマンドがあります。これコマンドラインインタフェースから使うので敬遠する人も多いかも。GUI のフロントエンドとして,たとえば GNOME のターミナルサーバクライアント(tsclient)があるので,こちらを使うと使いやすい*1んですが,rdesktop のポテンシャルを 100% 生かしきれない*2ので結局 rdesktop コマンドを直接いじるのが吉です。

$ rdesktop -5                               \
           -g 1024x768                      \
           -a 24                            \
           -N                               \
           -x lan                           \
           -z                               \
           -P                               \
           -r disk:home=/home/dayflower     \
           -r sound:local                   \
           -r clipboard                     \
           -u dayflower                     \
           -d WORKGROUP                     \
           REMOTEHOST

各オプションについて

プロトコルバージョン(-5

Windows XP 以降の場合 RDP v5 に対応しているので -5 になります。Windows Server 2000 Terminal Serverice 等だと RDP v4 だと思いますので -4 になります。

デフォルトで -5 なので指定する必要はないのですが,説明のために指定してみました。

解像度(-g <width>x<height>

リモートデスクトップの解像度を指定します。ローカル側でフルスクリーンにしたい場合は逆に -f オプションを使います(解像度はローカルのフルスクリーンの解像度になる)。両方とも指定すると -g が優先されます(つまりウィンドウモードになる)。解像度はリモートの解像度に束縛されません(つまりたとえば 600x1000 などの変態的解像度も指定できる)。

フルスクリーンの場合,(わたしの環境だけかもしれませんが)Compiz 等の Screen Edge Activation が効かなくなります(例えばわたしは右端隅に「展開」を割り当てていますが,カーソルを右端隅にやっても有効になりません)。またすべての入力を grab してしまうので,他の Linux アプリケーションに切り替えることができなくなってしまいます。

ここが VMware Player / VMware Server Console のフルスクリーンモードと異なるところです。個人的には逆にメリットかとも思います。普段はウィンドウモードにしてますし。

Windows の「リモートデスクトップ接続」では,接続中にフルスクリーンモードとウィンドウモードを切り替えることができます。またフルスクリーンモードでも画面上部に切り替え用バーが出現しますが,rdesktop にはそのような粋な機能はありません。リモート Windows の「ログオフ」ではなく「切断」を選択すると,セッションを継続したまま切断できるので,再度 rdesktop を実行して切り替えることができます。

色深度(-a <bit depth>

色深度を指定します。

-a 24 を指定して

WARNING: Remote desktop does not support colour depth 24; falling back to 16

のように怒られる場合は,Windows XP のリモートデスクトップに rdesktop でフルカラー接続 - daily dayflower を参照してください。

Numlock 同期(-N

文字通りです。同期させないほうが便利な状況もあるとは思いますが,わたしは指定しています。

RDP v5 帯域指定(-x (m[odem 28.8] | b[roadband] | l[an])

RDP v5 だと想定帯域を指定することができます。これで何が変わるかというと,たとえば低い帯域だと自動的に様々な UI のイフェクト(ウィンドウドラッグ時のウィンドウ描画など)を disable します。

個人的には LAN 内でつないでいるので -x lan を指定しています。

その他パフォーマンスオプション(-z, -P 等)

ヘルプから引用します。

  • -z: enable rdp compression
  • -P: use persistent bitmap caching
  • -B: use BackingStore of X-server (if available)
  • -e: disable encryption (French TS)
  • -E: disable encryption from client to server

なぁーんとなく,-z -P を指定しています。わたしの環境では -B は効きませんでした。

ディスクのリダイレクション(-r disk:<share_name>=<local directory>

Linux 上のファイルパスを Windows のネットワーク共有フォルダのように見せてくれる機能です。しかもマイコンピュータ直下にぶら下げてくれます(環境によっては異なる可能性もあります)。素敵素敵。

共有フォルダの実体は,マイネットワークのネットワーク全体の「Microsoft Terminal Services」の中に \\tsclient という仮想サーバがあり,その下にあります。

複数指定する場合はカンマで区切ります。

$ rdesktop -r disk:cdrom=/media/cdrom,home=/home/dayflower

みたく。あくまで共有フォルダであり,(例えば CD)ドライブとしてマウントしてくれるわけではないので注意。

その他のリソースのリダイレクト(-r sound:..., -r clipboard[:...]

ローカルのリソース(サウンドクリップボード,プリンタやCOM ポートなど)をリモートに接続することができます。たとえばサウンドをリダイレクトすると,リモートで鳴るべき音をローカルで聴くことができます(リモートで鳴らしたりサウンドを disable したりもできます)。

いろいろあるのですが soundclipboard くらいしか指定していません。

ユーザ名,パスワード,ドメイン-u <user>, -p <password>, -D <domain>

ログインウィンドウのデフォルトのユーザ名等を指定しておくことができます。ドメインを指定しないとデフォルトでリモートのサーバ自身(ローカルログオン)になります。まぁ特に指定する必要もないですが。

パスワードも指定しておくと自動ログイン・接続してくれます。

キーボードについて

わたしは英語キーボードを愛用していますが,LANG=ja_JPLinux 環境から接続すると,無指定の場合自動的に ja キーマップになります。この状態だとキーマップに相違があるので,記号などの入力がおかしくなってしまいます。

-k en-us のように英語キーマップを指定するとうまくいく……のですが,ログイン時に Windows 側の「入力言語」が「英語」になってしまいます(ログインダイアログに「EN」と表示される)。入力言語は Alt+Shift キーを押すと切り替えることができます。

一応,コントロールパネルの「地域と言語のオプション」から「言語」タブの「テキストサービスと入力言語」で「詳細」ボタンを押し,「既定の言語」が「英語(米国) - US」になっているので「Microsoft Natual Input 2002」を選択すればいいはず……ですが,ログインするたびに再び EN になってしまうのが困り者です*3


ちなみにわたしは「言語バー」をデスクトップやタスクバーには表示せず,代わりに IME Watcher というソフトを使ってタスクトレイに表示するようにしています。これは入力言語が英語になっている場合,タスクトレイのアイコンが「EN」になります。すばらしい。

デスクトップの壁紙が貼られない

先日と同じようにグループポリシーエディタ(gpedit.msc)で「リモートデスクトップ壁紙を強制的に削除する」を「無効」にすればいいかも。

その他派手目なイフェクトについて

接続方法によっては,デスクトップアイコンの名前部分が透過しなかったりするかもしれません。接続によって自動的にシステムのパフォーマンスが落とされたためだと思われます。

「システムのプロパティ」の「詳細設定」タブの「パフォーマンス」の「設定」ボタンを押した先でいろいろ設定できます。特に

  • 「ドラッグ中にウィンドウの内容を表示する」
  • 「デスクトップのアイコン名に影を付ける」

あたりが要チェックです。

ちなみに(少なくとも RDP v5 では)メニューなどのフェード効果はどうあがいても disabled になります(スライド展開になる)。

フォントのアンチエイリアスが効かない

たぶん RDP (v5) の制限?それとも rdesktop の不具合?

あと RDP v6 だと ClearType もサポートされるらしいですが,rdesktop はまだ v6 に対応していません。ちなみに RDP v6 をサポートするサーバ側は Vista 以降と Windows Server 2008 と XP SP3 以降らしいです。

おわりに

VNC より軽快だし,VMware Tools を入れなくても入力デバイスの切り替えがシームレスだし,「切断」でセッションを継続したまま接続だけ切れるし*4,なので VMware Player や VMware Server Console でつなぐより快適な作業空間を手に入れることができます。

あとはフォントのアンチエイリアスさえ効けばなぁ。

*1:インタフェースも Windows の「リモートデスクトップ接続」に似ています

*2:たとえば Ubuntu Hardy 8.04 だと rdesktop が 1.5.0 で,tsclient のサポートする rdesktop が 1.3.0 だからそのせい,というのもあります。

*3:「切断」後の再接続時には入力言語が保存されています

*4:XP の場合リモートデスクトップ接続すると,外部からはログインしたユーザによってロックされた状態に見えます。