在 Mac 和 iPad 上使用 Windows 系統,這是我的折騰筆記

2023-11-23     少數派

原標題:在 Mac 和 iPad 上使用 Windows 系統,這是我的折騰筆記

編注:我們會不定期挑選 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 作業系統電腦,但在外常用 MacBook 筆記本或 iPad 移動辦公;

已經擁有以上的任意一種,猶豫是否需要補上另一種,猶豫的原因之一是,macOS 和/或 iPadOS 系統相較於 Windows 作業系統缺少某些功能或無法兼容某些軟體,在一些時候不得不使用 Windows 系統;

理論上,被訪問的主機為 Linux 或者其他版本的 Windows 作業系統,訪問的客戶端是 Windows 系統或 Android 系統等情況,也可以通過類似的方式實現;

需要說明的是,我並非專業人士,以下過程純粹是摸索而來。同時,這篇文章不會特別詳細地介紹每一步的實現,而是更像一個步驟清單。對於類似我這樣純粹的外行來說,可能會一次性看到不少陌生名詞。這麼做的原因在於,一方面,本文所寫的內容,基本上都可以在網際網路上找到大量教程,只是未必有這麼集中,沒有必要在這篇文章中再複述一遍,對於不理解的名詞或不了解具體操作,可以通過文章里的關鍵詞來檢索;另一方面,實現的路徑上可選的方案眾多,每個人所處的網絡環境和路由器也有所不同,具體的操作步驟可能因實際環境而異,也就沒有必要在一篇文章里寫盡。

不過,我會儘量列出我在摸索過程中看到的各種方法,哪怕是我沒有實際嘗試採用的那些。

二、整體清單

綜合來看,實現遠程桌面需要完成以下四步:

  • 第一步,在區域網內實現 Windows 遠程桌面,這個過程需要 Windows 10 / 11 專業版或其他支持遠程桌面的版本,以及訪問遠程桌面的軟體;

  • 第二步,在外網訪問 Windows 遠程桌面,這個過程需要公網 IP,橋接(可選),可能需要使用 DDNS,並開啟 DMZ,或埠轉發,或 upnp;或乾脆用其他方式實現內網穿透;

  • 第三步,在外網遠程開機 / 喚醒 Windows 主機,這個過程可能需要支持 WoL 的路由器,或手寫腳本,或其他 app,或開機棒、智能插座等其他替代方案;

  • 第四步,進一步優化體驗,比如圖形性能,比如統一遠程桌面與 macOS 作業系統的快捷鍵。

第一步,在區域網內實現 Windows 遠程桌面,這個過程需要 Windows 10 / 11 專業版或其他支持遠程桌面的版本,以及訪問遠程桌面的軟體;

第二步,在外網訪問 Windows 遠程桌面,這個過程需要公網 IP,橋接(可選),可能需要使用 DDNS,並開啟 DMZ,或埠轉發,或 upnp;或乾脆用其他方式實現內網穿透;

第三步,在外網遠程開機 / 喚醒 Windows 主機,這個過程可能需要支持 WoL 的路由器,或手寫腳本,或其他 app,或開機棒、智能插座等其他替代方案;

而為了實現以上全部目標,可能至少需要以下硬體設施:

  • MacBook 或 iPad 或 iPhone;

  • 安裝 Windows 作業系統的主機;

  • 路由器,網線;

  • 顯示器,滑鼠。

MacBook 或 iPad 或 iPhone;

安裝 Windows 作業系統的主機;

路由器,網線;

此外,可能會額外需要:

  • 顯卡欺騙器 / 壞掉的顯示器;

  • 帶 WoL 功能的路由器 / 開機棒 / 智能電源插座。

顯卡欺騙器 / 壞掉的顯示器;

在實現目標的過程中,可能會用到以下軟體 / 應用:

  • Microsoft Remote Desktop,或其他遠程桌面軟體;

  • 路由器 app,或其他支持遠程喚醒的 app;

  • 路由器固件;

  • 優化效果、提升性能的工具,比如英偉達為遠程桌面提供的優化工具;

  • AutoHotkey,或其他快捷操作工具;

  • 網盤工具;

  • 自動操作(Automator)。

Microsoft Remote Desktop,或其他遠程桌面軟體;

路由器 app,或其他支持遠程喚醒的 app;

路由器固件;

優化效果、提升性能的工具,比如英偉達為遠程桌面提供的優化工具;

AutoHotkey,或其他快捷操作工具;

網盤工具;

三、具體步驟

(一)在區域網內訪問遠程桌面

為什麼要在區域網內訪問遠程桌面?

除了這是進行下面的步驟的前置和測試以外,在區域網內訪問遠程桌面或許也是不少人的需求——比如,像我這樣桌面空間不大,不願意再展開一組螢幕鍵盤滑鼠的人,可以用一台電腦使用兩種作業系統,加上 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 主機。至此,這一步就完成了。

分別查看光貓和路由器的 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。

在有公網 IP 的前提下,實現「獲得一個能夠在外網定位到 Windows 主機的地址」這一目的,顯然不只有我上面的操作方法,同樣是光貓(路由模式)-路由器的情況下,至少還有如下路徑:

  • 兩次埠轉發。在光貓上,將外網 IP 的某個埠(比如3000),與路由器的一個埠(比如3500)建立埠轉發,再將路由器的這個埠(3500),與 Windows 主機的遠程桌面埠(3389)建立埠轉發。那麼,理論上也就可以通過「公網 IP 地址:3000」的形式訪問該 Windows 主機。但這麼做讓我不能夠正常開啟路由器的 DDNS 功能,不確定是否有解決辦法。

  • 設置 DMZ 主機。DMZ 相當於映射所有埠,將主機暴露在公網上,因此,在光貓和路由器上分別設置 DMZ 主機,也當然可以實現從外網訪問 Windows 主機的埠。

  • 設置 UPnP。看定義為「通用即插即用」,我對此沒有仔細研究,大意應該也是暴露所有埠。

  • 以上埠轉發、DMZ 和 UPnP,以及前面提到的橋接模式,理論上可以在光貓和路由器上有不同的組合,比如在光貓上設置路由器為 DMZ 主機,再在路由器上做埠轉發。相關風險大小,請自行判斷。

  • 為了避免動態 IP 帶來的問題,一般都需要設置 DDNS,讓原來的會變化的公網 IP 地址變成一個固定的網址。

兩次埠轉發。在光貓上,將外網 IP 的某個埠(比如3000),與路由器的一個埠(比如3500)建立埠轉發,再將路由器的這個埠(3500),與 Windows 主機的遠程桌面埠(3389)建立埠轉發。那麼,理論上也就可以通過「公網 IP 地址:3000」的形式訪問該 Windows 主機。但這麼做讓我不能夠正常開啟路由器的 DDNS 功能,不確定是否有解決辦法。

設置 DMZ 主機。DMZ 相當於映射所有埠,將主機暴露在公網上,因此,在光貓和路由器上分別設置 DMZ 主機,也當然可以實現從外網訪問 Windows 主機的埠。

設置 UPnP。看定義為「通用即插即用」,我對此沒有仔細研究,大意應該也是暴露所有埠。

以上埠轉發、DMZ 和 UPnP,以及前面提到的橋接模式,理論上可以在光貓和路由器上有不同的組合,比如在光貓上設置路由器為 DMZ 主機,再在路由器上做埠轉發。相關風險大小,請自行判斷。

如果你嘗試了上面的區域網訪問和遠程訪問 Windows 主機,你應該已經發現了一個問題,那就是當主機處於關機或睡眠狀態時,遠程桌面是無法正常打開的。對此,有兩個選擇,第一,讓主機 24*7 開機,但這不苹(huan)果(bao),可能對於一些其他的需求,比如搭建伺服器是適用的;第二,想辦法遠程打開計算機,也就是實現遠程喚醒 Wake-on-LAN(WoL)。

在這一節中,有一些需要被訪問主機的 BIOS 和路由器支持才能夠實現的功能,也因為各家主板和路由器不同,這部分無法特別細緻地說明。

首先先列出我完全未嘗試的方案,倒不是因為不好用,只是因為需要額外付費,目前我已經通過其他方式基本解決,就沒有進一步探索:

  • 購買「開機棒」類產品,連接路由器,遠程通過這個設備喚醒家裡的主機。

  • 購買「智能插座」類產品,就是可以遠程控制是否通電的插座,將主機設置為來電開機(應當需要 BIOS 支持),實現遠程開機。

  • 理論上,如果你能遠程控制區域網內的一台常備的智能設備,那麼有可能可以通過這台設備打開主機,比如說安卓手機。

購買「開機棒」類產品,連接路由器,遠程通過這個設備喚醒家裡的主機。

購買「智能插座」類產品,就是可以遠程控制是否通電的插座,將主機設置為來電開機(應當需要 BIOS 支持),實現遠程開機。

下面是我自己的實現方法,其中的一些準備工作可能與上面的其他方式有重合,這些準備工作包括:

  • 進入主機的 BIOS,打開有關網絡喚醒(Wake on Lan)的選項,不同主板描述可能不同。這裡提一嘴,我是沒有鍵盤的,進入 BIOS 的方式是進入設置-Windows更新-高級選項-恢復-高級啟動,而這個選項在使用 MRD 時是被屏蔽掉的。

  • 運行(Win + R)「ncpa.cpl」打開「網絡連結」,當然還有很多方式進入這個位置,包括控制面板和網絡設置。右鍵其中的有線網卡,依次點擊屬性-配置-電源管理,打開「允許此設備喚醒計算機」和「只允許幻數據包喚醒計算機」,切換至「高級」標籤,確定「關機 網絡喚醒」、「魔術封包喚醒」等選項處於打開狀態。這裡不勾選「只允許幻數據包喚醒計算機」似乎也是可以的,但如此一來所有數據都可以喚醒 Windows 電腦,意味著其在連接網線時可能會永遠保持喚醒狀態,因此還是勾選比較好。

進入主機的 BIOS,打開有關網絡喚醒(Wake on Lan)的選項,不同主板描述可能不同。這裡提一嘴,我是沒有鍵盤的,進入 BIOS 的方式是進入設置-Windows更新-高級選項-恢復-高級啟動,而這個選項在使用 MRD 時是被屏蔽掉的。

  • 完成以上步驟,確定 Windows 主機以有線的方式連接路由器以後,理論上就可以通過各種方式遠程喚醒電腦了。這些方法可能包括:路由器網絡設置頁面,路由器 app,其他第三方 app(比如 Fing)。通常來說,可以在設置頁面和 app 中類似「網絡工具」的選項里找到喚醒網絡的選項,此時需要輸入有線網卡的 MAC 地址。這個地址可以在很多地方找到,包括但不限於路由器設置頁面和 app 的連接詳情,或運行(Win + R)「cmd」打開「命令提示符」,輸入「ipconfig -all」查看。需要特別注意的是有線網卡與無線網卡的 MAC 地址是不同的,需要的是有線網卡的 MAC 地址,以下提到 MAC 地址時也都默認如此。

  • 在區域網內成功喚醒 Windows 主機後,下一步的問題是如何遠程操作,在前面已經設置 DDNS 域名的情況下,路由器設置介面和路由器 app,一般都存在遠程連接或允許遠程訪問路由器的設置,開啟即可。第三方 app 或許也有類似的遠程功能。這樣一來,就可以在外網遠程訪問路由器選擇網絡喚醒 Windows 主機了。

完成以上步驟,確定 Windows 主機以有線的方式連接路由器以後,理論上就可以通過各種方式遠程喚醒電腦了。這些方法可能包括:路由器網絡設置頁面,路由器 app,其他第三方 app(比如 Fing)。通常來說,可以在設置頁面和 app 中類似「網絡工具」的選項里找到喚醒網絡的選項,此時需要輸入有線網卡的 MAC 地址。這個地址可以在很多地方找到,包括但不限於路由器設置頁面和 app 的連接詳情,或運行(Win + R)「cmd」打開「命令提示符」,輸入「ipconfig -all」查看。需要特別注意的是有線網卡與無線網卡的 MAC 地址是不同的,需要的是有線網卡的 MAC 地址,以下提到 MAC 地址時也都默認如此。

雖然說是準備工作,但到上面位置已經能夠實現遠程喚醒了,只是我還不滿意。原因是不管是 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 )。Shell 選擇 python,最上方我選擇收到 no input,位於訪達(Finder.app)和 MRD,這樣就可以在這兩個應用的服務(Services)位置中找到這個保存的快捷操作。我的代碼如下:

經過檢索得知,幻數據包最簡單的構成是 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地址 來綁定,但這個綁定會在路由器重啟後失效,要麼每次重新輸入,要麼想辦法設置路由器開機啟動這個腳本。這部分內容因路由器而異,可能需要刷固件等,請自行檢索。

importsocket

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)

withsocket.socket(socket.AF_INET, socket.SOCK_DGRAM) ass:

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 :

# 這裡將 socket 解析得到的 IP 地址傳入到下一步去作為默認答案,以便於對比發現無法喚醒是否是地址解析問題。

importsocket

de_ip = socket.gethostbyname('t.a.com') #此處填寫公網 IP 或註冊的 DDNS 服務域名

print(de_ip)

Ask for Text:

輸入實際 IP 地址:

$1

Run Shell :

importsys

importsocket

IP = sys.argv[ 1]

MAC = 'AA-AA-AA-AA-AA-AA'#此處填寫 MAC 主機地址

PORT = 3999#此處填寫前面設置的埠轉發外部埠

packet = bytes.fromhex( "F"* 12+ MAC.replace(MAC[ 2], "") * 16)

withsocket.socket(socket.AF_INET, socket.SOCK_DGRAM) ass:

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 加速。

打開組策略(gpedit.msc),依次選擇計算機配置-管理模板-Windows 組件-遠程桌面服務-遠程桌面會話主機-遠程會話環境,打開「將硬體圖形適配器應用於所有遠程桌面服務會話」,「配置遠程桌面連接的 H.264 / AVC 硬體編碼」等選項。

啟動註冊表編輯器(regedit),找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations,修改或新建名為 DWMFRAMEINTERVAL 的 DWORD 值,修改數據為 15(10 進位下)。

其次是快捷鍵,作為十年 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 時,哪怕是在區域網,傳輸文件的速度都非常慢,對於大文件,最好還是需要一個不限速網盤。

第一,性能比不上本地運行,但這是廢話。

第二,受網絡影響,雖然現在有 5G 信號,但相比於虛擬機,總體還是受限於運行遠程桌面的客戶端所處的環境。

第三,主機和路由器位於家裡 / 單位,一旦出了什麼情況,有可能是無法遠程修復的——按不了電源鍵,虛擬機也沒有這個方面的問題。

第四,哪怕經過上面的各種處理,我已經儘量縮短了從遠程啟動到遠程桌面的時間,但到運行具體的軟體層面,比起虛擬機的融合模式,以及直接模擬運行 Windows 系統下的軟體,體驗上還是有差異。

儘管如此,我至少找到了一個在不用放棄 MacBook 的基礎上,能夠正常運行、調試各種 Windows 應用程式的方案,給我在家和在外的系統多了一個選擇。折騰還是有收穫的。

原文連結:

https://sspai.com/post/84443?utm_source=wechat&utm_medium=social

作者:GoodTheme

責編:北鴞

/ 更多熱門文章 /

文章來源: https://twgreatdaily.com/b9403ca3060b3ccf3d843eb5068cfb5f.html