WindowsPC1台で「2アカウント同時ログイン」してデスクトップを2つ使う【RDP】

# 概要
皆さんは普段、 **PC1台でアカウントを2つ、使い分けて** いませんか？

Windowsのアカウントを追加して、ログインを切り替えればデスクトップは２つできるのだけれど、同時に使えないし、ログインしなおしたりするのって、結構面倒ですよね？

これを、同時に使いたい。

そんな夢を **RDPを使ってちょっとグレーな感じで実現した** ので「私の目的や思考が分かるように」長々と記事にしてみました。

## 構成図とスクリーンショット
この記事でやることは、こんな感じの **自PCの別アカウントへのRDP接続** です。
![20200802_RDPWrapper_構成図-理想のRDP構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/7c5705dd-4445-0074-9fab-1b976379de95.png)

以下は、これを実現したスクリーンショットです。思いのほか、いい感じだったのです・・・。
ディスプレイ2台分の領域を一気にスクリーンショット撮ってます。（一部モザイク加工入れてます）
![2020-08-03-11_20_14-Greenshot_1920x540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/a48822bb-2672-0fc1-3800-8ac9eec67cde.png)

メイン側は、わかりやすいように背景色を灰色に設定しました。
サブ側は、左の標準背景のウィンドウです。これが自PCの別アカウントのデスクトップ画面です。
もちろんウィンドウを最大化すれば、普通にサブ側の全域が見えますし、最小化すればメイン側の画面も普通に使えます。サブ側の音声もちゃんと聞こえますし、操作も出来ます。

### （2020/08/07追記） YouTube動画を作成しました。
1台のPCで、2つのアカウントを作成し、「リモートデスクトップ」で接続して、デスクトップを同時に使うデモです。
この動画では、「実際に使うとどんな風に見えるか」が分かるようにしているつもりです。
（動画は少し駆け足で分かりにくいです。すみません）

[![【Qiita記事】WindowsPC1台で「2アカウント同時ログイン」してデスクトップを2つ使う【RDP】](http://img.youtube.com/vi/N80Ki4mXt4M/0.jpg)](http://www.youtube.com/watch?v=N80Ki4mXt4M)


# 環境
 - Windows 10 Pro 64bit, バージョン 2004 (May 2020 Update)
 - RDP Wrapper Library v1.6.2
   - termsrv.dll - ファイルバージョン: 10.0.19041.84 (2020/08/01時点最新)
   - RDP Wrapper Autoupdate
 - 2画面以上の出力に対応したグラフィックボードと複数のディスプレイ（あったほうがいい）

## 考慮が必要な点
 - WindowsUpdateでtermsrv.dllが更新された場合、しばらく使用できない期間が発生する。（有志の誰かが定義ファイルを更新するまで）
 - マイクロソフトライセンスについての確認が必要。以下の「注意（マイクロソフトライセンスについて）」を参照。

# 注意（マイクロソフトライセンスについて）
この記事を参考にして起こったトラブルに、私は一切の責任を負いません。自己責任でお願いします。
ネットで調べてみましたが、 **Windows 10 ProにおけるWindowsリモートデスクトップ(RDP)のマイクロソフトライセンス** については、正直把握しきれていません。公式以外のネット記事を鵜呑みにして、自分に都合の良い解釈をしています。各自ライセンスについてご確認ください。

また、私がわかっている範囲ですが、以下をご注意ください。

 - Windows 10 Homeエディションは、この記事の内容を実行した場合、ライセンス違反として扱われる可能性があります。（HomeはRDPサーバになることが出来ない）
 - 最大接続数は1セッションに収めないと、ライセンス違反として扱われる可能性があります。

十分気を付けているつもりですが、記事内にライセンス違反や間違いと思われる部分があった場合は、是非、ご連絡をお願いします。

個人的な解釈ですが、私の用途では「PC1台Windows 10 Proで、1人で2アカウント使用、1セッションの接続のみ」なので、ライセンス的には問題ないと判断しています。
・・・が、RDP Wrapperを使って本来ある制限を解除しているため、ここでは「グレー」と表現しています。
また、グレーにならない、かつ、私の目的を叶えられる、もっと素敵な代替え案がありましたら是非教えてください。

---
前置きが長いので、結論を急ぐ方はスクロール！

---

# はじめに
私は、グラフィックボードにお金をかけたパワーのあるPCを1台しか持っていません。普通の人はそうそう何台も持っていませんよね？
**仕事用途** で使ったり、ちょっと **ゲームで遊んだり** 。私のPCは、そんな **`多目的PC`** なんです。

そんな中、Steamなんかのゲームを遊んでしまうと、「ユーザフォルダ」の中や「ドキュメント」の中が、ゲーム関係のファイルであふれてイライラします。

 - ゲーム関係のプログラムは、みんなお行儀が悪い！HDDの中のあちこちにファイルをバラまいて、アンインストールしても消えやしないよ！
 - ユーザフォルダにはgitでcloneしたリポジトリや、VisualStudioのプロジェクト、認証情報を保存したドットファイルなんかもあるのよ！

とにかく、ユーザフォルダの中に **ゲーム関係のファイルを混ぜてほしくない** のよ・・・。

仕事環境とゲーム環境を、プログラムからレジストリまで、出来るだけ綺麗さっぱり分けたいのです！
でも、ログインログオフをそうそう頻繁にやりたくはない！できれば同時に使いたい！

## 模索の旅
まずは、 **仮想化** することから考えました。この記事の内容が「こいつ何言ってるのかわかんない」という場合は、9enさんのQiita記事「 [仮想環境についてまとめてみる](https://qiita.com/9en/items/f4eab2f61485a9f3885a) 」を参考にしてみてください。

### アプリケーション仮想コンテナ化(断念)
私が真っ先に思いついて、最も望んだのは「アプリケーション仮想コンテナ化」です。
アプリケーション別に仮想環境に突っ込めれば、どれだけゲームがゴミをまき散らそうが、影響は仮想環境の中だけですし、きれいに後片付けも出来そうです。

以下、色んな種類を、記憶と検索頼りに検討してみました。

 - [Sandboxie](https://www.sandboxie.com/)
   真っ先に思いついた理想がSandboxie。ただ、 ~~SandboxieはWindowsXPの頃の古いアプリケーション~~ (※1) だし、Windows10では動かないだろう・・・と思って、調べることなく除外しました。これ以外の類似ツールで良いものがあったら知りたいです。（随分昔に探したけどSandboxieに勝てそうなものが無かった）
   * ※1 うぉお。記事作りながらURL張る為に検索してみたら、2020年4月に [Sandboxieがオープンソース化](https://forest.watch.impress.co.jp/docs/news/1246874.html) してた！？ 動作環境にWindows10が入ってるっぽいけど、ちゃんと動くのかな？気付くのが遅かったけど、気になる・・・。

 - [COMODO Firewall](https://personalfirewall.comodo.com/) のコンテナ仮想化
COMODOのコンテナ仮想化で、Steam本体からその中のゲームまで、すべて１つの仮想コンテナに入れるのは、 **機能が簡易すぎてちょっと厳しいかな？** と思って断念しました。
それと、コンテナを保存するドライブやフォルダの変更ができそうになかったので、容量が少ないSSDのCドライブでは辛いと判断しました。（複数ゲーム入れる為、別HDDに分けたい）

 - [Docker](https://www.docker.com/) Windowsコンテナ(Serverコンテナ or Hyper-Vコンテナ)
流行りだし、出来そうな気もするけど、私がDocker職人じゃないので、軽く情報収集してから断念しました。
そもそも、DockerはあくまでServer用途なので、ゲームが動くか怪しいと思ったからです。
   - 最近、LinuxコンテナがWSL2で勢いついた所のようなので、詳しい方に実現可能か聞いてみたいところです。(うち、Dockerでゲームやってるよ！？みたいな人募集)

 - [Windows Sandbox](https://docs.microsoft.com/ja-jp/windows/security/threat-protection/windows-sandbox/windows-sandbox-overview) ★2020/08/05追記
記事投稿後、Windows 10 バージョン 1903で、OSの標準機能としてサンドボックスが実装されていたらしいことを知りました。（ProまたはEnterpriseでしか使えないようです）
   - 軽く確認してみましたが、私の目的には向かないものでした。
   - 閉じるとすべて削除されるので、あくまで一回ぽっきりで動作確認するための物のようです。

結局、アプリケーション仮想コンテナ化では、 **ストレスなく実現可能そうな案** が思いつきませんでした。

### 仮想マシン化(断念)
次に思いつくのは、PCを完全仮想化する方法です。以下が有名どころですね。

 - VMware
 - VirtualPC(Hyper-V)
 - VirtualBox

ただ、Windowsゲストを用意するためには、WindowsのOSライセンスが別途必要になってしまう事。また、3Dグラフィックス周りを動かすには、仮想マシンソフトウェアの再現性に頼りっきりです(※2)。それが完璧に再現できていたとして、PCパワーとメモリも必要なので、試すまでもなく厳しいだろうと判断しました。（まあ、検討するまでもなく、普通にナンセンスですよね・・・）
ゲーム側をホスト、仕事側をゲストにすることも考えたけど、私の場合はゲーム側のほうが利用頻度が低いので、ゲーム側をゲストでやりたいのです。

※2 私は3Dグラフィックスや、DirectXをまともに動かせるのはVMwareだろうって認識です。ただ、VMwareでもかなり重くなるハズだし、ゲームによってはまともに動かない可能性も高いハズ（違ってたら誰か指摘して！）

### 仮想デスクトップ(論外)
ここまでに挙げた仮想化とは、根本的に違うのですが、 **疑似的にデスクトップを表現する** という意味で、使えるものが無いか気になって軽く調べました。
仮想デスクトップの機能は、Windows10 の標準機能としても実装されていますが、それ以外のツールなんかも以下のものを軽く検索して調べてみました。（有名所とオープンソースなものを中心に列挙。類似ソフトウェアは他にもいっぱいあった）

 - Dexpot
 - VirtuaWin
 - WindowsPager
 - mDesktop
 - SylphyHorn

うん、でも・・・。見た目だけじゃなくて明確に切り分けできるようなものが欲しいんですよね。ツールの目的がやっぱり違うかな。これじゃ、マイドキュメントの混沌は晴らせないです。
結局、軽く調べてみたものの、「なんか違う感」が拭えず、どれも試すことなく断念しました。

## そして・・・アカウントの分割へ
で。結局、デスクトップやマイドキュメントを分けるなら、アカウントを分けるしかないって方向に、やっと思考が移りました。
Windowsのユーザとして、 **仕事用ユーザ** と、 **ゲーム用ユーザ** を作り、使う用途別にログインしなおすわけです。

でも、実際やるとなると、**めんどくさい** だろうことは、容易く想像できます。

そこで、色々調べた結果、[RDP Wrapper](https://github.com/stascorp/rdpwrap) を使えば、2アカウント同時ログインで、デスクトップを2つ同時に使うことができそうだったので、環境を準備し始めました。

「 **目的を達成するために選べる手段が、これしかなかった** 」のです。

### RDP(Remote Desktop Protocol)とは
WindowsNT、XP、2000の頃から存在する、Windows標準の遠隔操作用の通信規格です。
Windowsの機能としては「リモートデスクトップ」と呼ばれています。主にローカルネットワーク内の遠隔操作に用いられます。

お金を積めば、サーバのデスクトップをレンタルして使えるようなRDPレンタルサービスも沢山ありますが、今回の目的ではゲームの為にそこまでお金をかけられません。それに3Dグラフィックス周りがネックになってゲームは動かないだろうし、ネットワーク越しになるのも遅延が問題になりそうです。

### その他の遠隔操作ツール
遠隔操作ツールとしては、以下が有名です。私はこれらをよく使うので、それぞれの特徴も知っていました。

 - [VNC(UltraVNC)](https://www.uvnc.com/)
古くからある遠隔操作ツールで、システム管理者御用達です。ただ、ローカルネットワークからインターネットに出るには、仕組みを準備する必要があるため不向きです。
ローカルネットワーク内の遠隔操作用途では、目的によってWindows標準のリモートデスクトップかVNCを使い分けることが多いです。

 - [TeamViewer](https://www.teamviewer.com/ja/)
VNCと違って、TeamViewerのサーバ経由で2点間を接続するため、簡単にインターネットを超えて接続することができます。私の場合は、突然の「親戚PCの相談」などで、遠隔メンテするときに大活躍しています。

 - [Chrome リモート デスクトップ](https://remotedesktop.google.com/)
Googleアカウントに紐づいて遠隔操作できるため、個人PCの遠隔操作に向いています。私の場合は、リビングの非力なノートパソコンから、書斎のメインPCを操作するために使用しています。

### RDPの設計思想
Windowsのリモートデスクトップは、 **これらと決定的に設計思想が異なります。** 

上記「その他の遠隔操作ツール」で挙げた3つは、通信の仕方の違いはあれど、基本的にはリモートの **画面転送** です。つまり、実際のディスプレイに表示された内容がそのまま手元で見えるという動きです。そこにキーボードやマウスの動作を相手に伝えて、変化した画面が、また転送されてくるだけです。
![20200802_RDPWrapper_構成図-通常のVNC構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/28e012ec-aed5-a9da-216e-b7b567d23806.png)

それに対し、Windowsのリモートデスクトップ（RDP）は、実際に **リモートからWindowsのログイン処理が行われます。** 
実際のディスプレイに表示された内容とは関係なく、行った操作は内部（仮想ディスプレイ）でちゃんと処理が行われるため、1台のPCに、2人以上ログインして、それぞれ別の操作ができるわけです。 **RDPの仕組み上は複数ログインが可能なのです！**

ですが実際は、端末でログインしているユーザがいた場合、RDP接続が開始されると、強制的にログオフされてしまい、端末の前で座って使っていた人は、突然利用できなくなります。
![20200802_RDPWrapper_構成図-通常のRDP構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/8da7f798-9b59-4dcb-d2cc-9392373f8ceb.png)

上の図でいうと、「物理PC B」を「ユーザアカウント B」が使用中に、「物理PC A」から「物理PC B」の「ユーザアカウント B」にRDP接続した場合、「物理PC B」の「ユーザアカウント B」は、強制的にログオフされて使えなくなります。
また、「物理PC B」を使用していたユーザが「ユーザアカウント B」以外のユーザの場合も、同様に強制ログオフされてしまいます。

結果、「物理PC A」と「物理PC B」を「ユーザアカウント A」が独占した状態になります。
そして「物理PC A」の「仮想描画エリア」に「ユーザアカウント B」のデスクトップが表示される状態になり、「ユーザアカウント A」が遠隔操作可能となるわけです。

つまりRDPは、遠隔にあるPCを操作しているのではなく、 **遠隔にあるPCを、あたかも手元にあるPCのように扱う** という設計思想なのです。

これは「設計思想」が異なるもので、どちらが優れているという話ではありません。それぞれ一長一短あります。

### Windows Serverの話（脱線）
この記事ではまったく関係ありませんが、Windows Serverについても軽く触れておきます。
この「複数ログイン」は実際にWindows ServerのRDS(Remote Desktop Services)で実現している機能です。ただし、RDSでこれを利用するためには、接続数にあわせた **ライセンス料(RDS CAL等)** をマイクロソフトに支払う必要があります。（Windows Serverは、OSライセンスに同時2接続までのライセンスが含まれている）

つまり、ここで言いたいことは、複数ログインは一般的に使う機能ではないため、ProやHomeで使える機能は **限定的なもの（制限されたもの）** だということです。

### Windows 10 ProにおけるRDPの制限
**Windows 10 ProやHomeでは、このRDPの機能が一部制限** されています。

| エディション | 操作される側 | 操作　する側 | 最大同時接続数 | 備考 |
|:---|:--:|:--:|:--:|:---|
| Home | × | ○ | 1 ※3 | **リモート操作される側になれません。** HomeからServerやProに対して、リモート操作することはできます。 |
| Pro  | ○ | ○ | 1 ※3 | リモート操作される側になれます。リモート操作することも出来ます。 |

 - ※3 最大同時接続数がいくつまでOKなのか、マイクロソフトの公文書を見つけることが出来ませんでした。明記されているURLをご存じの方は、お知らせください。
（検索しても、WindowsServerの話ばっかり引っかかる・・・）

実際に接続してみるとわかりますが、Proの同時接続数は1セッションだと考えて良いと思います。（強制ログオフされるので、そう判断しています）

# PC1台で実現するには
さて、やっと本題にたどり着きました。結局、私はこの2台のPCで行っていることを、1台で行いたいのです。

これを
![20200802_RDPWrapper_構成図-通常のRDP構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/8da7f798-9b59-4dcb-d2cc-9392373f8ceb.png)
こうしたいわけです。
![20200802_RDPWrapper_構成図-理想のRDP構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/7c5705dd-4445-0074-9fab-1b976379de95.png)

ただし、そうすると「RDPの設計思想」で挙げた「強制ログオフ」のように、接続の問題が出てきます。
実際には、事前準備の設定などを行ったのち、自PCにRDP接続しようとすると、以下のようなエラーが出て接続できません。
![2020-08-02 15_00_38-リモート デスクトップ接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/b4ffa0f9-1798-069e-a023-c9a01b0ef094.png)
![2020-08-02 15_02_05-リモート デスクトップ接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/a222de06-b5f6-6853-361c-bda53cf4eb0b.png)

ここでは、このような **同一PCのRDP接続の制限を解除する目的** で「RDP Wrapper Library」を使います。

# RDP Wrapper Libraryについて
[RDP Wrapper Library](https://github.com/stascorp/rdpwrap) は、githubでソースコードが公開されているオープンソースのソフトウェアです。アカウント名「 **stascorp (Stas'M Corp.)** 」さんの公開しているものが本家です。

ページTOPには、このように書かれています。
> The goal of this project is to enable Remote Desktop Host support and concurrent RDP sessions on reduced functionality systems for home usage.

Google翻訳すると、こうなります。

> このプロジェクトの目標は、リモートデスクトップホストのサポートと、家庭で使用するための機能が制限されたシステムでの同時RDPセッションを有効にすることです。

現時点で、最終コミットが「Dec 21, 2018」なので、ちゃんと存続するか不安ですが、定義ファイルの更新は有志によって行われているようなので、とりあえず大丈夫そうです。

## RDP Wrapper Libraryの生い立ちと動作
もともと、RDPの同時接続数の制限を解除するためには、RDPの本体であるWindowsのシステムDLL「C:\\Windows\\System32\\termsrv.dll」をバイナリエディタで改変して、この制限を逃れる手法が主流だったようです。
ただし、この方法だと、マイクロソフトのWindowsUpdateによって、termsrv.dllが更新された場合、再度、バイナリエディタで改変するという、手間のかかる作業が必要になってしまいます。

そこで、RDP Wrapper Libraryでは、termsrv.dllを改変するのではなく「termsrv.dll」と「termsrv.dllを扱うプログラム」の間に割り込み、「termsrv.dllの振る舞いを一部改変する」ことで同様の制限解除を実現しているようです。
これを実現するために「termsrv.dll」のファイルバージョン別の振る舞いを、定義ファイル「rdpwrap.ini」に記載し、この定義ファイルを元にRDP Wrapper Libraryが動作するように作られています。

それでも、WindowsUpdateでtermsrv.dllが更新された場合の「新しいtermsrv.dllの解析と、定義ファイルの更新」は、誰かがやらなければならず、WindowsUpdateとのイタチごっこなのには変わりありません。
「RDP Wrapper」で検索してみればわかりますが、利用者も皆、WindowsUpdateによってtermsrv.dllが更新された場合、termsrv.dllのファイルバージョン別にパッチを当てたり、過去のtermsrv.dllに差し替えたりなど、涙ぐましい努力が行われているようです。

RDP Wrapper Libraryにとって、定義ファイル「rdpwrap.ini」の更新作業は永遠の課題です。なので、RDP Wrapper Libraryを使うときは、これに付き合う覚悟が必要です。

## RDP Wrapper Autoupdateについて
[RDP Wrapper Autoupdate](https://github.com/asmtron/rdpwrap) は、githubでソースコードが公開されているオープンソースのソフトウェアです。アカウント名「 **asmtron** 」さんが公開している追加のバッチファイル群です。
これは、RDP Wrapper Libraryの [Issue#859](https://github.com/stascorp/rdpwrap/pull/859) にて、Pull requestsされています。（このため、将来、RDP Wrapper Library本家に取り込まれる可能性があります）

上記、定義ファイル「rdpwrap.ini」の更新作業を、ある程度自動化しよう、という話ですね。

ざっと中身を（細かく見てはいませんが）見た感じでは、本家含めた4人のgithubのリポジトリにUPされている定義ファイルを参照する仕組みのようです。
つまり、その4人の誰かが解析して定義ファイルを作成したら、それがそのまま使えるという、他力本願なものなわけです。

今回、私はこれを利用したいと思います。解析してくれる方々に感謝です。

## ウィルス感染リスク？⇒「いいえ、誤検知です」
[本家のREADME.md](https://github.com/stascorp/rdpwrap/blob/master/README.md) にも書かれていますが、AVG Free Antivirusや、Norton Antivirusで、ダウンロードしたファイルが削除されてしまうケースが発生しているようです。

本家stascorpさんのgithubページの [releases](https://github.com/stascorp/rdpwrap/releases) ページからダウンロードしたものであれば、問題ありません。
これ以外の場所でダウンロードしたものは、マルウェアが仕込まれている可能性があるため、絶対に使用してはいけません。

先に述べたように、RDP Wrapper Libraryの目的は「Windows標準のtermsrv.dllの動きを改変するプログラム」の為、「怪しい動きをするプログラム」と判定されてしまいます。これが誤検知の大きな理由です。
これは回避しようがないので、ウィルスチェックソフトの除外リストに登録するなどの対処が別途必要です。

## 手元の環境での誤検知対策
私が実際に対策したものを簡単に紹介しておきます。

 - COMODO Firewall
ファイル評価の設定で、信頼できるファイルとして登録しています。ここでの詳細説明は割愛します。

 - Windows 10 Proの警告設定
Windows10に「望ましくない可能性のあるアプリ」として検出されてしまいました。
このスクリーンショットは、許可設定済みです。通知が出た後、この画面で個々に「許可」を選択して、動作するように設定しています。（設定していてもこの警告が出るっていう）
![2020-08-02 10_25_16-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/eb2ca954-3692-66f9-b035-2d5ffb525e2e.png)

# インストール作業
こんなに長々と書いておいて、アレなんですが、実際の作業手順は細かく書くつもりはありません。それぞれ他のサイトにお任せしたいと思います。ここでは要点だけ書いていきます。（単純に記事作成に力尽きただけ）

ちなみに私は、目的が「クリーンな環境作り」でしたので、OSのクリーンインストール作業から行っています。（そこから説明するわけにはいかないので、ごめんなさい）

## ログイン用のユーザアカウントを作成する
まずは、以下のようなユーザアカウントを作成する必要があります。

 - メインアカウントの仕事用ユーザ: **Jobs**
 - サブアカウントのゲーム用ユーザ: **Games**

ここではJobsとGamesと付けましたが、好きな名前を付けてください。どちらも「Microsoftアカウント」でも「ローカルアカウント」でも構いません。

ただし、同一アカウントで利用することは、やめたほうがいいです。設定して仮に動いたとしても、ユーザプロファイルの同期で問題になる可能性があります。（ファイルが消えたり、消したファイルが復活したり、とにかくそういうどうでもいい所で悩みそう）

私の場合は、メインもサブも、ローカルアカウントで作成しました。必要になればメインアカウントは「Microsoftアカウント」に移行してもいいかもしれないと思っています。
サブアカウントの作成方法は、コンピューターの管理からアカウントを作成し、Administratorsグループに所属させることで管理者権限を与えました。
この辺りはよくわかっているので、悩むことも詰まることもありませんでした。参考リンクをいくつか用意したので、下部を参照ください。

## termsrv.dllのファイルバージョンの確認
まずは、現在、自分の端末にインストールされているtermsrv.dllのファイルバージョンを確認します。
エクスプローラーから「C:\\Windows\\System32\\termsrv.dll」を探し、プロパティを開くだけのお仕事です。

私のDLLはこのような表示でした。
![2020-08-02 10_26_51-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/b46130dc-18ce-e2c5-8a1c-54b2834e9a88.png)
この「ファイルバージョン」の欄をみると、「10.0.19041.84」であることがわかります。

WindowsUpdateの一時しのぎの為に、バックアップを取っておいてもよいかもしれません。

## RDP Wrapper Library関連のダウンロードとインストール
以下に必要なファイルへのリンクを貼っておきます。

 - [RDP Wrapper Library releases page](https://github.com/stascorp/rdpwrap/releases) ここから「RDPWrap-v1.6.2.zip」をダウンロードして解凍します。
 - [INSTALL of RDP Wrapper and Autoupdater](https://github.com/asmtron/rdpwrap/blob/master/binary-download.md) ここから「autoupdate.zip」をダウンロードして解凍します。

## 導入手順等
インストールの手順は、 [INSTALL of RDP Wrapper and Autoupdater](https://github.com/asmtron/rdpwrap/blob/master/binary-download.md) に記載された手順で行います。

以下、注意すべき点を列挙しておきます。参考にしてください。

 - LINK#1、LINK#2が記載されていますが、LINK#1が本家ですので、念のためこちらにしましょう。（この記事を見ながらなら既にダウンロード済み）
 - どこかで「RDPWInst-v1.6.2.msi」はうまく動かなかったみたいな記事を見たので、zipを使いましょう。
 - インストール先は「C:\\Program Files\\RDP Wrapper」固定ですので、これにあわせます。
 - batファイルを実行する場合は、右クリックで「 **管理者として実行** 」するのを忘れないようにしましょう。
 - 「install.bat」を実行すると、「C:\\Program Files\\RDP Wrapper」フォルダが自動で作られ、「rdpwrap.dll」と「rdpwrap.ini」が展開されます。紛らわしいので、私は後からすべてのファイル（install.bat等）を「C:\\Program Files\\RDP Wrapper」に突っ込みました。（最初に別のフォルダで実行してしまった）
 - helperフォルダ配下にある「autoupdate__enable_autorun_on_startup.bat」などは、自動更新しないのであれば、実行する必要はありません。私は使わずに手動で「autoupdate.bat」を実行するだけに留めました。
 - ネットで他の記事を見ていると、「rdpwrap_ini_updater_(02_August_2019).zip」等「rdpwrap.ini」を編集する系のパッチがあったりしますが、「RDP Wrapper Autoupdate」で済むので、現時点では不要だと思います。
 - ネットで拾ったtermsrv.dllを自分のPCのDLLに上書きするのは、絶対にやめましょう。マルウェア感染リスクが高いです。

### フォルダイメージ
ダウンロードしたファイルを展開し、最終的に、こんな感じに配置できればOKです。

```
C:\Program Files\RDP Wrapper
│  autoupdate.bat
│  install.bat
│  RDPCheck.exe
│  RDPConf.exe
│  RDPWInst.exe
│  rdpwrap.dll
│  rdpwrap.ini
│  rdpwrap_new.ini
│  uninstall.bat
│  update.bat
│
└─helper
        autoupdate__disable_autorun_on_startup.bat
        autoupdate__enable_autorun_on_startup.bat
        autoupdate__info.txt
```

## 最後にRDPConf.exeで確認
RDPConf.exeで右上が「fully supported」になっていればOK
![2020-08-02 21_01_57-RDP Wrapper Configuration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/5aeab8e6-a0ae-7d21-e5de-b8a9b49f5a00.png)

私の用途では、設定はデフォルトのままで大丈夫そうです。

## 「リモートデスクトップ接続」の有効化と接続確認
Windowsの標準の設定では、リモートデスクトップの機能が無効になっています。これを有効にする必要があります。
こんな感じですね。参考リンクをいくつか用意したので、下部を参照ください。
![2020-08-03 15_14_01-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/66bc5bef-889f-defe-de86-1556c875f018.png)

ここの「ユーザーの選択」で、JobsとGamesを追加しておきましょう。ここに追加することで、「Remote Desktop Users」グループに追加されます。（Administratorsグループに参加してあれば不要ですが念のため）

また、セキュリティを高めたい場合は「ネットワークレベル認証でリモートデスクトップを実行しているコンピューターからのみ接続を許可する」にチェックしましょう。ネットワークレベル認証(NLA)を利用すると、セッション確立前に認証処理が先に行われます。ただし、「リモートデスクトップ接続」を他の用途でも使用している場合はNLAを使用するかきちんと検討・確認しましょう。

## 「リモートデスクトップ接続」出来るか確認する
まずは、他のPCからこのPCに実際に接続できるか、確認してみましょう。接続できればOKです。これが出来ないことには、自PCの接続なんてできません。
接続できない場合は、Windows標準のファイアウォールや、その他のセキュリティソフトウェアにブロックされていないか確認してください。

## Windows標準の「リモートデスクトップ接続」で設定を保存する
リモートデスクトップが問題なく使えることを確認したら、自PCから接続できるか確認してみましょう。
その時の設定内容はこんな感じです。
![2020-08-02 23_50_47-Window.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24940/b524c624-1d63-13dd-7579-3651544718b6.png)

この時、自PCを指すループバックアドレスは「127.0.0.1」で良いはずなのですが、 **「127.0.0.2」にしないと接続できません** でした。
理由がちょっとよくわからなかったので、ご存じの方は是非教えて下さい。

ユーザ名は、Jobsでログインしており、GamesにRDP接続する場合の例です。ユーザ名の前の「．￥」は、ローカルPC名と同一の意味です。たぶん勝手にPC名に置き換わります。（PC名を晒さず、スクリーンショットを取るための処置です。気にしないでください）
後述しますが、パスワードを保存したい場合は、この「資格情報を常に確認する」のチェックを外す必要があります。

## Windows標準の「リモートデスクトップ接続」で設定を保存する
アイコンのワンクリックでRDP接続を完了させるためには、以下の設定が必要でした。

 - ローカルグループポリシーで「NTLM のみのサーバー認証で保存された資格情報の委任を許可する」を有効にする。似たような名前のポリシーがいくつかあるので変更する際は注意が必要です。私の場合は「サーバを一覧に追加」で「TERMSRV/*」と登録しました。
 - グループポリシーを変更したときは、素直にPCを再起動しましょう。gpupdateコマンドで適用したつもりでも動かないケースがありました。（裏でGamesアカウントでログインしてたからかも）
 - RDP接続画面の「資格情報を常に確認する」のチェックを外す。 **保存したい場合はチェックを外す** って、紛らわしい・・・普通逆じゃない？
 - 資格情報マネージャーにアカウントとパスワードを登録する。（接続時に一緒にパス入力したほうが良さそうです）

うまく動かない場合は、資格情報マネージャーの画面から登録したパスを一度削除し、接続時のパス入力で登録されるようにすることでうまく動くようになりました。
これについても参考リンクを用意したので、下部を参照ください。

# 便利なユーザ切り替え方法
次のような操作でアカウント切り替えが可能でした。

 1. PC起動後、Jobsアカウントで通常ログインする。
 2. RDP接続で、Gamesアカウントでログインする。（別窓にデスクトップ起動）
 3. RDP接続で接続した別窓を閉じる。（セッションは残り、切断した状態になる）
 4. （2020/08/05編集: 便利なショートカットキーがありました）
   - ~~Jobsアカウント側のスタートメニューから、アカウントの切り替えでGamesアカウントに切り替える（既にこの時点で「サインイン済み」と表記されている）~~
   - 「Windowsキー＋Lキー」でロック状態にしたのち、アカウントの切り替えでGamesアカウントに切り替える。
 5. Gamesアカウントで通常ログインし、デスクトップに切り替わる。
 6. RDP接続で、Jobsアカウントでログインする。（別窓にデスクトップ表示）

この操作をしても、サインアウトするまではセッションが生きているので、作業中の内容などはそのまま引き継がれています。
ログイン時の起動処理などは済んだ状態で切り替えできるので、かなり素早く切り替えできます。素晴らしい。

3の手順で別窓を閉じなくても切り替えできますが、6の手順でRDP接続先が入れ替わると「RDP切断メッセージが出たGamesアカウントの別窓画面」が最前面に表示されてややこしいことになったので、閉じてからのほうが良さそうです。

通常のユーザ切り替えに加え、「事前に起動処理を行わせておける」ことと、「別アカウントの画面を覗ける」といった感じです。

# ゲーム関連のインストールについて
記事の内容的には、これで終わりなのですが、個人的な設定は続きます。「こんな感じにしたよ」を書いておきます。ご参考ください。

## Gamesアカウントでログインした時の設定
ゲーム用ユーザ: **Games** では、以下のようにしました。

 - Steam、EpicGames、Origin、Uplay等のインストールは、「C:\\Program Files」ではなく、「C:\\Users\\Games\\AppData\\Local」配下にインストールした。例えばSteamの場合、インストール先の指定を「C:\\Users\\Games\\AppData\\Local\\Steam」といった場所にします。（これでJobsアカウント側からは見えなくなる。ただ、いくつか「C:\\Users\\Public\\Desktop」にショートカットを作られたりしたので、それらは「C:\\Users\\Games\\Desktop」に手動で移動した）
 - Steam、EpicGames、Origin、Uplay等は、いずれもログイン時の自動起動を有効にし、Gamesアカウントでログインしたときのみ起動することを確認した。Jobsアカウントでログインしたときは、これらのプログラムが起動しないので、期待通りの動きです。
 - Discordは普通にインストールした。本当は、メインサブ共通のプログラムとして、両方で見れるようにしたかったが、「C:\\Program Files」に入れる方法がわからなかった（というか、インストール先を選ぶ画面すらない）ので、断念した。
 - Discordは標準で「C:\\Users\\Games\\AppData\\Local」にインストールされる。GamesアカウントでログインしているときしかDiscordが使えないが、Jobsアカウントでログインしたときは、RDP接続で見ることで妥協した。
 - Discordは同一アカウントで2接続すると、多重ログインで片方が蹴られるので、DiscordをJobsアカウントにもインストールすることは断念した。

## 運用方法について
運用は、以下のようにしています。

 - 普段は「Jobsアカウントでログインして、RDP接続でGamesアカウントにログイン」して使う。
 - ゲームを本格的に遊ぶ場合は「Gamesアカウントでログインして、RDP接続でJobsアカウントにログイン」して使う。

このようにやっぱり切り替える必要がありますが、メインとサブの役目自体を入れ替えれば、なんとか最小限の切り替えで済む感じです。

## ゲームの動作について（所感）
RDP経由でのゲーム実行は、正直無理です。軽いブラウザゲーム程度なら動くと思いますが、色々不都合が多いです。
主に3Dゲームのマウス移動検知がうまく動かないみたいです。コントローラがあれば動かせるかも？（持ってないので試してない）
また、もたつき感もあるので、速度が求められるゲームは動いたとしても難しいと思います。

以下、軽く試してみたものを書いています。

 - Just Cause 4 ⇒ ×
   - RDP接続経由だと、プログラム起動時に「要求されたセッションは、リモート制御を許可するように構成されていません。」と表示され起動できない（メッセージを読む感じだと、これは設定で解除できそう？）
   - 上記のアカウント切り替えテクニックを使って、GamesアカウントでJust Cause 4を起動してからJobsアカウントに戻り、RDP接続から操作しようとしたが、キーボード操作は行えるものの、マウスが反応せず、遊ぶことができなかった。
 - Faster Than Light(FTL) ⇒ ○
   - ちょっと重くてもたつく感じはあるが、普通にRDP接続で遊べた。
 - 7 Days to Die ⇒ ×
   - プログラムは問題なく起動し、メニュー操作までは問題なかったが、ゲームが始まると、マウスがボタン以外の操作が効かないので、左右のパンチが出来ても振り向けないことに。

素直に、ゲームするときは、アカウントを切り替えて遊んだほうが良さそうですね。

# 参考リンク
私が参考にしたリンクや、参考になりそうなページのリンクを張っておきます。

 - RDPや、RDP Wrapper Library関連
   - [Qiita: RDP Wrapper Libraryが突然使えなくなった！](https://qiita.com/murashi/items/2d497193a2224a7fdacf)
   - [Qiita: RDP Wrapper Library のインストール](https://qiita.com/aoi70/items/47e521c6a310e3959b35)
   - [Qiita: さらに RDP Wrapper Library が使えなくなって fork先に変更した。](https://qiita.com/shooskay/items/3c0e28581097de7bb401)
   - [Qiita: Windowsアップデートによってリモートデスクトップできなくなった場合の対処](https://qiita.com/michi/items/b56adbc9dabee8edd759)
   - [Hobby Gardens: Windows10で，Desktop＆RDP2ユーザの同時ログイン（2017年12月アップデート対応）](https://www.kougen.dev/hobbygardens/article.php?id=65)
   - [Windows OS Hub: How to Allow Multiple RDP Sessions in Windows 10?](http://woshub.com/how-to-allow-multiple-rdp-sessions-in-windows-10/)
   - [つくみ島だより: Windows10 1803以降で対策されたRDP Wrapperをインストールする](https://blog.tsukumijima.net/article/rdp-wrap-not-running/)
   - [Windows Server 2012R2 実践ガイド: RDPのネットワークレベル認証とは](http://win2012r2.com/2019/02/10/post-475/)

 - ユーザアカウントの作成関連
   - [Adobe: 新規ユーザーアカウントの作成方法 #Windows 10 のアカウント作成方法](https://helpx.adobe.com/jp/x-productkb/global/cpsid_83227.html#Windows10%E3%81%AE%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E4%BD%9C%E6%88%90%E6%96%B9%E6%B3%95)
   - [4thsight.xyz: Windows10でローカルユーザーアカウントを作成する方法（コンピューターの管理編）](https://4thsight.xyz/16231)

 - リモートデスクトップ接続の設定、保存、資格情報保存関連
   - [PC設定のカルマ: Windows10 - リモートデスクトップを有効（オン）に（コントロールパネル）](https://pc-karuma.net/windows-10-enable-remote-desktop-services/)
   - [Tech TIPS - ＠IT: 【Windows 10対応】リモートデスクトップで目的のPCに一発接続する](https://www.atmarkit.co.jp/ait/articles/2004/22/news018.html)
   - [MURA's Home Page: リモートデスクトップの資格情報を保存する](https://www.vwnet.jp/Windows/w10/20151114/EnableSeveCredential.htm)
   - [mhiroblog: Windows 資格情報を利用したRDP接続について](https://mhiroblog.wordpress.com/2016/12/05/windows-%E8%B3%87%E6%A0%BC%E6%83%85%E5%A0%B1%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%9Frdp%E6%8E%A5%E7%B6%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/)
   - [PC設定のカルマ: Windows10 - ローカルグループポリシーエディターを起動する方法](https://pc-karuma.net/windows-10-pro-gpedit/)

これらの「参考リンク」の記事は、大変参考になりました！記事を作って頂きありがとうございます！改めてお礼申し上げます。

# 最後にマイクロソフトさんに提案
マイクロソフトさんには、是非、Windows標準の機能として「**マルチログイン機能** （私が勝手に命名した呼び名）」を実装してほしいです。つまり、1つのアカウントにログインしたまま、別のアカウントにログインし、そのデスクトップを別窓で操作する機能です。
これが標準機能であれば、こんなグレーなことをしなくて済みます。

これ「1人＝1アカウント」が常識だろ！2アカウント利用なんて認められませんって言われそうですけど、普通に利用シーンはあります。

例えば、企業のシステム管理者は、Administrator権限を持ったアカウントを常時使用することは推奨されません。まともなシステム管理者ならば、普段はUser権限のアカウントを使います。これだけで「1人複数アカウント使用な状態」です。
そこで、普段使っているアカウントでログインしたまま、Administrator権限のユーザでログインして、デスクトップ操作を行うなんて、便利だと思いませんか？

ほかにも「ある業務アプリを使うために、アカウントを切り替えなければならない」ようなケースもあるのではないでしょうか。

あとは、グループポリシー（レジストリ）で「マルチログインを許可する・しない設定」といったものや、「どのアカウントが同一人物かの設定」なんかが管理できれば、ActiveDirectory環境でも活躍しそうですね！

----

ということで、個人用途から企業用途まで、夢が広がったところで、この記事はおしまいです。
長々とお付き合い頂き、ありがとうございました。