作ったもの、気づいたこと、試したこと。元エンジニアの視点で技術をつづる雑多ブログ「Weizlogy」。
外出先や別室のAndroid端末から、自宅のWindowsメインPCを起動・リモート操作するための環境構築手順、および主要なリモート接続ソフトウェアの比較検証結果を記録する。

本稿では、以下の環境構成および検証結果について述べる。
スリープ状態のホストPCをネットワーク経由で立ち上げるため、マザーボード(UEFI)およびOS側のネットワークアダプター設定を行う。
使用マザーボード:ASRock B550M-HDV
UEFI画面にて以下の項目を有効化する。
Advanced > ACPI Configuration > PCIE Devices Power On > Enabled
※マザーボードのベンダーやチップセットによって「Power On By PCI-E」「WoL」等、項目名が異なる場合がある。
Note: 意図しないブロードキャストパケット等による予期せぬPC自動起動を防ぐため、Magic Packet限定設定を推奨する。
WAN(外部ネットワーク)から直接ブロードキャストを送るリスクを避けるため、LAN内に常時稼働している機器からパケットを出力する構成とする。
LAN内に常時稼働しているSynology製NAS(検証環境:DS215j)の内部コマンドおよびタスクスケジューラーを利用する。
/usr/syno/sbin/synonet --wake <対象PCのMACアドレス(XX:XX:XX:XX:XX:XX)> eth0;
Synology DSMの「タスクスケジューラー」に上記シェルスクリプトを登録し、外部からのトリガーまたは定期実行でパケットを送出する。
サブ機として常時起動しているWindows端末(検証環境:Surface Pro 2)からPowerShell経由で送信する。
PowerShellの System.Net.Sockets.UdpClient を利用したマジックパケット送出スクリプトを実行する。
$mac = "XX:XX:XX:XX:XX:XX"
$macBytes = $mac -split "[:|-]" | ForEach-Object { [Byte]"0x$_" }
$packet = [Byte[]](@(0xFF)*6 + $macBytes*16)
$UDPclient = New-Object System.Net.Sockets.UdpClient
$UDPclient.Connect(([System.Net.IPAddress]::Broadcast), 9)
$UDPclient.Send($packet, $packet.Length)
Android端末をクライアントとし、Windows PCをホストとして操作した際の比較結果を以下に示す。
| ソフトウェア | 遅延 / 画質 | 再起動追従性 | Android操作性 | 主な特徴・備考 |
|---|---|---|---|---|
| Chrome リモートデスクトップ | 遅延あり / 低~中画質 | ✕(接続不可) | 〇(ピンチイン縮小可) | 設定が容易。テキスト処理等には十分だが高負荷作業向きではない。 |
| Parsec | 超低遅延 / 高画質 | 〇(再接続可) | ✕(拡大縮小・カーソル制限) | 画面遅延は最少。Android版UIの操作性・キーボード重なりに課題。 |
| Moonlight + Sunshine | 低遅延 / 高画質 | ✕(接続不可) | △(拡大不可 / 仮想コントローラー有) | Tailscale等VPN必須。環境構築の手間はあるがゲームパッド統合が強力。 |
| Razer PC Remote Play | 低遅延 / 中~高画質 | △ | ✕(コントローラー前提) | 接続時にホスト側の画面を消灯可能(セキュリティ面で優秀)。 |
| Steam Link | 低遅延 / 可変画質 | △ | 〇(仮想コントローラーの自由度高) | 低ビットレート(3Mbps~)動作可能。時折接続エラーが発生する。 |
Android端末からのリモートWindows操作において、すべての要件(操作性・低遅延・容易な構築)を単体で完全に満たすソフトウェアは現時点で存在しない。用途に応じた組み合わせ選定が必要となる。
なお、2026年時点における総合的な推奨構成(ベストプラクティス)は「Moonlight + Sunshine + Tailscale」の組み合わせである。