惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
K
Kaspersky official blog
A
Arctic Wolf
Attack and Defense Labs
Attack and Defense Labs
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
W
WeLiveSecurity
Know Your Adversary
Know Your Adversary
博客园 - Franky
T
Tenable Blog
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Help Net Security
Help Net Security
WordPress大学
WordPress大学
T
The Exploit Database - CXSecurity.com
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
H
Heimdal Security Blog
TaoSecurity Blog
TaoSecurity Blog
S
Security Affairs
J
Java Code Geeks
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Apple Machine Learning Research
Apple Machine Learning Research
NISL@THU
NISL@THU
O
OpenAI News
The Cloudflare Blog
月光博客
月光博客
Google Online Security Blog
Google Online Security Blog
V
V2EX
罗磊的独立博客
美团技术团队
博客园 - 三生石上(FineUI控件)
Security Latest
Security Latest
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cyber Attacks, Cyber Crime and Cyber Security
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cyberwarzone
Cyberwarzone
L
LINUX DO - 最新话题
Hacker News - Newest:
Hacker News - Newest: "LLM"
大猫的无限游戏
大猫的无限游戏

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
一份 macOS / iOS 远程使用 Windows 操作系统的笔记 - 少数派
2023-11-16 · via 少数派

Matrix 首页推荐 

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


一、写在前面

作为 MacBook 十年老用户,让我换 Windows 电脑是很难的。但我有时又确实需要 Windows 软件,这种时候常常就需要用到虚拟机或模拟器。目前,虚拟 Windows 操作系统的应用程序,我用过付费的 Parallels Desktop 和免费版的 UTM;直接运行 Windows 软件而无需安装操作系统的,我用过付费的 CrossOver 和免费的 Whisky。有时不能用,有时不好用,费的心思很多,实际效果有限,且每年都得重新付费以获得更新。每次运行新软件,最难受的地方莫过于在几个软件中来回切换尝试,控制变量找问题,更新也未必总是解决问题,而可能是创造新的困难。

最近买了一台迷你主机,决定彻底解决这个问题,方法也很直观——用 MacBook 远程访问放在家里的 Windows 11 操作系统主机即可。一番折腾之后,实际效果不错。现在,我不论在家或在外,只要有网,就可以远程打开家里的电脑主机,用更为熟悉的 MacBook 键盘、触控板和屏幕远程使用 Windows 操作系统。

一个额外的惊喜是,在 iPad 上打开相同的远程控制软件时,我的 iPad 变成了 Windows 平板,可以触屏,可以使用 Apple Pencil,利用 Mac 和 iPad 的通用控制,还可以使用 Mac 的键鼠和触控板。

我的 Windows 平板(伪)

写这篇文章,一方面是记录实现的过程,以便于我在未来搬家 / 换路由器 / 换网时能够回忆起这番操作;另一方面,也分享一下方法,给有兴趣采用同样方案使用 Mac 和 Windows 的读者一点参考,了解其实现的复杂度,以及实现后仍然存在的缺憾。

本文分享的经验对以下读者可能有帮助:

  • 在家/单位拥有 Windows 操作系统电脑,但在外常用 MacBook 笔记本或 iPad 移动办公;
  • 已经拥有以上的任意一种,犹豫是否需要补上另一种,犹豫的原因之一是,macOS 和/或 iPadOS 系统相较于 Windows 操作系统缺少某些功能或无法兼容某些软件,在一些时候不得不使用 Windows 系统;
  • 理论上,被访问的主机为 Linux 或者其他版本的 Windows 操作系统,访问的客户端是 Windows 系统或 Android 系统等情况,也可以通过类似的方式实现;
  • 我理解,其中的一部分操作,比如远程连接和远程唤醒,对于搭建家庭 NAS 也是适用的。如果未来要搭建 NAS,或许可以考虑先尝试一下实现 Windows 远程桌面。

需要说明的是,我并非专业人士,以下过程纯粹是摸索而来。同时,这篇文章不会特别详细地介绍每一步的实现,而是更像一个步骤清单。对于类似我这样纯粹的外行来说,可能会一次性看到不少陌生名词。这么做的原因在于,一方面,本文所写的内容,基本上都可以在互联网上找到大量教程,只是未必有这么集中,没有必要在这篇文章中再复述一遍,对于不理解的名词或不了解具体操作,可以通过文章里的关键词来检索;另一方面,实现的路径上可选的方案众多,每个人所处的网络环境和路由器也有所不同,具体的操作步骤可能因实际环境而异,也就没有必要在一篇文章里写尽。

不过,我会尽量列出我在摸索过程中看到的各种方法,哪怕是我没有实际尝试采用的那些。

二、整体清单

综合来看,实现远程桌面需要完成以下四步:

  • 第一步,在局域网内实现 Windows 远程桌面,这个过程需要 Windows 10 / 11 专业版或其他支持远程桌面的版本,以及访问远程桌面的软件;
  • 第二步,在外网访问 Windows 远程桌面,这个过程需要公网 IP,桥接(可选),可能需要使用 DDNS,并开启 DMZ,或端口转发,或 upnp;或干脆用其他方式实现内网穿透;
  • 第三步,在外网远程开机 / 唤醒 Windows 主机,这个过程可能需要支持 WoL 的路由器,或手写脚本,或其他 app,或开机棒、智能插座等其他替代方案;
  • 第四步,进一步优化体验,比如图形性能,比如统一远程桌面与 macOS 操作系统的快捷键。

而为了实现以上全部目标,可能至少需要以下硬件设施:

  • MacBook 或 iPad 或 iPhone;
  • 安装 Windows 操作系统的主机;
  • 路由器,网线;
  • 显示器,鼠标。

此外,可能会额外需要:

  • 显卡欺骗器 / 坏掉的显示器;
  • 带 WoL 功能的路由器 / 开机棒 / 智能电源插座。

在实现目标的过程中,可能会用到以下软件 / 应用:

  • Microsoft Remote Desktop,或其他远程桌面软件;
  • 路由器 app,或其他支持远程唤醒的 app;
  • 路由器固件;
  • 优化效果、提升性能的工具,比如英伟达为远程桌面提供的优化工具;
  • AutoHotkey,或其他快捷操作工具;
  • 网盘工具;
  • 自动操作(Automator)。

三、具体步骤

(一)在局域网内访问远程桌面

为什么要在局域网内访问远程桌面?

除了这是进行下面的步骤的前置和测试以外,在局域网内访问远程桌面或许也是不少人的需求——比如,像我这样桌面空间不大,不愿意再展开一组屏幕键盘鼠标的人,可以用一台电脑使用两种操作系统,加上 iPad,选择就丰富至 3 个操作系统共享一套操控和 2 块屏幕(笔记本 + 平板);比如,在家或单位想要将 Mac 或 iPad 作为 Windows 的扩展屏;再比如,想要躺在床上拿着 iPad 假装是 Windows 平板,偶尔运行一些负担较小的独立游戏或老游戏……

不过,以防你在没有看到最后一节就抱有过高期待地上手,需要提前说明的是,这种做法有性能损耗,特别是对显示要求较高的应用程序,效果上可能比主机差很多,因此远程桌面的效果,可能不如无线投屏。

以下正式开始:

一、首先需要在主机端打开远程桌面服务。对于 Windows 10 / 11 专业版 / 企业版的主机,打开设置-系统-远程桌面即可。对于家庭版用户以及其他的一些本身无法打开「远程桌面」的系统版本,有一些方法可以让你「解锁」这个功能,这种做法是否违反用户协议可见此讨论

当然,一些其他的远程桌面软件并不依赖微软的远程桌面协议(RDP),那么也就不需要开启远程桌面的服务。

二、在 macOS 上下载 Microsoft Remote Desktop(MRD)客户端,在 app Store 下载 IOS 上同样可以下载到 Microsoft Remote Desktop 客户端(RD Client)。

三、令 Windows 主机和安装有 MRD 客户端的 Mac / IOS 设备处于同一局域网内,在 Windows 系统中找到「网络与 Internet 设置」,或打开路由器设置页面,或其他网络工具,查看该 Windows 主机的 IP 地址(大概率是形如 192.168.x.x 的内网地址)。

四、打开 MRD 客户端,添加桌面,在 PC name 位置填入上面的 IP 地址,在 User account 填写 Windows 用户的账户密码。如果主机没有设置用户登录密码(空白密码),那么可能需要在设置-账户-登录选项-密码的位置设置一个密码。或者在本地安全策略(secpol.msc)-本地策略-安全选项中禁用「使用空密码的本地账户只允许进行控制台登录」。考虑到将来的外网登录,我理解还是设置一个密码为好。

五、双击点开添加的桌面,可能会弹出证书验证,选择 Show Certificate,勾选 Always trust… 那一行字,之后点击 Continue 即可。

六、如果顺利进入 Windows 系统,那么这一步就完成了。可以右键点击该桌面选择编辑,进一步设置显示方案、共享文件夹等。其中,勾选 Optimize for Retina displays 可以在很大程度上提升在 Mac 上的显示效果,值得一试,但有可能会影响性能。

七、利用其他软件也可以实现远程桌面,这可能需要在主机端和客户端同时打开软件,登录同一个账号,或使用「投屏码」等。有些软件可能需要收费,就目前我体验的其他免费软件来看,使用效果均不如 MRD。

此外,部分实现远程桌面的软件,强制要求主机连接有显示器,如果没有显示器或不想在使用远程桌面时打开 Windows 的显示器,可以用一个便宜的显卡欺骗器或者坏掉的显示器来替代,笔记本则可以打开盖上不熄屏的模式。

(二)在外网访问远程桌面

仅在局域网内使用毕竟不够「远程」,因此,接下来的目标是在外网访问 Windows 远程桌面。从这一节开始,路由器将成为折腾的重心,虽然最终实际的操作步骤不多,但要找到一条最适合自己的路径仍然需要一定的尝试。此外,本节开始涉及的公网访问等事项,是否存在以及存在多大风险,请自行判断。

从刚才的步骤可以看出,用 MRD 访问远程桌面使用的是 Windows 主机的 IP 地址,这个逻辑也适用于在外网远程访问桌面。不过,刚才我们查看到的地址,是一个形如「192.168.x.x」的内网 IP 地址,离开了局域网,就不可能根据这个地址定位到这台主机。因此,接下来一系列操作的最终目标,其实就是获得一个能够在外网定位到这台主机的地址。以下具体说明:

首先,最好的情况是有一个公网 IP。有公网 IP,才能够在外网与家里的主机通信。并不是所有的家庭都有公网 IP,网上可以找到很多判断家里是否公网 IP 的方法。其中最简单的是在浏览器搜索本机 IP(注意搜索时不要使用代理),将看到的结果与登录路由器设置页面查看到的 WAN IP 对比,二者一致意味着有公网 IP。需要注意的是,如果你家里同时有光猫和路由器,需要分别登录二者的路由器设置界面看。进入路由器设置页面的地址、账号和密码一般就贴在路由器上。

如果你没有公网 IP,那么就需要向运营商申请,具体方式可以上网搜索。如果你无法申请到公网 IP,那么可能就只能搜索「内网穿透」,通过其他方式来实现在没有公网 IP 的情况下,从外网访问家里的一个主机。但这有可能需要额外租用服务器,产生费用。

在有公网 IP 的前提下,下面我先介绍我自己的具体方案,后面再列举我了解到的其他方案:

  • 分别查看光猫和路由器的 WAN IP,发现光猫的 WAN IP 为我的公网 IP。这也说明我家里的光猫采用的是「路由模式」,也就是光猫同时起到了路由器的功能。因此,连接光猫的路由器只分配到了内网 IP,其 WAN IP 地址同样为形如「192.168.x.x」的内网 IP。
  • 联系运营商工作人员,要到了光猫的超级管理员账号密码,以及上网的账号密码。在光猫的路由器设置界面修改状态为「桥接模式」。然后在路由器设置页面,修改 WAN 联机类型为 PPPOE,输入账号和密码,拨号上网。重启路由器后,可以看到路由器的 WAN IP 已经变化为公网 IP。
  • 但是,重启路由器后看到的公网 IP,与之前在光猫看到的 WAN IP 不同,意味着这是一个动态 IP,每次重启都可能带来新的 IP 地址,这显然不利于外网访问。因此,在路由器设置页面,启动 DDNS(动态 DNS)并注册一个网址,这个固定的地址将被解析为我当下的公网 IP 地址。
  • 接下来,设置端口转发 / 端口映射。目的是将主机的某个端口映射到路由器的一个端口上,这样,通过公网 IP 这个端口的通信,就能够被自动转发到被指定的这台主机的端口上。具体操作上,在路由器设置页面,启用端口转发,通信协议选择 BOTH(TCP 和 UDP),外部端口随便填写一个数字,内部端口填写 3389,这是 Windows 远程桌面的默认端口,可以在系统内需改,本地 IP 地址填写 Windows 主机 IP。
  • 接下来,在任意一个 MRD 客户端上,添加一个新的远程桌面,地址不再是之前的内网 IP,而是「注册的 DDNS 服务域名 : 外部端口号」。使用流量或在外网双击该远程桌面,发现同样能够正常进入 Windows 主机。至此,这一步就完成了。

在有公网 IP 的前提下,实现「获得一个能够在外网定位到 Windows 主机的地址」这一目的,显然不只有我上面的操作方法,同样是光猫(路由模式)-路由器的情况下,至少还有如下路径:

  • 两次端口转发。在光猫上,将外网 IP 的某个端口(比如3000),与路由器的一个端口(比如3500)建立端口转发,再将路由器的这个端口(3500),与 Windows 主机的远程桌面端口(3389)建立端口转发。那么,理论上也就可以通过「公网 IP 地址:3000」的形式访问该 Windows 主机。但这么做让我不能够正常开启路由器的 DDNS 功能,不确定是否有解决办法。
  • 设置 DMZ 主机。DMZ 相当于映射所有端口,将主机暴露在公网上,因此,在光猫和路由器上分别设置 DMZ 主机,也当然可以实现从外网访问 Windows 主机的端口。
  • 设置 UPnP。看定义为「通用即插即用」,我对此没有仔细研究,大意应该也是暴露所有端口。
  • 以上端口转发、DMZ 和 UPnP,以及前面提到的桥接模式,理论上可以在光猫和路由器上有不同的组合,比如在光猫上设置路由器为 DMZ 主机,再在路由器上做端口转发。相关风险大小,请自行判断。
  • 为了避免动态 IP 带来的问题,一般都需要设置 DDNS,让原来的会变化的公网 IP 地址变成一个固定的网址。

(三)在外网远程开机

如果你尝试了上面的局域网访问和远程访问 Windows 主机,你应该已经发现了一个问题,那就是当主机处于关机或睡眠状态时,远程桌面是无法正常打开的。对此,有两个选择,第一,让主机 24*7 开机,但这不苹(huan)果(bao),可能对于一些其他的需求,比如搭建服务器是适用的;第二,想办法远程打开计算机,也就是实现远程唤醒 Wake-on-LAN(WoL)。

在这一节中,有一些需要被访问主机的 BIOS 和路由器支持才能够实现的功能,也因为各家主板和路由器不同,这部分无法特别细致地说明。

首先先列出我完全未尝试的方案,倒不是因为不好用,只是因为需要额外付费,目前我已经通过其他方式基本解决,就没有进一步探索:

  • 购买「开机棒」类产品,连接路由器,远程通过这个设备唤醒家里的主机。
  • 购买「智能插座」类产品,就是可以远程控制是否通电的插座,将主机设置为来电开机(应当需要 BIOS 支持),实现远程开机。
  • 理论上,如果你能远程控制局域网内的一台常备的智能设备,那么有可能可以通过这台设备打开主机,比如说安卓手机。

下面是我自己的实现方法,其中的一些准备工作可能与上面的其他方式有重合,这些准备工作包括:

  • 进入主机的 BIOS,打开有关网络唤醒(Wake on Lan)的选项,不同主板描述可能不同。这里提一嘴,我是没有键盘的,进入 BIOS 的方式是进入设置-Windows更新-高级选项-恢复-高级启动,而这个选项在使用 MRD 时是被屏蔽掉的。
  • 运行(Win + R)「ncpa.cpl」打开「网络链接」,当然还有很多方式进入这个位置,包括控制面板和网络设置。右键其中的有线网卡,依次点击属性-配置-电源管理,打开「允许此设备唤醒计算机」和「只允许幻数据包唤醒计算机」,切换至「高级」标签,确定「关机 网络唤醒」、「魔术封包唤醒」等选项处于打开状态。这里不勾选「只允许幻数据包唤醒计算机」似乎也是可以的,但如此一来所有数据都可以唤醒 Windows 电脑,意味着其在连接网线时可能会永远保持唤醒状态,因此还是勾选比较好。
  • 完成以上步骤,确定 Windows 主机以有线的方式连接路由器以后,理论上就可以通过各种方式远程唤醒电脑了。这些方法可能包括:路由器网络设置页面,路由器 app,其他第三方 app(比如 Fing)。通常来说,可以在设置页面和 app 中类似「网络工具」的选项里找到唤醒网络的选项,此时需要输入有线网卡的 MAC 地址。这个地址可以在很多地方找到,包括但不限于路由器设置页面和 app 的连接详情,或运行(Win + R)「cmd」打开「命令提示符」,输入「ipconfig -all」查看。需要特别注意的是有线网卡与无线网卡的 MAC 地址是不同的,需要的是有线网卡的 MAC 地址,以下提到 MAC 地址时也都默认如此。
  • 在局域网内成功唤醒 Windows 主机后,下一步的问题是如何远程操作,在前面已经设置 DDNS 域名的情况下,路由器设置界面和路由器 app,一般都存在远程连接或允许远程访问路由器的设置,开启即可。第三方 app 或许也有类似的远程功能。这样一来,就可以在外网远程访问路由器选择网络唤醒 Windows 主机了。

虽然说是准备工作,但到上面位置已经能够实现远程唤醒了,只是我还不满意。原因是不管是 app 还是路由器设置页面的连接速度都很慢,需要等待路由器信息全部加载,并且唤醒功能藏得比较深,需要好几步操作,增加了唤醒的复杂度。因此,我想要用别的方式来唤醒。经历了前面这么多步骤,不难将两个事情联系到一起:其一,我可以从外网通过注册的 DDNS 服务域名 + 端口的方式与家里的主机通信;其二,要网路唤醒只需要向目标主机发送名为「幻数据包」的东西。从而,进一步地:

  • 经过检索得知,幻数据包最简单的构成是 6 字节的 255(FF),连接上重复 16 次的目标计算机 MAC 地址,通常使用 UDP 协议发送,发送数据的端口一般是9。此外,python 的 scocket 库,终端 / 命令行里的 netcat 命令可以用来发送和读取 UDP 数据。实际操作的时候,我在主机端用 netcat 监听(Windows 11 需要另外下载,还会被报有威胁),在客户端 macOS 上写 python 的快捷操作。
  • 在已经设置好 DDNS 的情况下,增加一个端口转发,外部端口随意,内部端口为 9,本地 IP 地址填写 Windows 主机 IP。在此基础上,还需要设置 ARP,绑定被远程访问主机的内网 IP 地址和其 MAC 地址,虽然静态 DHCP 也有这个作用,但对于远程唤醒主机是无效的。如果路由器没有提供 ARP 设置的功能,可能需要通过 ssh 命令登录路由器,输入 arp -s IP MAC地址  来绑定,但这个绑定会在路由器重启后失效,要么每次重新输入,要么想办法设置路由器开机启动这个脚本。这部分内容因路由器而异,可能需要刷固件等,请自行检索。
  • 接下来是客户端的操作,在 macOS 上打开自动操作(Automator),新建一个快捷操作(Quick Action),添加一个运行 Shell 脚本(Run Shell Script)。Shell 选择 python,最上方我选择收到 no input,位于访达(Finder.app)和 MRD,这样就可以在这两个应用的服务(Services)位置中找到这个保存的快捷操作。我的代码如下:
import socket

IP = 't.a.com' #此处填写公网 IP 或注册的 DDNS 服务域名
MAC = 'AA-AA-AA-AA-AA-AA' #此处填写 MAC 主机地址
PORT = 3999 #此处填写前面设置的端口转发外部端口
packet = bytes.fromhex("F" * 12 + MAC.replace(MAC[2], "") * 16)

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
  s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  s.sendto(packet, (IP, PORT))
  • 运行上面的快捷操作,可以实现远程唤醒的功能。但实际使用的时候,我发现用 socket 解析 DDNS 服务域名得到的 IP 有时会延迟,得到的是上一个动态 IP 地址,特别是在路由器重启以后,有时更新比较慢。为此,我又写了一个可以手动输入 IP 的快捷操作,这个仅放在 MDR 软件上,偶尔使用,中间用到一个 Ask for Text 接收 IP 地址,这里也放出代码供参考:

Run Shell Script:

# 这里将 socket 解析得到的 IP 地址传入到下一步去作为默认答案,以便于对比发现无法唤醒是否是地址解析问题。

import socket
de_ip = socket.gethostbyname('t.a.com') #此处填写公网 IP 或注册的 DDNS 服务域名
print(de_ip)

Ask for Text:

输入实际 IP 地址:
$1

Run Shell Script:

import sys
import socket

IP = sys.argv[1]
MAC = 'AA-AA-AA-AA-AA-AA' #此处填写 MAC 主机地址
PORT = 3999 #此处填写前面设置的端口转发外部端口
packet = bytes.fromhex("F" * 12 + MAC.replace(MAC[2], "") * 16)

with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
  s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  s.sendto(packet, (IP, PORT))

(四)进一步优化

到这一步为止,远程唤醒和远程访问均已实现,并且基本可以通过少量点击打开,速度上部分取决于 Windows 主机开机 / 唤醒速度和网速,已经相当可用。不过,实际使用中还是会遇到一些问题,优化永远在路上,这里简单写两点,一是显示方面的性能优化,二是快捷键。

MRD 使用 RDP 协议,运行时会虚拟一张名为 Microsoft Remote Display Adapter 的显卡,影响图形性能。网上很容易找到有关 RDP 优化的文章,具体效果请自行判断,我测试起来是有一些作用的:

  • 打开组策略(gpedit.msc),依次选择计算机配置-管理模板-Windows 组件-远程桌面服务-远程桌面会话主机-远程会话环境,打开「将硬件图形适配器应用于所有远程桌面服务会话」,「配置远程桌面连接的 H.264 / AVC 硬件编码」等选项。
  • 启动注册表编辑器(regedit),找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations,修改或新建名为 DWMFRAMEINTERVAL 的 DWORD 值,修改数据为 15(10 进制下)。
  • N 卡用户可以去找英伟达官方提供的 nvidia-opengl-rdp 工具,以实现在 RDP 下使用 OpenGL 加速。

其次是快捷键,作为十年 MacBook 老用户,我早已习惯使用 macOS 系统快捷键,特别是大拇指位置的 Command 键的组合按键。在 MRD 下,微软还是比较贴心地提供了一些快捷键的,包括复制、剪切、粘贴、全选、撤销和搜索,但仍不够全。比如,我习惯于使用 Command + W 这个组合来关闭窗口 / 标签页,这在 MRD 下会直接关闭当前的远程桌面窗口,非常烦人,急需解决。总体来说,解决快捷键问题分为两步:

  • 一方面,是修改 macOS 系统的快捷键,以上面提到的 Command + W 组合键为例,在设置中找到 Keyboard 选项卡内的 Keyboard Shortcuts…,选择 app Shortcuts,点加号,在 application 处选择 MRD,Menu title 手动填写 close,也就是原来 Command + W 的关闭功能,下面的 Keyboard shortcut 修改为其他组合键,我这里是修改为  Command + Q,也就是原来「退出」(quit)功能的案件。因为在我看来,使用 MRD 时,用  Command + Q 关闭当前远程桌面是比较符合我使用习惯的操作。
  • 另一方面,是增加 Windows 的快捷键,除了解决与 macOS 系统冲突的部分,也要修改部分习惯的内容。这里我比较惊讶的是,Windows 系统居然不自带修改快捷键的功能,因此需要第三方软件,比如 autohotkey。这个工具看起来相当好用而小巧,却能够做除修改快捷键以外很多事情。这里我先学着修改快捷键。我创建了如下 ahk 脚本,修改了 command 和 W、S 以及上下箭头的组合功能,其中与上下箭头的组合功能仅在资源管理器中使用,然后将其快捷方式放入启动文件夹(Win + R 运行 shell:startup 即可打开)以开机自行启动。
; Commad + w -> Ctrl + w
#w::
Send, ^w
return

; Commad + s -> Ctrl + s
#s::
Send, ^s
return

; 仅在使用资源管理器时
; Commad + ↑ -> Alt + ↑
#IfWinActive ahk_class ExploreWClass 
#Up::
#IfWinActive ahk_class CabinetWClass
#Up::
Send, !{Up}
return

; 仅在使用资源管理器时
; Commad + ↓ -> Enter
#IfWinActive ahk_class ExploreWClass
#Down::
#IfWinActive ahk_class CabinetWClass
#Down::
Send, {Enter}
return

四、仍有缺憾

通过远程桌面运行的,是完整的 Windows 系统,这是任何虚拟机和模拟器不能比拟的,但也说不上完美,至少在以下几个方面仍有缺憾:

  • 第一,性能比不上本地运行,但这是废话。
  • 第二,受网络影响,虽然现在有 5G 信号,但相比于虚拟机,总体还是受限于运行远程桌面的客户端所处的环境。
  • 第三,主机和路由器位于家里 / 单位,一旦出了什么情况,有可能是无法远程修复的——按不了电源键,虚拟机也没有这个方面的问题。
  • 第四,哪怕经过上面的各种处理,我已经尽量缩短了从远程启动到远程桌面的时间,但到运行具体的软件层面,比起虚拟机的融合模式,以及直接模拟运行 Windows 系统下的软件,体验上还是有差异。
  • 第五,在使用 MDR 时,哪怕是在局域网,传输文件的速度都非常慢,对于大文件,最好还是需要一个不限速网盘。

尽管如此,我至少找到了一个在不用放弃 MacBook 的基础上,能够正常运行、调试各种 Windows 应用程序方案,给我在家和在外的系统多了一个选择。折腾还是有收获的。

 > 关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀