2018年12月23日日曜日

Horizonタイムアウト(アイドルタイマー編)

本投稿は、vExperts Advent Calendar 2018 への寄稿となります。

お久しぶりでございます。(約一年ぶりの投稿となり、猛省しております。。)

ブログが更新できない日々が続きましたが、vExperts Advent Calendarにお誘いいただいたこともあり、1年間温めてきたノウハウを皆さまにお伝えできればと思います。

今回のテーマは「アイドルタイマー」です。

Horizonをご利用のお客さまからたまにご相談いただく内容ですが、環境に応じて制御方法が異なりますのでまとめておきたいと思います。

「アイドルタイマー」とは、いわゆるアイドル状態(無操作状態)を検出してセッションを切断するタイマー(時間)のことを指します。アイドル状態そのものは特に問題があるわけではありませんが、仮想デスクトップ環境においては以下2点の課題から、検出して対処したい管理者さまも多いのではないかと思います。

1.ログオンされた状態で放置されていると第三者が操作できてしまう、というセキュリティ面の課題
2.アイドル状態であってもセッションとしては使用中なので同時接続数ライセンスを消費する、というコスト面の課題

アイドル状態検出後の処置としては、セキュリティの観点からは切断すれば対応可能ですが、コストの観点からは切断するだけではライセンスが解放されませんので、ログオフまで行う必要があります。

それでは、セッション状態の説明からそれぞれどのように遷移するのか、アイドル状態をどのように検出して切断するのかについて詳しく解説していきたいと思います。

毎度の事ながら長文となりますので、、ご興味のある方は続きをどうぞ。

Horizonにおけるセッション状態としては「ログオン」「アイドル」「切断」「空のセッション」「ログオフ」の5つがありますが、まずはそれぞれがどのような状態であるかとライセンスの消費状態についてご紹介します。

状態
概要
ライセンス
ログオン
利用者がログオンしておりアプリケーションを利用している状態
消費
アイドル
利用者はログオンしているが何も操作をしていない状態
消費
切断
利用者がHorizon Clientを終了もしくはセッションを切断した状態
消費
空のセッション()
利用者が公開アプリケーションをすべて終了している状態
消費
ログオフ
利用者がログオンしていない状態
解放
※「空のセッション」は公開アプリケーションでのみ発生する状態です。

次に、それぞれの状態がどのように遷移するのかをご紹介します。
※利用形態と画面転送プロトコルによって挙動が異なります。

①仮想デスクトップ(PCoIP、Blast Extreme)

②仮想デスクトップ(RDP)

③公開デスクトップ(PCoIP、Blast Extreme、RDP)

④公開アプリケーション(PCoIP、Blast Extreme)

上記の通り、仮想デスクトップ(PCoIP、Blast Extreme)においてはアイドル状態を検出して切断するという制御は、Horizon Administratorやグループポリシー(これらで制御できる範囲を標準機能と位置付け)では実現できません。

仮想デスクトップ(PCoIP、Blast Extreme)だけアイドル状態が検出できないとは如何なものか!?ということで色々な方法を試したところ「タスクスケジューラ」を活用することでアイドル状態を検出して切断することができましたのでご紹介します。

※ここでは多くの仮想デスクトップに同じ設定を簡単に展開しやすいようにグループポリシーからタスクを設定しています。
※もちろん、個々の仮想デスクトップでタスクを設定いただいても挙動は同じです。

仮想デスクトップ(PCoIP、Blast Extreme)

ドメインコントローラにて管理ツールより"グループポリシーの管理"を起動し、所定のグループポリシーを選択して右クリックメニューより"編集"を実行します。

[ユーザーの構成]-[基本設定]-[コントロールパネル]-[タスク]の順にクリックします。
※[コンピュータの構成]でも設定可能。

右ペインの空欄を右クリックし、[新規作成]-[タスク(Windows7以降)]の順に選択します。
※ご利用のActive Directoryのバージョンによっては表記が異なるかもしれません。

"新しいタスクの作成"ウィザードが表示されますので、[全般]タブにてタスク名(名前)を入力します。

[トリガー]タブに移動し、[新規(N)]ボタンをクリックします。

"新しいトリガー"ウィンドウが表示されますので、"タスクの開始"パラメータに”アイドル時”を選択し、[OK]ボタンをクリックします。

[操作]タブに移動し、[新規(N)]ボタンをクリックします。

"新しい操作"ウィンドウが表示されますので、"操作"パラメータに"プログラムの開始"、"プログラム/スクリプト"パラメータに以下のプログラムを指定し、[OK]ボタンをクリックします。

C:\WINDOWS\system32\tsdiscon.exe


[条件]タブに移動し、以下"アイドル"パラメータを指定し、[OK]ボタンをクリックします。

①次の時間コンピュータがアイドル状態の場合のみタスクを開始する
②アイドル状態になるのを待機する時間
③コンピュータがアイドル状態でなくなった場合は停止する
④再びアイドル状態になったら再開する

①:この時間アイドル状態であれば切断プログラムを実行します。
②:アイドル状態の検出を始めるまでの待機時間
 (1分だと何度かうまく検出できないことがあったので、、5分以降がオススメ
③:チェック
④:チェック

※挙動を見ている限り、アイドル状態を検出する最長時間は②+①となるようです。
※待機時間経過してアイドル状態でなかった場合、再度待機時間待つ模様。

[設定]タブと[共通]タブを必要に応じて設定し、[OK]ボタンをクリックします。
※私はデフォルトパラメータ(すべてチェック解除)で検証しました。


これでグループポリシーから”ユーザー”に紐付いてアイドル状態を検出して切断するタスクを設定できます。タスクポリシーはコンピュータに紐付けて適用することもできますので、適用したい範囲に合わせて設定してください。

上記のタスクで仮想デスクトップ(PCoIP、Blast Extreme)においてもアイドル状態を検出して切断できますが、実行プログラムとして切断するだけのプログラムを指定していますので、アイドル状態が所定時間続くと突然プツリと切断されます。。

何だか味気ないですよね。。

アイドル後の切断なので誰も見ていないと思いますが、、切断しますよ的なメッセージを表示してあげるのがおもてなしというものです。

簡単なスクリプトでおもてなし対応なアイドル切断ができますので、サンプルを掲載しておきます。
※下記内容を.vbsファイルとして保存して各仮想デスクトップに格納し、タスクで実行するプログラムとして指定してください。

Option Explicit

Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")

objWshShell.Popup "アイドル状態を検出したためご利用のセッションを切断します。"& Chr(13) &"セッションを継続する場合はアイドル状態を解除してください。", 10, "アイドル検出による切断"

objWshShell.Run "C:\Windows\system32\tsdiscon.exe"

上記スクリプトを実行すると、以下のようなポップアップウィンドウを表示し、10秒応答がなければ切断するという動きになります。
※応答=アイドル状態の解除となり、ポップアップウィンドウも終了します。

ん~、それっぽくなりましたかね。(笑

さて、標準機能(View Administratorおよびグループポリシー)でアイドルを検出できる部分についても設定箇所のみご紹介しておきます。

仮想デスクトップ(RDP)
公開デスクトップ(PCoIP、Blast Extreme、RDP)

グループポリシーにて[ポリシー]-[管理用テンプレート]-[Windowsコンポーネント]-[リモートデスクトップサービス]-[リモートデスクトップセッションホスト]-[セッションの時間制限]にアクセスいただき、"アクティブでアイドル状態になっているリモートデスクトップサービスセッションの制限時間を設定する"を有効化してアイドルタイマーの設定を行います。

こちらは切断時に以下のようなポップアップウィンドウ(仮想デスクトップ)や画面全体への通知(公開デスクトップ)が表示されます。

仮想デスクトップ(RDP)

公開デスクトップ(PCoIP、Blast Extreme、RDP)

公開アプリケーション(PCoIP、Blast Extreme)

View Administratorにて[View構成]-[グローバル設定]にアクセスいただき、”ユーザーがキーボードとマウスを使用しなくなった場合に、アプリケーションを切断し、SSO 認証情報を破棄する”パラメータにアイドルタイマーを設定します。

こちらは切断時に以下のようなメッセージが表示されます。

さいごに、切断状態からログオフに遷移する時間(タイマー)については、プールもしくはファーム設定にて指定することができますのでご紹介しておきます。
※切断状態にするだけではライセンスが解放されないのでご留意ください。

切断タイマー(プール)

切断タイマー(ファーム)

いかがでしたでしょうか。

標準機能では実現し得ないものの、タスクスケジューラと簡単なスクリプトで仮想デスクトップにおいてもアイドル状態を検出して切断することができました。
ご興味のある方は試してみてください。

長らく更新できていませんでしたが、、来年は年号も変わりますし(関係ない)
気持ちを新たに、、HorizonのTipsを皆さまにお届けしていきます!!

0 件のコメント:

コメントを投稿