TENTEN / TECHNICAL FIELD GUIDE
繁體中文 · Tutorial + Agent Action · 2026.10.16
REMOTE DESKTOP · MAC TO UBUNTU

macOS × Ubuntu 24.04
Sunshine+Moonlight 實作指南

從「看起來很快」到「實際連得上」。補齊版本、圖形登入、畫面擷取、網路與驗收,讓你看得懂,也讓 Agent 做得出來。

查證:2026-10-16官方穩定版優先未在你的硬體實測
01 / 先選對用途

保留串流方案,補上可靠的執行與救援通道

若你要在 Mac 上流暢操作 Ubuntu 的瀏覽器、3D 或其他動態 GUI,建議用官方 Sunshine+官方 Moonlight,跨網路時加入 Tailscale。若主要是讓 Agent 寫程式,讓 SSH 負責指令與檔案,Moonlight 負責視覺檢查,通常更容易維護。

完整桌面

Sunshine+Moonlight

傳送現有桌面的畫面、聲音與操作。需要可用圖形會話和顯示輸出。

Agent 開發

SSH+按需開啟 GUI

編譯、測試、部署可在主機執行;不必讓每個開發動作經過影像串流。[15]

開機即遠端登入

先確認登入需求

Ubuntu 24.04 原生 Remote Login 值得先評估。Sunshine 的 user service 不會替你建立完整桌面。[6]

本指南假設:Ubuntu 24.04 Desktop、單人使用、已能登入桌面、初次設定有人可在主機按下授權。GPU、Mac 型號、網路與無螢幕需求尚未知;以下是可執行的設定流程,尚未在你的兩台機器完成實測。
02 / 原文查核

方向可用,但這七點會影響能否做成功

原文已透過公開 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]
03 / 2026-10-16 版本快照

先用穩定版建立基準

發布日期採官方 UTC 日期;本指南查證日期採 Asia/Taipei。

元件本次查證選用理由與注意事項
Sunshinev2026.914.233613
2026-09-15
官方 Latest;有 Ubuntu 24.04 amd64 / arm64 資產。包含 Linux 安全修正,舊版本不宜照抄安裝。[2][8][9]
Moonlight PC / Qtv6.2.0
2026-10-04
官方 macOS Universal。新增 M3 及更新 Mac 的 AV1 硬體解碼支援;兩端仍都須支援所選 codec。[5]
Tailscalev1.104.1
2026-10-07
GitHub stable 快照;macOS 的不同發布管道可能不同步,安裝後記錄實際版號。[13][14]
已有更高版本?不要降級。先確認官方 release、Ubuntu 24.04 資產和遷移說明,再更新這份版本紀錄。以下安裝區塊固定為本次查證版;套件更新後檔名與雜湊也要一起換。

近六個月值得關注的變化

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]

04 / 先理解再設定

擷取、編碼、傳輸與解碼,是四件不同的事

UBUNTU 主機

桌面 → 擷取 → GPU 編碼

Portal / KMS 決定「怎麼拿到畫面」;NVENC / VAAPI / Vulkan 決定「怎麼壓縮」。

區網或 TAILSCALE

影像與音訊往 Mac

鍵盤與滑鼠操作回 Ubuntu。跨網路的頻寬、延遲與抖動都會影響體感。

MAC 用戶端

Moonlight 解碼並顯示

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 顯示的網路或解碼數字也不是整條鏈路的總延遲。

05 / 原方案與三個替代方向

依工作型態選擇,避免把所有需求塞進遠端桌面

方案 / 原始碼最適合主要優點取捨與結論
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 SSHCoding Agent、CLI、程式與 Web 開發編輯介面在 Mac,工具與程式在 Ubuntu;不依賴桌面串流。不提供整個 Ubuntu GUI。若你主要讓 Agent 開發,優先採這條路,再按需加 Moonlight。VS Code Remote SSH 擴充套件不等同全開源替代。[15]

此表比較使用情境,不是同條件效能排行榜。Tailscale 是可搭配的網路層,不是遠端桌面替代品。

06 / 動手完成

先在同一區網成功,再加入外網

1

確認主機真的有桌面與可用編碼器

初次請在 Ubuntu 已登入的桌面開 Terminal。確認螢幕已連接並開啟,Mac 和 Ubuntu 能在同一區網通訊。

Ubuntu · Terminal
cat /etc/os-release
dpkg --print-architecture
uname -r
printf 'Session=%s  Desktop=%s\n' "$XDG_SESSION_TYPE" "$XDG_CURRENT_DESKTOP"
lspci -nnk
hostname -I

NVIDIA 使用 nvidia-smi 檢查驅動;Intel/AMD 可安裝 vainfo 查看 VAAPI 編碼能力。VAEntrypointEncSlice 或 EncSliceLP 是編碼能力線索,最後仍以串流成功與日誌為準。

Ubuntu · Intel/AMD 選用檢查
sudo apt install vainfo
vainfo

若缺 NVIDIA 驅動,先到 Ubuntu「軟體與更新 → 額外驅動程式」核對推薦項目,安排重啟後再驗證。官方 Sunshine 預編譯包不代表你需要另裝整套 CUDA Toolkit。SSH terminal 的會話類型不等於圖形桌面類型。[3]

2

安裝官方 Ubuntu 24.04 套件

先確認 dpkg-query -W sunshine;若已裝較新版,不執行下方降級。需要 curl 與有效 CA 憑證。區塊會檢查 OS、判斷架構、下載固定版並核對官方 API 提供的 SHA-256。[9]

Ubuntu · Terminal
(
  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
)
Ubuntu · Terminal
dpkg-query -W sunshine

此流程使用原生 DEB,方便處理服務與裝置權限。官方也建議有原生套件時優先使用;Flatpak/AppImage 的擷取與權限限制不同,不要混裝後把兩套設定混在一起。[3]

3

啟動服務,確認畫面擷取授權

用 Ubuntu 桌面使用者執行;不要在 sudo shell 中執行 user service。

Ubuntu · Terminal
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]

兩個常見誤解:Mac 的 localhost 是 Mac,不是 Ubuntu;systemctl active 只表示服務正在跑,不表示畫面與編碼正常。

如果管理介面要從 Mac 開啟,而且 Ubuntu 已有 SSH,可開 tunnel:以下帳號和位址必須換成自己的值。保留這個 terminal,再在 Mac 開 https://localhost:47990。

Mac · 已有 SSH 時選用
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:47990:127.0.0.1:47990 ubuntu_user@UBUNTU_IP

若主機完全無螢幕且沒人可確認 Portal,不要反覆套用權限指令;先決定要用遠端登入、虛擬顯示或其他 headless 架構。

4

Mac 安裝 Moonlight,完成配對

從 官方 v6.2.0 release 下載 macOS Universal DMG,將 App 拖入 Applications。已有 Homebrew 也可用下方指令;查證當日 cask 為 6.2.0、要求 macOS 13 以上,未來版本以安裝時資料為準。[5][11]

Mac · Homebrew 選用
brew install --cask moonlight
  1. 開 Moonlight,手動加入 Ubuntu 的區網 IP。
  2. 點選主機,讀取 Moonlight 顯示的 PIN。
  3. 到 Sunshine Web UI 的 PIN 頁輸入,完成配對。
  4. 選 Desktop 開始串流。若沒列出,於 Sunshine Applications 建立不帶啟動命令的 Desktop 項目。

先看得到畫面,再測鍵盤、滑鼠、捲動、中文輸入及音訊。Mac 的 Command 快捷鍵與 Ubuntu 的 Ctrl/Super 並不相同,請用實際應用程式測試。[10]

5

建立一份可比較的效能基準

設定起始值原因
解析度 / FPS1920×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]

6

需要跨網路時,再加入 Tailscale

Ubuntu 使用官方安裝程式;先下載並檢視,再執行。Mac 從 官方 macOS 安裝指引 安裝。兩端加入同一個已獲授權的 tailnet;登入和系統網路擴充的許可需本人完成。[12][13]

Ubuntu · Terminal
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 尚未設定的問題:

Ubuntu · 請替換對端名稱或 IP
tailscale ping MAC_TAILNET_NAME_OR_IP
tailscale status

direct 是直連;relay 是 DERP;peer-relay 是其他節點轉送。剛開始幾包經 DERP 很正常,要觀察後續有沒有轉成直連。若持續中繼且效能不足,先降碼率或查網路,不要直接判定 Sunshine 壞了。[7]

保持 Sunshine UPnP 關閉;不需用 Funnel,也不需把 Sunshine 串流和 47990 管理埠轉送到公網。Tailscale 可達不代表應用服務一定通,還要檢查 tailnet 存取政策與主機防火牆。

7

最後才啟用自動啟動,記錄登入限制

Ubuntu · Terminal
systemctl --user enable app-dev.lizardbyte.app.Sunshine

測試斷線重連、重新啟動服務,以及登出再登入後能否使用。若要重開機,先保存正在進行的工作並確保有本機登入或救援路徑。user service 自動啟動不等於未登入時就有可擷取桌面。不為方便而預設開啟自動登入或關掉鎖屏。[3][4]

07 / 連線被擋時

先判斷是哪一層,再新增必要規則

先用已知 IP 手動新增主機,避免把自動探索失敗當成串流失敗。以下採官方 Moonlight 相容埠表;實際監聽與自訂 port 設定仍需核對。[10]

用途預設埠處理原則
串流/協定TCP 47984、47989、48010
UDP 47998、47999、48000、48002、48010
僅對所需區網或 tailnet 來源允許;不是公網轉送清單。
區網自動探索UDP 5353手動新增 IP 時可不依賴探索;不跨 Tailscale 傳送 mDNS 作為基準需求。
Sunshine Web UITCP 47990優先主機本機或 SSH tunnel;不要為了配對把管理介面開給全網。
UFW 已啟用、且確認是它擋住 LAN 時的範例

把 MAC_LAN_IP 換成實際 Mac 區網 IP。先檢視規則;不要重設或關閉防火牆,也不要對一台原本未啟用 UFW 的遠端主機直接啟用它。

Ubuntu · Terminal
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 udp

Tailscale 的 netfilter 與 tailnet grants/ACL 是另一層;不要只加 UFW 就認定已限制全部 tailnet 流量。回復時只刪掉本次新增的規則。

08 / 排錯與成功標準

不要用「服務有啟動」當作驗收

症狀先看什麼下一步
有聲音、沒畫面圖形會話、選到的螢幕、Portal 或 encoder 日誌先確認 Ubuntu 真的有可用顯示輸出;不要一開始就換驅動或改 GRUB。
Portal 曾可用,換螢幕後失敗日誌是否為 saved token / no streams若確為 token 問題,Web UI → Troubleshooting → Reset XDG Portal Capture,再到主機授權。[4]
看得到但不能操作uinput 與套件 udev 規則先按官方規則修復/重載,必要時重新登入;不對裝置做全員可寫權限。[4]
CPU 高、串流掉幀實際 encoder 是否為 softwareNVIDIA 查 NVENC,Intel/AMD 查 VAAPI;不要把驅動正常等同硬體編碼成功。
LAN 順,外網不順Tailscale 最終連線路徑、上傳頻寬與掉幀先降低碼率、確認 direct / relay;低延遲取決於整條路徑。[7]
重開機後無法連主機是否睡眠、停在登入畫面或沒有顯示輸出從本機/既有 SSH 復原;這不一定是服務啟動失敗。無人值守另設計。
GUI 滑順但程式碼字緣模糊主機解析度、縮放、色度取樣與 codec試相同解析度和適當字級;若主要是編輯程式,改用 Mac 本機編輯器+Remote SSH。[15]

一輪 10 分鐘的實用驗收

下列是本指南制定的工程門檻,並非廠商承諾;尚未測試的項目應保留空白。

09 / 社群訊號怎麼讀

看可重現的回饋,也看關閉原因

證據觀察對你的影響
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]

需要另外安裝 Agent Skill 嗎?

本次有搜尋 Sunshine/Moonlight 相關 SKILL.md,但未找到足以推薦、且可驗證為專門維護 Ubuntu 24.04+macOS 流程的官方 skill。這不表示不存在。這項工作依賴主機盤點、套件、服務與實測;使用下方獨立 Agent Action 已足以開始,無需先增加 MCP 或第三方 skill。

10 / 直接交給 Agent

一份獨立文件,從環境盤點做到驗收

包含版本、安裝區塊、任務順序、blocked 條件、交付成果與復原要求。Agent 必須連到真正的 Ubuntu 主機;這份文件不會在開啟網頁時執行任何系統指令。

展開完整 Markdown 執行規格
# 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
11 / 來源與查證邊界

可回查的來源

統一查證日期:2026-10-16(Asia/Taipei)。版本以官方 release/API 為準;社群回報只代表所述環境。未測試你的 GPU、網路、螢幕及 Mac,不提供保證延遲數值。原文透過公開 Discourse JSON 介面取得,並非只依網址猜測。

  1. 原始文章(公開 JSON 全文已讀取;發表於 2026-10-16)
  2. Sunshine v2026.914.233613:穩定版與近期改動
  3. Sunshine 官方安裝與服務設定
  4. Sunshine 官方排錯:Portal、輸入、編碼與網路
  5. Moonlight PC v6.2.0:macOS 變更與下載
  6. Ubuntu 官方 Remote Desktop 測試計畫
  7. Tailscale 連線類型與診斷
  8. Sunshine Linux 安全公告 GHSA-fp6g-27w5-489j
  9. Sunshine release API:Ubuntu 24.04 資產與 SHA-256
  10. Moonlight 官方 Setup Guide:配對及埠表
  11. Homebrew Moonlight cask:現行版本與 macOS 要求
  12. Tailscale 官方 Linux 安裝
  13. Tailscale 官方 macOS 安裝
  14. Tailscale v1.104.1
  15. VS Code Remote SSH 官方文件
  16. RustDesk v1.5.0:Wayland、輸入、登入畫面改動
  17. RustDesk DRM/KMS 設計討論 #15417
  18. Moonlight macOS Enhanced 專案
  19. Enhanced release API:v1.3.9-rc.5(本次快照)
  20. Moonlight macOS 滑鼠延遲回報 #1929
  21. Sunshine Vulkan 影像瑕疵回報 #5020
  22. Sunshine Portal 文件補正 PR #5938
  23. Ubuntu 26.04 LTS:GNOME 遠端桌面硬體加速
  24. Sunshine 近期 commits(查證時最新日期 2026-10-15)
  25. Moonlight 近期 commits(查證時最新日期 2026-10-14)
  26. Enhanced 近期 commits(查證時五筆均為同一作者)