Sunshine+Moonlight
傳送現有桌面的畫面、聲音與操作。需要可用圖形會話和顯示輸出。
從「看起來很快」到「實際連得上」。補齊版本、圖形登入、畫面擷取、網路與驗收,讓你看得懂,也讓 Agent 做得出來。
若你要在 Mac 上流暢操作 Ubuntu 的瀏覽器、3D 或其他動態 GUI,建議用官方 Sunshine+官方 Moonlight,跨網路時加入 Tailscale。若主要是讓 Agent 寫程式,讓 SSH 負責指令與檔案,Moonlight 負責視覺檢查,通常更容易維護。
傳送現有桌面的畫面、聲音與操作。需要可用圖形會話和顯示輸出。
編譯、測試、部署可在主機執行;不必讓每個開發動作經過影像串流。[15]
Ubuntu 24.04 原生 Remote Login 值得先評估。Sunshine 的 user service 不會替你建立完整桌面。[6]
原文已透過公開 JSON 介面讀取全文;以下區分原文主張、已查證修正與本指南的工程建議。[1]
| 項目 | 查核結果 | 實作上怎麼改 |
|---|---|---|
| 舊 DEB 檔名 | 原文仍用 sunshine-ubuntu-24.04-amd64.deb。現行版本改為帶版本、Ubuntu 版本和架構的檔名。 | 使用固定 release 資產及 SHA-256;不要把舊檔名接在 latest 後面。[3][9] |
| PIN 由誰提供 | 原文步驟 3 與步驟 5 說法不一致;實際是 Moonlight 顯示 PIN。 | 到 Sunshine 的 PIN 頁輸入該組數字完成配對。[10] |
| Ubuntu 24.04 內建 VNC | 原文把 GNOME RDP/VNC 與 Mac Screen Sharing 並列,容易讓人接錯協定。 | Ubuntu 官方說明:內建 VNC 已於 22.10 移除;24.04 的這條路使用 RDP 用戶端。[6] |
| RDP 一定比較慢 | 沒有相同硬體與網路的測試,無法宣稱 Sunshine 全面勝出。 | Sunshine 適合連續動態畫面;RDP 適合辦公。26.04 GNOME RDP 另有硬體加速進展,不能直接套到 24.04。[23] |
| NVIDIA 一定最省心 | nvidia-smi 只證明驅動能溝通;不能證明擷取、NVENC 與 Moonlight 解碼全部正常。 | 沿用現有 GPU,從成功的硬體編碼日誌判定;不建議為此先購買顯卡。[2][4] |
| Tailscale 保證低延遲 | 連得上不代表點對點直連;可能經 DERP 或 peer relay。 | 用 tailscale ping / status 查看最終連線路徑,再談效能。[7] |
| 啟用服務等於無人值守 | 安裝與配對之外,還有圖形登入、Portal 授權、睡眠及螢幕輸出問題。 | 分別驗收「已登入可連」「重連可用」「重開機未登入可用」。最後一項需另行設計。[3][4] |
發布日期採官方 UTC 日期;本指南查證日期採 Asia/Taipei。
| 元件 | 本次查證 | 選用理由與注意事項 |
|---|---|---|
| Sunshine | v2026.914.233613 2026-09-15 | 官方 Latest;有 Ubuntu 24.04 amd64 / arm64 資產。包含 Linux 安全修正,舊版本不宜照抄安裝。[2][8][9] |
| Moonlight PC / Qt | v6.2.0 2026-10-04 | 官方 macOS Universal。新增 M3 及更新 Mac 的 AV1 硬體解碼支援;兩端仍都須支援所選 codec。[5] |
| Tailscale | v1.104.1 2026-10-07 | GitHub stable 快照;macOS 的不同發布管道可能不同步,安裝後記錄實際版號。[13][14] |
Sunshine 近期在 Portal 擷取、Linux 編碼與網路綁定位址上持續修正;10 月 15 日仍有程式及文件提交。Moonlight 6.2 改了 Mac 預設 renderer,10 月 14 日仍有提交。這些是維護活動的證據,並非每種 GPU 都穩定的保證。[2][5][24][25]
新客戶端觀察:Moonlight macOS Enhanced 最新 API 回傳 v1.3.9-rc.5(10 月 13 日)。雖未被 GitHub 標成 prerelease,版本名稱仍帶 RC,且發行說明提及架構重建;本指南將它視為試用候選。最近五筆提交都來自同一作者,只能說近期樣本集中,不能推論全專案僅一人維護。[18][19][26]
Portal / KMS 決定「怎麼拿到畫面」;NVENC / VAAPI / Vulkan 決定「怎麼壓縮」。
鍵盤與滑鼠操作回 Ubuntu。跨網路的頻寬、延遲與抖動都會影響體感。
Mac 不執行 Ubuntu App;程式與 GPU 工作仍在 Ubuntu 上。
例如:capture = portal 搭配 encoder = nvenc 是兩層設定,不是互斥選項。GNOME 也不等於 KDE,不能照搬 kwin;NvFBC 則不是通用 Wayland 解法。部分舊版配置頁漏列 Portal,已有官方文件補正 PR。[3][4][22]
操作延遲 ≈ 輸入傳遞+主機處理/擷取+編碼+網路+解碼+顯示等待
60 FPS 的每幀間隔約 16.7 ms,但不代表完整操作延遲只有 16.7 ms。Moonlight 顯示的網路或解碼數字也不是整條鏈路的總延遲。
| 方案 / 原始碼 | 最適合 | 主要優點 | 取捨與結論 |
|---|---|---|---|
| Sunshine+Moonlight 本指南主方案 | 單人、完整 GPU 桌面、動態 GUI | 重視影像流暢度,可用現有 GPU。 | 圖形會話/顯示輸出/codec 都需匹配;不把檔案同步或多人獨立桌面視為其主要能力。 |
| GNOME Remote Desktop+RDP 用戶端 | 一般辦公、Ubuntu 原生遠端登入 | 24.04 有 Remote Login;可減少額外服務。 | 要區分桌面分享與遠端登入。先看目前顯示的連接埠;Mac 使用 RDP 用戶端,不是內建 VNC Screen Sharing。[6] |
| RustDesk | 遠端協助與一般維運 | 以遠端支援為核心,v1.5.0 仍在修正 Wayland 與輸入行為。 | 不要再只用「Wayland 一律 preview」描述;也不能保證所有登入畫面都可用。按套件、GPU、桌面環境實測。[16][17] |
| OpenSSH+VS Code Remote SSH | Coding Agent、CLI、程式與 Web 開發 | 編輯介面在 Mac,工具與程式在 Ubuntu;不依賴桌面串流。 | 不提供整個 Ubuntu GUI。若你主要讓 Agent 開發,優先採這條路,再按需加 Moonlight。VS Code Remote SSH 擴充套件不等同全開源替代。[15] |
此表比較使用情境,不是同條件效能排行榜。Tailscale 是可搭配的網路層,不是遠端桌面替代品。
初次請在 Ubuntu 已登入的桌面開 Terminal。確認螢幕已連接並開啟,Mac 和 Ubuntu 能在同一區網通訊。
cat /etc/os-release
dpkg --print-architecture
uname -r
printf 'Session=%s Desktop=%s\n' "$XDG_SESSION_TYPE" "$XDG_CURRENT_DESKTOP"
lspci -nnk
hostname -INVIDIA 使用 nvidia-smi 檢查驅動;Intel/AMD 可安裝 vainfo 查看 VAAPI 編碼能力。VAEntrypointEncSlice 或 EncSliceLP 是編碼能力線索,最後仍以串流成功與日誌為準。
sudo apt install vainfo
vainfo若缺 NVIDIA 驅動,先到 Ubuntu「軟體與更新 → 額外驅動程式」核對推薦項目,安排重啟後再驗證。官方 Sunshine 預編譯包不代表你需要另裝整套 CUDA Toolkit。SSH terminal 的會話類型不等於圖形桌面類型。[3]
先確認 dpkg-query -W sunshine;若已裝較新版,不執行下方降級。需要 curl 與有效 CA 憑證。區塊會檢查 OS、判斷架構、下載固定版並核對官方 API 提供的 SHA-256。[9]
(
set -eu
. /etc/os-release
if [ "$ID" != ubuntu ] || [ "$VERSION_ID" != 24.04 ]; then
echo '此段只適用 Ubuntu 24.04,請改用對應發行版套件。' >&2
exit 1
fi
SUN_ARCH="$(dpkg --print-architecture)"
case "$SUN_ARCH" in
amd64) SUN_SHA='c38e9c705f650f8705f61702717e99bec34044c5028fcb8f23a08fe041292c21' ;;
arm64) SUN_SHA='5751c22cf0b9253b459d7f42103f1c422594363a5881e21bd1ce845218226888' ;;
*) echo "未涵蓋的架構:$SUN_ARCH" >&2; exit 1 ;;
esac
SUN_WORK="$(mktemp -d)"
cd "$SUN_WORK"
curl --fail --location --proto '=https' --tlsv1.2 \
-o sunshine.deb \
"https://github.com/LizardByte/Sunshine/releases/download/v2026.914.233613/sunshine_2026.914.233613-1%2Bubuntu24.04_${SUN_ARCH}.deb"
printf '%s sunshine.deb\n' "$SUN_SHA" | sha256sum --check -
sudo apt update
sudo apt install ./sunshine.deb
)dpkg-query -W sunshine此流程使用原生 DEB,方便處理服務與裝置權限。官方也建議有原生套件時優先使用;Flatpak/AppImage 的擷取與權限限制不同,不要混裝後把兩套設定混在一起。[3]
用 Ubuntu 桌面使用者執行;不要在 sudo shell 中執行 user service。
systemctl --user start app-dev.lizardbyte.app.Sunshine
systemctl --user status app-dev.lizardbyte.app.Sunshine --no-pager
journalctl --user -u app-dev.lizardbyte.app.Sunshine -b -n 100 --no-pager在 Ubuntu 瀏覽器開啟 https://localhost:47990,建立管理帳密。這裡使用自簽憑證,核對是自己的本機網址後再接受警示。GNOME Wayland 先用自動設定;如需指定,選 Portal,並在主機的分享對話框確認螢幕。[3][4]
systemctl active 只表示服務正在跑,不表示畫面與編碼正常。如果管理介面要從 Mac 開啟,而且 Ubuntu 已有 SSH,可開 tunnel:以下帳號和位址必須換成自己的值。保留這個 terminal,再在 Mac 開 https://localhost:47990。
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:47990:127.0.0.1:47990 ubuntu_user@UBUNTU_IP若主機完全無螢幕且沒人可確認 Portal,不要反覆套用權限指令;先決定要用遠端登入、虛擬顯示或其他 headless 架構。
從 官方 v6.2.0 release 下載 macOS Universal DMG,將 App 拖入 Applications。已有 Homebrew 也可用下方指令;查證當日 cask 為 6.2.0、要求 macOS 13 以上,未來版本以安裝時資料為準。[5][11]
brew install --cask moonlight先看得到畫面,再測鍵盤、滑鼠、捲動、中文輸入及音訊。Mac 的 Command 快捷鍵與 Ubuntu 的 Ctrl/Super 並不相同,請用實際應用程式測試。[10]
| 設定 | 起始值 | 原因 |
|---|---|---|
| 解析度 / FPS | 1920×1080 / 60 | 先降低顯示與頻寬變數。 |
| Codec / 色彩 | H.264 / SDR | 先確認基本相容,再試 HEVC 或 AV1。 |
| 碼率 | 20 Mbps | 工程測試起點,不是所有網路的最佳值。 |
| 其他選項 | 先保留預設 | V-sync、renderer、FPS 不要同時更改。 |
先讓 Ubuntu 顯示輸出與串流解析度一致或相容;改 Moonlight 解析度不一定會自動改主機桌面。讀程式碼覺得模糊時,優先檢查縮放、串流解析度與實際 codec,不是只把碼率拉滿。
開啟 Moonlight 統計資訊(PC 用戶端通常為 Ctrl+Alt/Option+Shift+S),操作 10 分鐘。再一次只變更一項,例如 1440p、HEVC、較高碼率。M3 之前的 Mac 不應直接套用 6.2 所新增的 AV1 硬體解碼假設。[5]
Ubuntu 使用官方安裝程式;先下載並檢視,再執行。Mac 從 官方 macOS 安裝指引 安裝。兩端加入同一個已獲授權的 tailnet;登入和系統網路擴充的許可需本人完成。[12][13]
curl --fail --location https://tailscale.com/install.sh -o /tmp/tailscale-install.sh
less /tmp/tailscale-install.sh
# 檢查完畢,按 q 離開 less,再執行:
sh /tmp/tailscale-install.sh
sudo tailscale up
tailscale version
tailscale ip -4在 Moonlight 手動加入 Ubuntu 的 Tailscale IPv4。接著從 Ubuntu 對 Mac 的 tailnet 名稱或 IP 做診斷,避開 Mac CLI 尚未設定的問題:
tailscale ping MAC_TAILNET_NAME_OR_IP
tailscale statusdirect 是直連;relay 是 DERP;peer-relay 是其他節點轉送。剛開始幾包經 DERP 很正常,要觀察後續有沒有轉成直連。若持續中繼且效能不足,先降碼率或查網路,不要直接判定 Sunshine 壞了。[7]
保持 Sunshine UPnP 關閉;不需用 Funnel,也不需把 Sunshine 串流和 47990 管理埠轉送到公網。Tailscale 可達不代表應用服務一定通,還要檢查 tailnet 存取政策與主機防火牆。
先用已知 IP 手動新增主機,避免把自動探索失敗當成串流失敗。以下採官方 Moonlight 相容埠表;實際監聽與自訂 port 設定仍需核對。[10]
| 用途 | 預設埠 | 處理原則 |
|---|---|---|
| 串流/協定 | TCP 47984、47989、48010 UDP 47998、47999、48000、48002、48010 | 僅對所需區網或 tailnet 來源允許;不是公網轉送清單。 |
| 區網自動探索 | UDP 5353 | 手動新增 IP 時可不依賴探索;不跨 Tailscale 傳送 mDNS 作為基準需求。 |
| Sunshine Web UI | TCP 47990 | 優先主機本機或 SSH tunnel;不要為了配對把管理介面開給全網。 |
把 MAC_LAN_IP 換成實際 Mac 區網 IP。先檢視規則;不要重設或關閉防火牆,也不要對一台原本未啟用 UFW 的遠端主機直接啟用它。
sudo ufw status numbered
MAC_IP="MAC_LAN_IP"
# 替換上方值後才執行:
sudo ufw allow from "$MAC_IP" to any port 47984,47989,48010 proto tcp
sudo ufw allow from "$MAC_IP" to any port 47998,47999,48000,48002,48010 proto udpTailscale 的 netfilter 與 tailnet grants/ACL 是另一層;不要只加 UFW 就認定已限制全部 tailnet 流量。回復時只刪掉本次新增的規則。
| 症狀 | 先看什麼 | 下一步 |
|---|---|---|
| 有聲音、沒畫面 | 圖形會話、選到的螢幕、Portal 或 encoder 日誌 | 先確認 Ubuntu 真的有可用顯示輸出;不要一開始就換驅動或改 GRUB。 |
| Portal 曾可用,換螢幕後失敗 | 日誌是否為 saved token / no streams | 若確為 token 問題,Web UI → Troubleshooting → Reset XDG Portal Capture,再到主機授權。[4] |
| 看得到但不能操作 | uinput 與套件 udev 規則 | 先按官方規則修復/重載,必要時重新登入;不對裝置做全員可寫權限。[4] |
| CPU 高、串流掉幀 | 實際 encoder 是否為 software | NVIDIA 查 NVENC,Intel/AMD 查 VAAPI;不要把驅動正常等同硬體編碼成功。 |
| LAN 順,外網不順 | Tailscale 最終連線路徑、上傳頻寬與掉幀 | 先降低碼率、確認 direct / relay;低延遲取決於整條路徑。[7] |
| 重開機後無法連 | 主機是否睡眠、停在登入畫面或沒有顯示輸出 | 從本機/既有 SSH 復原;這不一定是服務啟動失敗。無人值守另設計。 |
| GUI 滑順但程式碼字緣模糊 | 主機解析度、縮放、色度取樣與 codec | 試相同解析度和適當字級;若主要是編輯程式,改用 Mac 本機編輯器+Remote SSH。[15] |
下列是本指南制定的工程門檻,並非廠商承諾;尚未測試的項目應保留空白。
| 證據 | 觀察 | 對你的影響 |
|---|---|---|
| Moonlight #1929 2026-07 | Mac 滑鼠延遲討論中,使用者回報 Enhanced 體感改善,維護者也討論輸入與顯示等待。 | 值得用同一主機、解析度與網路做 A/B;這些是個案主觀回饋,不能當成通用效能測試。[20] |
| Sunshine #5020 2026-04 至 08 | Vulkan 影像瑕疵回報包含 Ubuntu 24.04 使用者;最後因 stale 關閉,並非確認修復。 | 不要因 issue 顯示 Closed 就宣稱沒問題;先保留成功的 NVENC/VAAPI 基準,再測新後端。[21] |
| RustDesk #15417 + 1.5.0 | 社群推進 DRM/KMS 無人值守擷取;新版含多項相關 Linux 修正。 | 舊文中的 Wayland 支援狀態可能過時,但登入畫面仍要在你的硬體和套件上驗收。[16][17] |
本次有搜尋 Sunshine/Moonlight 相關 SKILL.md,但未找到足以推薦、且可驗證為專門維護 Ubuntu 24.04+macOS 流程的官方 skill。這不表示不存在。這項工作依賴主機盤點、套件、服務與實測;使用下方獨立 Agent Action 已足以開始,無需先增加 MCP 或第三方 skill。
包含版本、安裝區塊、任務順序、blocked 條件、交付成果與復原要求。Agent 必須連到真正的 Ubuntu 主機;這份文件不會在開啟網頁時執行任何系統指令。
# Agent Action:macOS 遠端操作 Ubuntu 24.04
查證日期:2026-10-16(Asia/Taipei)。這是獨立執行規格;不需要先讀原始對話。
## 目標與背景
為一台 Ubuntu 24.04 Desktop 主機部署 Sunshine,讓 Mac 使用 Moonlight 操作現有桌面。先完成同一區網的 1080p / 60 FPS / SDR 串流,再視需求加入 Tailscale 跨網路存取。若主要用途為 Coding Agent,保留 SSH 作為任務執行及故障復原通道,Moonlight 用來查看 GUI。
使用者尚未提供 GPU 型號、Ubuntu IP、登入帳號、Mac 型號、macOS 版本或是否無螢幕。能從獲授權的目標環境讀取就先盤點;不得把 Agent 所在的雲端工作容器當成使用者的 Ubuntu 主機。沒有目標連線時,完成安裝計畫與待執行腳本並標記 blocked,請使用者提供目標連線方式,不得宣稱已部署。
基準假設:單一使用者、Ubuntu 已可正常登入圖形桌面、有可用顯示輸出,初次配對時有人能在主機確認授權。若必須從「重開機後未登入、無人看守、無螢幕」狀態啟動,先改寫登入/顯示方案,不能把一般桌面流程當作已解決。
## 選定工具與版本
下表發布日期採官方 UTC 日期;查證日期採 Asia/Taipei。
| 元件 | 查證基準 | 執行原則 |
|---|---|---|
| Ubuntu | 24.04 Desktop | 保留現有 OS;不為串流升級發行版 |
| Sunshine | v2026.914.233613,2026-09-15 發布 | 官方原生 DEB,按 amd64 / arm64 選檔 |
| Moonlight PC / Qt | v6.2.0,2026-10-04 發布 | 官方 macOS Universal DMG |
| Tailscale | GitHub stable v1.104.1,2026-10-07 發布 | 跨網路需要時安裝;記錄兩端實際版本,平台發布可能不同步 |
| GPU 驅動 | 不預設版本 | 按實際 GPU、Ubuntu 套件與 Sunshine 日誌確認;nvidia-smi 成功不等於 NVENC 驗收成功 |
執行前重新查閱官方 stable release 和安全公告。若已有較新穩定版,核對 Ubuntu 24.04 資產、遷移說明與 checksum 後使用,並更新 versions.md;不要把下方舊 checksum 套用於新檔。不要自動降級較新的既有安裝。不要使用 nightly、beta、來源不明 fork。Sunshine 此基準已修補 GHSA-fp6g-27w5-489j。
## 依序執行
1. **盤點與備份**
- 讀目標專案/機器適用的管理規範,確認 Ubuntu 與 Mac 各自的執行位置與權限。
- 在 Ubuntu 圖形使用者的 terminal 收集 OS、架構、GPU、驅動、Wayland/X11、顯示輸出、目前網路與防火牆。SSH 會話的 XDG_SESSION_TYPE 不代表圖形桌面的類型,需用 loginctl 找到實際圖形會話。
- Mac 收集 `sw_vers`、`uname -m`、現有 Moonlight/Tailscale 版本。
- 若已安裝 Sunshine,確認來源、版本、systemd user unit、設定目錄與擷取後端;備份設定和必要的服務覆寫。備份含配對金鑰,限制權限,不放進公開報告或 Git。
- 只回報缺少什麼,不安裝整套桌面、不改顯示管理員、不在未知 GPU 上盲裝 NVIDIA 驅動。
2. **安裝 Sunshine**
- 預設使用官方 DEB。確認目標有 curl、CA 憑證和 apt;缺少才安裝必要工具。
- 下方為本報告基準版本的可重現安裝區塊;執行前先確認沒有更新版已裝在主機上。
```bash
(
set -eu
. /etc/os-release
if [ "$ID" != ubuntu ] || [ "$VERSION_ID" != 24.04 ]; then
echo '此段只適用 Ubuntu 24.04,請改用對應發行版套件。' >&2
exit 1
fi
SUN_ARCH="$(dpkg --print-architecture)"
case "$SUN_ARCH" in
amd64) SUN_SHA='c38e9c705f650f8705f61702717e99bec34044c5028fcb8f23a08fe041292c21' ;;
arm64) SUN_SHA='5751c22cf0b9253b459d7f42103f1c422594363a5881e21bd1ce845218226888' ;;
*) echo "未涵蓋的架構:$SUN_ARCH" >&2; exit 1 ;;
esac
SUN_WORK="$(mktemp -d)"
cd "$SUN_WORK"
curl --fail --location --proto '=https' --tlsv1.2 \
-o sunshine.deb \
"https://github.com/LizardByte/Sunshine/releases/download/v2026.914.233613/sunshine_2026.914.233613-1%2Bubuntu24.04_${SUN_ARCH}.deb"
printf '%s sunshine.deb\n' "$SUN_SHA" | sha256sum --check -
sudo apt update
sudo apt install ./sunshine.deb
)
```
- 使用 `dpkg-query -W sunshine` 記錄版本。安裝官方編譯套件通常不需要另裝 CUDA Toolkit;有 GPU 問題時按實際日誌查證。
3. **圖形會話、服務與擷取**
- 以 Ubuntu 桌面使用者啟動 user service:
```bash
systemctl --user start app-dev.lizardbyte.app.Sunshine
systemctl --user status app-dev.lizardbyte.app.Sunshine --no-pager
journalctl --user -u app-dev.lizardbyte.app.Sunshine -b -n 100 --no-pager
```
- GNOME Wayland 先觀察自動選擇結果;需要時在 Web UI 指定 XDG Portal 擷取,並在主機確認 Remote Desktop/螢幕分享授權。`portal` 為擷取後端;`nvenc` / `vaapi` / `vulkan` 為編碼後端,不可混淆。
- 初始編碼讓程式自動選擇;若選到 software 或發生相容問題,再按 GPU 試 NVENC 或 VAAPI。不要因 Vulkan 較新就強制啟用。
- 確認實際日誌為硬體編碼。服務 active 只證明程序存在,不代表可用串流。
- 不以 root 長期執行 Sunshine,不做 `chmod 666 /dev/uinput`,不照抄舊教學向程式額外加 cap_sys_admin。輸入故障先查套件 udev 規則;只有證據顯示必要才按官方文件修復權限並記錄變更。
4. **Mac 安裝與 LAN 配對**
- 下載官方 v6.2.0 的 macOS Universal DMG,將 Moonlight.app 放入 Applications。已有 Homebrew 可使用 cask,但必須核對實際安裝版及當前 macOS 要求。
- 在 Ubuntu 開 `https://localhost:47990` 設定獨立管理帳密。若以 Mac 管理,使用已存在的 SSH 通道轉送到 Ubuntu 的 localhost;Mac 自己的 localhost 並不等於 Ubuntu。
- Moonlight 手動加入 Ubuntu 的 LAN IP;Moonlight 顯示 PIN,再到 Sunshine Web UI 的 PIN 頁輸入。不要將管理密碼或配對狀態檔寫入交付成果。
- 用 Desktop 項目測試;若沒有,建立不帶啟動命令的 Desktop 應用以串流現有桌面。
- 起始值:1920×1080、60 FPS、H.264、20 Mbps、SDR,先保留其他預設。這是測試起點,不是官方最佳值。
- 測試鼠標、英文與繁體中文輸入、捲動、音訊;記錄主機端輸入法與 Mac 快捷鍵的差異。
5. **網路與 Tailscale(需要跨網路時)**
- 先讓 LAN 驗收通過。兩端安裝官方 Tailscale,加入同一個已授權 tailnet;登入、MFA、系統網路擴充允許由使用者完成。
- Ubuntu 使用官方 Linux 安裝方式;Mac 使用官方 macOS 安裝包。記錄版本及 Ubuntu Tailscale IPv4。
- Moonlight 手動加入 Ubuntu 的 Tailscale IP。用 `tailscale ping <對端名稱或IP>`、`tailscale status` 確認最後是 direct、peer-relay 或 DERP relay;初始數包經 DERP 不等於一直走中繼。
- 不啟用 Tailscale Funnel,不開啟 Sunshine UPnP,不把管理介面/串流埠轉送到公網;保持既有防火牆運作。
- 如果連線遭擋,先檢查 tailnet grants/ACL、作業系統防火牆與服務位址。按現行官方埠表、只對必要來源新增最小規則。不得重寫整份 tailnet policy,也不要假設 UFW 規則能覆蓋所有 Tailscale netfilter 行為。
- 若要從 Mac 管理 Sunshine,優先用既有 SSH 的 localhost port forwarding;不要為了管理 UI 把 origin_web_ui_allowed 改成 wan。
6. **調校、重連與重啟**
- 先保存 1080p60 基準,再一次只改一個項目:解析度、碼率、codec、幀率。測量真實工作負載,尤其是 AI 運算同時占用 GPU 時。
- 使用 Moonlight 統計畫面記錄 FPS、網路掉幀、解碼時間與 jitter(有顯示才記);這些數值不是完整的點擊到畫面端到端延遲。
- 通過後才啟用 `systemctl --user enable app-dev.lizardbyte.app.Sunshine`。避免另跑手動 sunshine 造成雙程序。
- 需重啟測試時先確認使用者工作已保存且有登入/救援路徑。分開測「重啟服務後重連」、「重新登入後可用」、「主機重開機後未登入可用」;最後一項預設不在基準承諾內。
- 不把 enable 或 loginctl enable-linger 當成建立圖形桌面;不自動啟用 autologin、停用鎖屏或改 GRUB。
## 驗收標準
- [ ] 記錄目標 OS、CPU 架構、GPU/驅動、Mac 型號及兩端版本。
- [ ] LAN 能配對,Desktop 有畫面、鼠標鍵盤可用,中文輸入與音訊完成檢查。
- [ ] 日誌確認使用硬體編碼;若僅 software,標為未通過目標效能驗收。
- [ ] 1080p60 連續操作 10 分鐘,無黑畫面、無需重啟救援、無持續掉幀;記錄實際統計及網路條件。10 分鐘與以下數字是本任務工程門檻,不是官方效能承諾:流暢動態測試時 FPS 接近設定值、網路掉幀以低於 1% 為目標;無對應計數器則寫未量測。
- [ ] 斷線後重新連線成功;服務重啟後成功;登入及螢幕狀態的限制寫清楚。
- [ ] 跨網路若納入範圍,從不同網路測試,記錄 direct / peer-relay / relay。經中繼可標功能通過,但效能需另驗收。
- [ ] 無公網端口轉送、UPnP/Funnel;保留現有 SSH/救援通道;配置變更可回復。
## 必須交付
1. `environment.md`:實際環境與缺少條件,避免敏感 IP/帳號進入公開版。
2. `versions.md`:版本、官方下載 URL、SHA-256、查證日期。
3. `setup-log.md`:已執行步驟、改動檔案、服務狀態;禁止記錄密碼、金鑰、授權 token。
4. `validation.md`:逐項 pass/fail/blocked/not-tested、實測值、測試日期與會話狀態。不可把沒測的項目寫成成功。
5. `rollback.md`:只撤回本次變更;停止/停用此次服務、恢復設定與新增規則,不移除原已存在的軟體或既有 tailnet 設定。不降級到已知受影響版本。
可直接執行已授權的盤點、安裝及可回復修正;只有會中斷工作、變更核心登入/安全方式或需要使用者完成互動時才暫停,並說明具體原因。這份規格授權的是遠端桌面設定,不包含購買硬體、修改帳號權限或全面升級 OS。
## 官方與查證來源
- 原文:https://university.tenten.co/t/macos-ubuntu-24-04-sunshine-moonlight/2613
- Sunshine 固定版本:https://github.com/LizardByte/Sunshine/releases/tag/v2026.914.233613
- 資產及雜湊:https://api.github.com/repos/LizardByte/Sunshine/releases/tags/v2026.914.233613
- Sunshine 安裝:https://docs.lizardbyte.dev/projects/sunshine/latest/md_docs_2getting__started.html
- Sunshine 排錯:https://docs.lizardbyte.dev/projects/sunshine/latest/md_docs_2troubleshooting.html
- Linux 安全修正:https://github.com/LizardByte/Sunshine/security/advisories/GHSA-fp6g-27w5-489j
- Moonlight:https://github.com/moonlight-stream/moonlight-qt/releases/tag/v6.2.0
- Moonlight 配對與埠表:https://github.com/moonlight-stream/moonlight-docs/wiki/Setup-Guide
- Tailscale:https://tailscale.com/download/linux 及 https://tailscale.com/docs/install/mac
- Tailscale 連線類型:https://tailscale.com/docs/reference/connection-types
- Remote SSH:https://code.visualstudio.com/docs/remote/ssh
統一查證日期:2026-10-16(Asia/Taipei)。版本以官方 release/API 為準;社群回報只代表所述環境。未測試你的 GPU、網路、螢幕及 Mac,不提供保證延遲數值。原文透過公開 Discourse JSON 介面取得,並非只依網址猜測。