【2020年版】WindowsからMacへリモートデスクトップ接続(VNC)する方法【無料ソフト】

##<font color=blue>1.概要</font>
Windows端末から母艦となるmacOSのデスクトップ環境（GUIアプリケーション）を使用する方法を解説します。
個人使用を目的としてフリーウェアの範囲内で選定しましたが、本稿後半ではその選定理由も簡単に説明します。

##<font color=blue>2.設定</font>
本項では、AnyDeskを取り上げ、インストールから設定方法から最低限の使用方法まで解説しています。

###2-1 製品インストール
ホスト(母艦)・クライアント(端末)それぞれで

(1) 任意のブラウザで[**AnyDeskのWebサイト**](https://anydesk.com/ja)へアクセスします。
(2) [Free Download]ボタンより、アプリケーションをダウンロードします。
(3) インストーラのダウンロードが終わったら、実行・インストールします。

※本稿初回執筆時点(2020年12月8日現在)の公開バージョンは下記の通り

|プラットフォーム|ver.|
|:--|:--|
|[macOS](https://download.anydesk.com/AnyDesk.dmg)|6.1.0|
|[Windows](https://download.anydesk.com/AnyDesk.exe)|6.0.8|

###2-2 アクセス設定
(1) 母艦側にて、AnyDeskのフロントエンドプログラムウィンドウを開きます。
(2) ウィンドウ右上の[≡]ボタンをクリックして設定画面を開きます。
(3) [セキュリティ]タブを開きます。
(4)「無人アクセスを許可する」をチェックし、パスワードを設定します<font color=red>（不正ログイン防止のため、安全性の高いパスワードの設定を推奨）</font>。
(5)「キーボードとマウスを使う」をチェックします。
(6) その他の設定は必要に応じて設定してください。

###2-3 リモートデスクトップ接続
(1) ホスト側のAnyDeskアドレス（自動的に割り振られた9桁の数字）をメモします。
(2) クライアント端末側にて、AnyDeskのフロントエンドプログラムウィンドウを開きます。
(3)「ほかのワークスペース」の入力ボックスへ、先ほどメモしたAnyDeskアドレスを入力し、[接続]ボタンをクリックします。
(4) アクセスパスワードを求められるため、母艦側のAnyDeskに設定したパスワードを入力します。
(5) 母艦側で、途中で<br />macOS システム環境設定 > セキュリティとプライバシー > プライバシー > アクセシビリティ<br />の設定を求められますので、<br />設定画面のカギボタンを押してロック解除し、AnyDeskへの許可をチェックします。
(6) クライアント側に母艦のGUIが表示されれば、操作可能となります。

※AnyDeskアドレスには、自動的に割り振られる9桁の数字以外にも、エイリアス名として任意の英数字を設定可能のようです。

###2-4 AnyDeskの起動方法
クライアント側のAnyDeskから接続しようとしても、反応が無かったりエラーが出て接続処理が中断する場合があります。
特に、macの電源を入れただけでは、接続する事が出来ません。
母艦側がログイン前/ログアウト状態により、必要なプロセスが起動していない事が原因と考えられます。

####2-4-1 スタートアップに登録
(1) ホスト側のmacOS上でのLaunchDaemonsのディレクトリを開きます。

```:ディレクトリ移動コマンド
cd /Library/LaunchDaemons
```

※launchdには似たような役割のディレクトリが幾つかあります。その違いについては、他記事をご参照ください。
[**launchdが言うことを聞かない場合に見直すべきこと**](https://qiita.com/MARQUE/items/42446bbca65bbce27a43#daemon%E3%81%A8agent)

(2) 雛形として既存の.plistファイルをコピーします。

```:ファイルコピーコマンド
sudo cp ./com.philandro.anydesk.service.plist ./com.philandro.anydesk.Backend.plist
```

(3) 編集して保存します。

```:Vim起動コマンド
sudo vi ./com.philandro.anydesk.Backend.plist
```

下記の通り、"service" の部分を "backend" に書き換えます。

```:ファイル比較結果
diff ./com.philandro.anydesk.service.plist ./com.philandro.anydesk.Backend.plist
10c10
<       <string>com.philandro.anydesk.service</string>
---
>       <string>com.philandro.anydesk.Backend</string>
16c16
<               <string>--service</string>
---
>               <string>--backend</string>
```

####2-4-2 ルートユーザ有効化
システム権限で操作する必要がある場合、予めルートユーザを有効にする必要があります。
<font color=red>サイバー攻撃により悪意のあるユーザにroot権限を奪取される危険が高まるため、本項の実施はセキュリティ上は好ましくありません。</font>

(1) 次に示す、macOSの設定画面を開きます。<br />システム環境設定 > ユーザとグループ > ログインオプション
(2) カギボタンを押してロック解除し、「ネットワークアカウントサーバ:」の[接続…]ボタンをクリックします。
(3) ポップアップウィンドウ内の[ディレクトリユーティリティを開く]ボタンをクリックします。
(4)「ディレクトリユーティリティ」ウィンドウ上のカギボタンを押してロック解除します。
(5) 画面上のメニューバーから選択します。<br />編集 > ルートユーザを有効にする
(6) ルートユーザログイン用のパスワードを設定します。

※[**Appleサポートサイト**](https://support.apple.com/ja-jp/HT204012)

####2-4-3 SSH経由で起動
<font color=red>※一部、ルートユーザの有効化を前提とした方法が含まれます。セキュリティ上のリスクを検討し、そのリスクを受容する場合に実施して下さい。</font>

(1) AnyDeskの接続が何度やっても失敗する場合、ホストPCへSSH接続します。
(2) 起動プロセスを確認します。

```:プロセス確認コマンド
ps aux | grep -i anydesk
```

```:プロセス確認結果
YunoMac:LaunchDaemons yu$ ps aux | grep -i anydesk
yu    *** *** *** *** *** ** **:** *:**.** /Applications/AnyDesk.app/Contents/MacOS/AnyDesk --agent-frontend
yu    *** *** *** *** *** ** **:** *:**.** /Library/PrivilegedHelperTools/com.philandro.anydesk.Helper
root  *** *** *** *** *** ** **:** *:**.** /Applications/AnyDesk.app/Contents/MacOS/AnyDesk --service
```

(3) 起動プロセスに "--agent-frontend" が無い場合、ルートユーザでログインします。

```:ユーザ切り替え
YunoMac:LaunchDaemons yu$ su -
Password:
YunoMac:~ root#
```

※ログアウト状態である場合、rootユーザで起動しないと直ぐに終了してしまうため。

(4) AnyDeskをバックグラウンドで起動させます。

```:プロセス起動コマンド
sh -c '/Applications/AnyDesk.app/Contents/MacOS/AnyDesk --backend' &
```

※ホスト側のAnyDeskの動作に異常があるとみられる場合、killコマンドでプロセスを一旦停止する手もありますが、下手にサービスを落とすとシステムがハングアップするので注意して下さい。

##<font color=blue>3.背景・目的</font>
簡単に言えば、「Mac miniをお試しで買ったので、ノートPCから操作したい」です。

##<font color=blue>4.選定経緯</font>
###4-1 OSバンドルソフトの使用感
macOSでは、「共有」機能により簡単な設定でSSHサーバやVNCサーバとして使用出来ます。
Windows側にUltraVNCをインストールしてVNCでログインしてみましたが、実用レベルには程遠いものでした。右クリックメニューから操作を選択する時などのレスポンスが悪いです。そして、動画が再生されている画面ではネットワークの帯域を30～100Mbps程度消費するため、ファイル転送や他のデバイスの通信に影響を及ぼしそうです。

対して、WindowsではProfessionalエディションでMicrosoft謹製の「リモートデスクトップ接続」のサーバ機能が使用出来ます。LAN内で使用するならローカルのデスクトップ環境とそれほど遜色ないレベルで操作可能で、業務でもこれを使用して作業する事が少なくなくありません。リモート操作の基準と言って良いでしょう。
###4-2 プロトコルの違い
VNC (Virtual Network Computing) のviewer即ちVNCクライアントソフトでは、エンコード形式（圧縮アルゴリズム）を幾つかある中から選択する事が出来ます。圧縮アルゴリズム及び圧縮率を変える事でレスポンスや通信帯域は改善はする事があるものの、安定感がありません。しかも、ZRLE, Tight, ZYWRLE, Hextile, Zlibなど数あるアルゴリズムから用途に合わせて最適なものを選択する必要があるとなると、手軽に使える代物ではありません。
VNCがデスクトップ画面全体を画像としてviewerへ送信するのに対し、RDP (Remote Desktop Protocol) ではオブジェクト単位にして送信する事で高効率を実現しているようです。（[**参考リンク**](https://qastack.jp/superuser/32495/whats-the-difference-between-rdp-vs-vnc)）

RDPが優れているならVNCではなくそっちを使えば良いじゃんと思うでしょうが、そうはいかないのが現状です。VNCは元からクロスプラットフォーム向けに開発されたものですが、RDPはCitrixの技術を基にMicrosoftがWindows用に開発したものです。
現在、macOS用にも開発され、一般向けに配布されているRDPサーバソフトウェアは、見つけられませんでした。

###4-3 リモートデスクトップソフトの比較
VNCソフトウェアを紹介しているWebサイトで、低帯域など評判が良さそうだったものを試しました。

また、Wikipediaの英語版ページには、ソフトウェアのジャンルごとに比較表を載せた記事があります。
以下は、リモートデスクトップソフトウェア製品の比較であり、VNC、RDP、これらと互換性の無い独自プロトコルのものが混在しています。
[**Comparison of remote desktop software**](https://en.wikipedia.org/wiki/Comparison_of_remote_desktop_software)

表に候補製品が30個も40個も列挙されていると見辛いものです。並べ替え機能はあるのですが、フィルタ機能が無いため、並べ替えしてその一部を表計算ソフトにコピペします。
<font color=blue>製品を絞り込む観点は、macOSでサーバになれるか、無料で使用可能か。

|製品名|概説|採否|理由|
|:--|:--|:-:|:--|
|RealVNC|VNCの本家|×|登録が必要、試用期間設定あり、本稿執筆時はWebサイトが重く未検証|
|Teamviewer|知名度が高い|×|商用利用判定されると制限|
|UltraVNC|使用可能なエンコード形式が多い|×|Windows向けのみ|
|TightVNC|低速環境に強み|×|macOS用サーバソフト無し?|
|TigerVNC|TightVNCから派生|<font color=red>△</font>|macOS用サーバソフト無し、macOS用VNCクライアントとしては優秀|
|AnyDesk|接続先ホストを独自のアドレス番号で指定|<font color=red>◎</font>|クロスプラットフォーム、出来が良い、簡単に使える|
|NoMachine|接続先ホストをIPアドレスで指定|<font color=red>○</font>|クロスプラットフォーム、閉域網でも使用可（インターネット接続不要）、[Ctrl]+[←/→]キーによるワークスペース切り替えが効かなかった、日本国内では無名|
|X11vnc|Unix/Linux向けVNCサーバ|×|macOS向けの開発は止まってる模様|
|xpra|アプリケーションウィンドウを転送|×|設定が煩雑、リモートデスクトップとは使い方が異なる|
|Chrome Remote Desktop|Chromeブラウザの拡張機能|<font color=red>○</font>|クロスプラットフォーム、（商用利用含め）無料、要Googleアカウント|
|FreeRDP|無料のRDPソフト|×|macOS用サーバソフト無し|
|Apple Remote Desktop|macOS開発元|×|登録が必要、試用期間設定あり、Webサイトが重い|
|Splashtop|東京大学が<font color=red>~~1000台以上のiMac~~ [**学外からの接続用のMac mini**](https://www.splashtop.co.jp/achievements/todai.html#achievements_interviewee_index03)</font>に採用|<font color=red>◎</font>|無料で利用可能なSplashtop Personalあり、要サインアップ、ショートカットキーも効く|
|Citrix XenApp|VDIのパイオニア企業|×|法人向け|
|VMware vSphere|仮想化ソフトシェアNo.1企業|×|法人向け|

##<font color=blue>5.まとめ</font>
Macのデスクトップ環境をリモートで操作するなら、下記4製品がお薦めです。

|順位|製品名|
|:-:|:--|
|<font color=red>1位</font>|[**Splashtop Personal**](https://www.splashtop.com/personal)|
|2位|[**AnyDesk**](https://anydesk.com/ja)|
|3位|[**Chrome Remote Desktop**](https://remotedesktop.google.com/)|
|4位|[**NoMachine**](https://www.nomachine.com/)|

一番のお薦めをSplashtopに変更しました。国内でのMacへの導入実績があり、ホットキーも使える点がポイント高いと考えたためです。また、筆者が検証した中では、リソース消費（CPU・メモリ・ネットワーク）が比較的少なく済んでいる印象でした。
外部との通信が制限された環境では、NoMachineくらいしか選択肢がありませんが、少なくともビルトインのVNCサーバ機能を使用するよりは快適になる事でしょう。