韜晦日記

韜晦日記

Rietveldよりもプログラミングメインになりつつある

Rietveld解析初心者による備忘録とつぶやき

RDP Wrapperでリモートデスクトップできないときの対処法 【Win10 Home】

※ 対応バージョンの注意
この解決方法は以下のWindows10のバージョンまでしか対応できません。

  • Edition : Windows10 Home
  • Version : 1809
  • OS build : 17763.379(10.0.17763.379)

バージョンの確認方法は、キーボードのWindowsボタン(窓アイコン) + sと打ちaboutと検索すると確認することができます。
あるいはWindows のバージョン確認方法のようにWindowsボタン(窓アイコン) + rwinverで検索する方法もあります。
2019.4月現在、最新であるOS build : 17763.437に対する対処法はまだないようです。残念ながら公式Githubを観察するしかなさそうです。

MacからWindowsをリモート操作する

Macや他のWindows機を使ってWindows機を操作する方法としてRemote Desktopがあります。
これはWindows10 Proなどではデフォルトで使用できるのですが、Windows10 Homeでは利用できません。
そこでRDP Wrapper Library v1.6.2 を用いてリモートデスクトップを実現します。

ここではRDP Wrapperが使えず、エラーが起きた際に私がとった対処法を書きたいと思います。

まずはインストールや設定など。

RDP Wrapperのインストール

インストールは公式GithubのReleasesの最新版をインストールします。

インストールの仕方などは以下のサイトが参考になります。
素直にそのままやればインストールはできるはずです。

Windows Homeにリモートデスクトップで接続する方法 【RDPWrap】 - WICの中から

Windows 10 Homeにリモートデスクトップ接続できるようにする | 俺的備忘録 〜なんかいろいろ〜

そして全然解決できないエラー

数ヶ月前までは普通に使えていたのですが、突然接続した際にエラーが出るようになりました。
実際のエラー画面が以下のようになります。

f:id:tanisuke_str:20190414235831j:plain:w600
Microsoft Remote Desktopのエラー画面
f:id:tanisuke_str:20190414214113j:plain:w600
ついでにParallels Clientでのエラー画面

対処法を模索する

そこでWindows10側にインストールしたRDP Wrapperの設定画面を確認してみます。
まずはダウンロードしたRDP Wrapperのフォルダを開きRDPConf.exeファイルを実行します。
すると管理者権限の承認画面のあとに以下のような画面が現れます。

f:id:tanisuke_str:20190414214823p:plain:w600
RDP Wrapper Configurationの画面

この画像を見る通り、Listener stateの部分がNot listening [not supported]となっていました。
人によってはlistening [not supported]Not listening [fully suppoted]となっているようです。
いずれにせよ、ほとんどの場合でListener stateの部分がlistening [fully suppoted]とならない限りは接続することはできないようです。

これについて公式Githubのissuesを確認して見ると解決方法について議論されていました。

ここでの会話から以下のことがわかりました。

  1. Windows updateにより、termsrv.dllがアップデートされた
  2. それに伴い、rdpwrap.iniを更新しなければならない
  3. RDP warpperのアップデートが来るまでは自分でrdpwrap.iniを変更する必要がある。

さて、解決方法は分かったのであとは修正するだけです。

対処法

対処法はシンプルで、rdpwrap.iniを書き換えるだけです。

rdpwrap.iniを確認する

rdpwrap.iniを開くために、windows + rC:¥Program Files¥RDP Wrapperと入力してOKします。
それか、Cドライブ直下のProgram FilesフォルダにあるRDP Wrapperを開きます。
するとrdpwrap.initermsrv.dllファイルがあることが確認できるはずです。
ここでrdpwrap.iniを書き換えるので念のためコピーを保存して起きます。

テキストエディタを管理者権限で開く

お使いのテキストエディタを管理者権限で開いてください。
普通のメモ帳でも構いません。そしてrdpwrap.iniを開きます。

中身を書き換える

変更箇所は2箇所あります。
まず始めに3058行目あたりにジャンプするか、[SLInit]と検索します。
すると、以下のように書かれていると思います。

[10.0.17763.1]
LocalOnlyPatch.x86=1
.
. // 中略
.
SLInitFunc.x64=New_CSLQuery_Initialize

[SLInit]
.
.
.

この[SLInit]の前に以下の文を挿入します。
必ず前後にあるSLInitFunc.x64=New_CSLQuery_Initialize [SLInit]から1行ずつ離してください。

[10.0.17763.292]
; Patch CEnforcementCore::GetInstanceOfTSLicense
LocalOnlyPatch.x86=1
LocalOnlyOffset.x86=AFAD4
LocalOnlyCode.x86=jmpshort
LocalOnlyPatch.x64=1
LocalOnlyOffset.x64=77A11
LocalOnlyCode.x64=jmpshort
; Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled
SingleUserPatch.x86=1
SingleUserOffset.x86=4D665
SingleUserCode.x86=nop
SingleUserPatch.x64=1
SingleUserOffset.x64=1322C
SingleUserCode.x64=Zero
; Patch CDefPolicy::Query
DefPolicyPatch.x86=1
DefPolicyOffset.x86=4BE69
DefPolicyCode.x86=CDefPolicy_Query_eax_ecx
DefPolicyPatch.x64=1
DefPolicyOffset.x64=17F45
DefPolicyCode.x64=CDefPolicy_Query_eax_rcx
; Hook CSLQuery::Initialize
SLInitHook.x86=1
SLInitOffset.x86=5B18A
SLInitFunc.x86=New_CSLQuery_Initialize
SLInitHook.x64=1
SLInitOffset.x64=1ABFC
SLInitFunc.x64=New_CSLQuery_Initialize

そしてこのファイルの末尾に以下の文を挿入します。
これも前のコードから1行必ず開けるようにしてください。

[10.0.17763.292-SLInit]
bInitialized.x86 =CD798
bServerSku.x86 =CD79C
lMaxUserSessions.x86 =CD7A0
bAppServerAllowed.x86 =CD7A8
bRemoteConnAllowed.x86=CD7AC
bMultimonAllowed.x86 =CD7B0
ulMaxDebugSessions.x86=CD7B4
bFUSEnabled.x86 =CD7B8

bInitialized.x64 =ECAB0
bServerSku.x64 =ECAB4
lMaxUserSessions.x64 =ECAB8
bAppServerAllowed.x64 =ECAC0
bRemoteConnAllowed.x64=ECAC4
bMultimonAllowed.x64 =ECAC8
ulMaxDebugSessions.x64=ECACC
bFUSEnabled.x64 =ECAD0

これでrdpwrap.iniの変更は完了です。

再起動して再チャレンジ

PCを再起動して再びRDPConf.exeファイルを実行します。
すると......
Listener stateの部分がlistening [fully suppoted]となっているはずです。

これで再びMacからRemote desktopを実行すると見事に接続することができるようになりました。

めでたしめでたし。