2015年7月8日水曜日

Windows7でリモートデスクトップ part3

前回紹介した方法を更に発展させてみよう。

リモートデスクトップのクライアントには自動で再接続を行うオプションがある。
つまりユーザが意図しないタイミングで切断された場合に文字通り再接続する機能なのだが、この機能と前回紹介した方法はちょっと相性が悪いという弱点があった。

クライアントが再接続したタイミングでサーバ側が切断を検知してセッションを切り替えてしまうのだ。折角繋ぎ直したのに今度はサーバ側からブチンとやられてしまうのである。

そこで、サーバ側が切断を検知してからセッションの切り替えを行うまでに時間的な猶予を儲ける方法を考えた。
つまり、こんな感じの動作である。

  1. サーバがセッションの切断を検知する。 
  2. ウィンドウを表示して、カウントダウンを開始する。
  3. カウントダウン終了までにキャンセルされなければセッションを切り替える。
 カウントダウンには、System32フォルダの中のtimeout.exeを利用する。

それでは前回設定したタスクの内容をタイムアウト対応するよう変更してみよう。 ここに書かなかった項目は前回と同じ設定とする。

  1. コントロールパネルから「管理ツール」を開く。
  2. 管理ツールの中の「タスク スケジューラ」を起動する。
  3. 左側のツリーから「イベントビューアー タスク」を選択する。
  4. 前回追加した「リモートデスクトップ切断後の処理」を右クリックしプロパティ画面を開く。
  5. 「全般」→「ユーザがログオンしている時のみ実行する」にチェックを入れる。
  6. 「操作」→「プログラムの開始」を選択し、編集ボタンを押下する。
  7. 「プログラム/スクリプト」の欄を「cmd」に変更する。
  8. 「引数の追加」の欄を「/q /c timeout 30 && tscon 1 /DEST:console /PASSWORD:*****」に変更して「OK」を押下する(*****は実際のパスワードを入れる)。
これで切断時は最初にカウントダウンが表示され、カウントダウン中に再接続が間に合えば、カウントダウンウィンドウ内でCtrl+Cを押すか、×ボタンでウィンドウ自体を閉じればセッションの切り替えをキャンセルすることが出来るようになった。