流程與適用範圍
本教學以 Ubuntu 24.04 Desktop 執行 Sunshine,讓 Mac 透過官方 Moonlight 操作現有桌面。先完成同一區網串流,需要跨網路時再加入 Tailscale。
適用環境為單一使用者、Ubuntu 已能登入圖形桌面、有可用顯示輸出,且初次配對時有人能在主機確認授權。Sunshine 的使用者服務不會建立圖形登入工作階段;無螢幕或重開機後未登入的使用方式需另行設計。
| 主要工作 | 建議路徑 |
|---|---|
| 動態 GUI、瀏覽器、3D 或完整桌面 | Sunshine+Moonlight,先驗收現有 GPU 與桌面 |
| Coding Agent 執行命令、存取檔案 | SSH 作為執行與復原通道,Moonlight 用於查看 GUI |
| Mac 編輯、Ubuntu 執行程式 | SSH+VS Code Remote SSH 可作為主要工作方式 |
| 開機後直接遠端登入 | 另行評估 Ubuntu 24.04 的 Remote Login |
七項實作修正
來源報告比對了原始文章,以下修正影響安裝、配對及驗收方式。
| 項目 | 查核結果 | 操作方式 |
|---|---|---|
| 舊 DEB 檔名 | sunshine-ubuntu-24.04-amd64.deb 已不符合本次 release 的命名 | 使用含版本、Ubuntu 版本與架構的固定資產,核對 SHA-256 |
| PIN 方向 | Moonlight 顯示 PIN | 在 Sunshine 的 PIN 頁輸入該組數字 |
| Ubuntu 24.04 內建 VNC | Ubuntu 內建 VNC 已於 22.10 移除 | GNOME 原生遠端桌面路徑使用 RDP 用戶端,不能直接用 Mac 的 VNC「螢幕共享」連線 |
| RDP 效能比較 | 缺少相同硬體、網路與工作負載測試,不能宣稱 Sunshine 全面較快 | 按動態畫面或辦公需求選用;Ubuntu 26.04 的 GNOME RDP 硬體加速進展不能直接套到 24.04 |
| NVIDIA 判定 | nvidia-smi 成功僅代表能與驅動溝通 | 沿用現有 GPU,確認擷取、硬體編碼日誌與 Mac 解碼,不先購買顯示卡 |
| Tailscale 路徑 | 可能為 direct、DERP relay 或 peer-relay | 使用 tailscale ping 與 tailscale status 檢查實際路徑 |
| 自動啟動 | 啟用服務不等於無人值守桌面 | 分別驗收已登入、斷線重連及重開機未登入三種狀態 |
版本與維護快照
發布日期採官方 UTC 日期,查證日期採 Asia/Taipei。
| 元件 | 固定基準 | 發布日期 | 選用與限制 |
|---|---|---|---|
| Sunshine | v2026.914.233613 | 2026-09-15 | 官方 Ubuntu 24.04 amd64/arm64 DEB,含 Linux 安全修正 |
| Moonlight PC/Qt | v6.2.0 | 2026-10-04 | 官方 macOS Universal;新增 M3 及更新 Mac 的 AV1 硬體解碼支援,兩端須支援所選 codec |
| Tailscale | v1.104.1 | 2026-10-07 | GitHub stable 快照;macOS 發布管道可能不同步,記錄實際安裝版號 |
已有較新版本時,不要降級。先核對官方 release、Ubuntu 24.04 資產、遷移說明與安全公告,再更新版本紀錄;新套件必須使用對應的新檔名與雜湊。
Sunshine 近期有 Portal 擷取、Linux 編碼與網路綁定位址修正;Moonlight 6.2 調整了 Mac 預設 renderer。近期提交可用來確認維護活動,不能作為所有 GPU 相容的保證。
Moonlight macOS Enhanced 的 release API 在查證時回傳 v1.3.9-rc.5,發布於 2026-10-13。GitHub 未將它標為 prerelease,但版本帶 RC,發行說明也明示預發行及架構重建,故只列為試用候選;最近五筆提交作者相同,不足以推論全專案只有一位維護者。
擷取、編碼與延遲
| 階段 | 執行位置與功能 |
|---|---|
| 桌面擷取 | Ubuntu 透過 Portal、KMS 等後端取得畫面 |
| 影片編碼 | Ubuntu 以 NVENC、VAAPI、Vulkan 等後端編碼 |
| 網路傳輸 | 影片與音訊送往 Mac,鍵盤與滑鼠輸入傳回 Ubuntu |
| 解碼與顯示 | Mac 解碼串流並顯示;應用程式仍在 Ubuntu 執行 |
capture = portal 與 encoder = nvenc 可以同時使用,兩者分屬擷取與編碼層。GNOME 與 KDE 的擷取選項不同,不要照抄 kwin 設定;NvFBC 也不是通用的 Wayland 擷取方法。舊設定頁曾漏列 Portal,可對照官方文件補正 PR。
互動延遲包含輸入、主機處理與擷取、編碼、網路、解碼及顯示。60 FPS 的單幀時間約為 16.7 ms,不能拿來代表完整的點擊到畫面延遲;Moonlight 的分項統計也不是端到端量測。
替代工具與選擇條件
| 工具 | 適用情境 | 先確認的限制 |
|---|---|---|
| Sunshine+Moonlight | 單一 GPU 桌面、連續動態畫面 | 需要可擷取的桌面與顯示輸出;不提供檔案同步或多使用者獨立桌面 |
| GNOME Remote Desktop+RDP | 辦公、系統原生 Remote Login | 區分 Desktop Sharing 與 Remote Login,確認實際埠號;Mac 使用 RDP 用戶端 |
| RustDesk | 遠端支援 | 1.5.0 已包含 Wayland、輸入與登入畫面修正;登入畫面及套件相容性仍需按環境測試 |
| OpenSSH+VS Code Remote SSH | Mac 編輯、Ubuntu 執行程式與工具 | 不提供完整桌面 |
Tailscale 是網路連線層,不能替代遠端桌面工具。未做相同條件的量測前,不排列上述工具的效能名次。
前置需求
- 未完成:
Ubuntu 24.04 Desktop 能正常登入,單一桌面使用者具備必要安裝權限。
- 未完成:
主機有可用顯示輸出,第一次設定時有人可確認 Portal 授權。
- 未完成:
兩台電腦先位於同一區網,已取得 Ubuntu 的正確 IP。
- 未完成:
已記錄 Mac 型號、macOS 版本與 CPU 架構;Homebrew cask 6.2.0 要求 macOS 13 以上。
- 未完成:
Ubuntu 可使用
curl、有效 CA 憑證與apt;缺少時只補必要工具。 - 未完成:
既有 Sunshine 設定與服務覆寫已備份;配對金鑰不得放進公開文件或 Git。
- 未完成:
有本機登入或既有 SSH 救援路徑;重啟前能保存使用中的工作。
Ubuntu 環境盤點
在 Ubuntu 圖形桌面的終端機執行,先接上並開啟螢幕。SSH 的工作階段類型不代表圖形桌面類型;若從 SSH 盤點,需用 loginctl 找出實際圖形工作階段。
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,記錄 GPU 與驅動。Intel/AMD 可安裝並執行 vainfo:
sudo apt install vainfo
vainfoVAEntrypointEncSlice 或 VAEntrypointEncSliceLP 是編碼能力線索,最終仍須用 Sunshine 日誌與實際串流驗證。若缺少 NVIDIA 驅動,先檢查 Ubuntu「軟體與更新」的「額外驅動程式」,評估相容性與重啟安排。
固定版本安裝
先用 dpkg-query -W sunshine 檢查既有版本;未安裝時該查詢可能找不到套件。若已有較新穩定版,停止使用下面的固定舊版區塊,改核對現有版本與官方文件。
以下區塊只適用 Ubuntu 24.04,依 amd64/arm64 選擇官方 DEB,校驗通過後才交給 apt 安裝。
(
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 的擷取與權限方式不同,不要混裝;官方編譯套件通常不需要另裝 CUDA Toolkit。
使用者服務與桌面擷取
以 Ubuntu 桌面使用者執行,不使用 sudo shell 啟動長期服務:
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,建立獨立管理帳密。預設憑證為自簽憑證,確認開啟的是本機 Sunshine 後再繼續。
GNOME Wayland 先觀察自動擷取選擇;需要時在 Web UI 指定 Portal,並在主機確認螢幕分享或 Remote Desktop 授權。編碼先保留自動選擇,從日誌確認實際後端;服務顯示 active 只代表程序存在。
若 Mac 已能透過 SSH 連入 Ubuntu,可在 Mac 建立以下通道。先替換帳號與 IP,保留終端機連線,再以 Mac 瀏覽器開啟同一個 localhost URL。
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:47990:127.0.0.1:47990 ubuntu_user@UBUNTU_IPMac 的 localhost 原本指向 Mac,只有上述 SSH 通道才會把該連接埠轉送到 Ubuntu。無螢幕且無人可授權 Portal 時,需先決定 Remote Login、虛擬顯示或其他無螢幕方案。
Mac 安裝與配對
從官方 v6.2.0 release 下載 macOS Universal DMG,將 Moonlight.app 放入 Applications。已有 Homebrew 時可使用 cask,安裝前核對當前 macOS 要求與版本:
brew install --cask moonlight在 Moonlight 手動加入 Ubuntu 的區網 IP。
Moonlight 顯示 PIN 後,到 Sunshine Web UI 的 PIN 頁輸入該組數字。
開啟 Desktop。若未列出,在 Sunshine Applications 建立不帶啟動命令的 Desktop 項目,以串流現有桌面。
檢查畫面、鍵盤、滑鼠、捲動、繁體中文輸入與音訊。
Mac 的 Command 與 Ubuntu 的 Ctrl/Super 不完全相同,需記錄實際快捷鍵與主機輸入法行為。
串流效能基準
| 設定 | 起始值 |
|---|---|
| 解析度 | 1920×1080 |
| 幀率 | 60 FPS |
| 編碼 | H.264 |
| 碼率 | 20 Mbps |
| 色彩 | SDR |
| 其他選項 | 保留預設 |
20 Mbps 是工程測試起點,不是所有網路的最佳值。主機顯示解析度需匹配或相容;更改 Moonlight 解析度不一定會改變 Ubuntu 的實際顯示輸出。
連續操作 10 分鐘,記錄 Moonlight 統計;通常可用 Ctrl+Alt/Option+Shift+S 顯示。基準通過後,一次只調整一項,例如 1440p、HEVC、碼率、V-sync、renderer 或幀率。
文字模糊時,先查解析度、縮放、色度取樣與 codec,不只提高碼率。M3 以前的 Mac 不應直接套用新增的 AV1 硬體解碼能力;AI 運算同時使用 GPU 時也需另測實際工作負載。
Tailscale 跨網路連線
先完成區網驗收,再依需要加入 Tailscale。Ubuntu 使用官方安裝程式,先下載並閱讀:
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 -4Mac 依官方 macOS 安裝指引操作。兩端加入同一個已授權 tailnet,登入、MFA 與系統網路擴充授權由使用者完成,並記錄兩端實際版本。
Moonlight 手動加入 Ubuntu 的 Tailscale IPv4。以下在 Ubuntu 檢查通往 Mac 的路徑,先替換對端名稱或 IP:
tailscale ping MAC_TAILNET_NAME_OR_IP
tailscale status| 路徑 | 判讀 |
|---|---|
| direct | 端點之間直接連線 |
| relay/DERP | 經 Tailscale 中繼 |
| peer-relay | 經 tailnet 內的對等中繼節點 |
初始數個封包經 DERP,之後可能轉為 direct。若持續中繼且效能不佳,先降低碼率並檢查網路、主機上傳能力與掉幀。
關閉 Sunshine UPnP,不啟用 Tailscale Funnel,也不將串流埠或管理介面的 47990 轉送到公網。連線受阻時,分別檢查 tailnet grants/ACL、服務監聽位址與主機防火牆。
自動啟動與重新登入
前述測試通過後,才啟用使用者服務自動啟動:
systemctl --user enable app-dev.lizardbyte.app.Sunshine依序測試斷線重連、重啟服務後重連、登出再登入。若需要主機重開機測試,先保存工作並確認本機登入或 SSH 救援路徑,不要同時另跑手動 Sunshine 程序。
使用者服務不會建立登入前的圖形桌面;loginctl enable-linger 也不能替代圖形登入。不要為了讓測試通過,自動啟用 autologin、停用鎖定畫面或修改 GRUB。
Moonlight 相容連接埠與防火牆
| 功能 | 協定與連接埠 | 範圍 |
|---|---|---|
| 串流控制 | TCP 47984、47989、48010 | 必要用戶端來源 |
| 串流資料 | UDP 47998、47999、48000、48002、48010 | 必要用戶端來源 |
| 區網探索 | UDP 5353 | 區網;手動填 IP 可省略探索 |
| Sunshine Web UI | TCP 47990 | localhost 或既有 SSH 通道 |
以上是 Moonlight 相容連接埠清單,仍需檢查 Sunshine 的實際監聽與自訂 base port 設定;不表示所有 UDP 埠都會持續監聽。Tailscale 基準流程手動填 IP,不要求跨網路 mDNS。Web UI 不應直接開放給整個網路。
只有在 UFW 已啟用、且已確認它阻擋連線時,才使用以下範例。先查看現有規則,再把 MAC_LAN_IP 替換為 Mac 的實際區網 IP:
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不要重設或停用既有防火牆,也不要在遠端主機盲目啟用 UFW。Tailscale 的 netfilter 行為與 grants/ACL 需另外確認,不能假設 UFW 涵蓋所有 tailnet 流量;復原時只撤回本次新增規則。
排錯與權限限制
| 症狀 | 先查證據 | 修正方向 |
|---|---|---|
| 有聲音、沒有畫面 | 圖形工作階段、螢幕、Portal 與編碼器日誌 | 先修復擷取條件,不直接修改驅動或 GRUB |
| 更換螢幕後 Portal 失效 | 已儲存 token、沒有 streams 等日誌 | 確認原因後,在 Web UI → Troubleshooting → Reset XDG Portal Capture 重設,再由主機重新授權 |
| 有畫面、無法操作 | uinput 與套件附帶的 udev 規則 | 依官方文件修復、重新載入規則或重新登入,不開放所有使用者寫入裝置 |
| CPU 偏高或持續掉幀 | 實際是否使用 software encoder | 確認 NVENC/VAAPI 等硬體編碼日誌 |
| 區網正常、外網較差 | Tailscale 路徑、上傳頻寬與網路掉幀 | 對照 direct/relay 狀態,再調整碼率 |
| 重開機後無法連線 | 睡眠、登入、顯示輸出與授權狀態 | 使用既有 SSH 或本機救援;無人值守另行設計 |
| 文字模糊 | 解析度、縮放、色度取樣與 codec | 先對齊顯示設定;程式碼工作可改用 Mac 編輯器+SSH |
完成檢查
以下是本教學的工程門檻,不是廠商效能保證。未測試的項目保留未勾選,交付紀錄寫明 pass、fail、blocked 或 not-tested。
- 未完成:
記錄 Ubuntu/Mac 版本、CPU 架構、GPU/驅動與圖形工作階段。
- 未完成:
區網配對成功,畫面、鍵盤、滑鼠、繁體中文輸入與音訊均已檢查。
- 未完成:
日誌確認硬體編碼;僅使用 software 時不通過目標效能驗收。
- 未完成:
1080p60 連續操作 10 分鐘,無黑畫面、無需重啟救援、無持續掉幀。
- 未完成:
動態測試的 FPS 接近設定值;網路掉幀以低於 1% 為目標,沒有計數器則記為未量測。
- 未完成:
斷線重連、服務重啟與重新登入各有獨立結果。
- 未完成:
跨網路若在範圍內,已記錄不同網路下的 direct/peer-relay/relay 及主觀觀察。
- 未完成:
沒有公網連接埠轉送、UPnP 或 Funnel;保留救援路徑且變更可回復。
社群回報與試用條件
| 回報 | 可用資訊 | 不能推出的結論 |
|---|---|---|
| Moonlight #1929,2026-07 | macOS 滑鼠延遲討論,包含 Enhanced 主觀改善與維護者對輸入、顯示路徑的回覆 | 不能視為普遍效能基準;若試用,需用同硬體、網路與解析度對照 |
| Sunshine #5020,2026-04 至 2026-08 | Vulkan 影像瑕疵包含 Ubuntu 24.04 回報 | stale 關閉不代表已修復;保留 NVENC/VAAPI 基準 |
| RustDesk #15417 與 1.5.0 | DRM/KMS、無人值守、Wayland 與登入畫面改善 | 仍需測試實際硬體、套件及登入狀態 |
來源報告未推薦專門維護此組合的官方 skill。以下 Agent Action 已包含盤點、執行、驗收與復原規格,不需先新增 MCP 或第三方 skill。
Agent Action 執行規格
以下內容供使用者授權 Agent 設定目標電腦後使用。它是可複製的執行規格,閱讀本教學不會執行任何系統指令。
查證日期: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。
依序執行
盤點與備份
讀目標專案/機器適用的管理規範,確認 Ubuntu 與 Mac 各自的執行位置與權限。
在 Ubuntu 圖形使用者的終端機收集 OS、架構、GPU、驅動、Wayland/X11、顯示輸出、目前網路與防火牆。SSH 工作階段的 XDG_SESSION_TYPE 不代表圖形桌面的類型,需用 loginctl 找到實際圖形工作階段。
Mac 收集
sw_vers、uname -m、現有 Moonlight/Tailscale 版本。若已安裝 Sunshine,確認來源、版本、systemd user unit、設定目錄與擷取後端;備份設定和必要的服務覆寫。備份含配對金鑰,限制權限,不放進公開報告或 Git。
列出缺少的條件,不安裝整套桌面、不改顯示管理員、不在未知 GPU 上盲裝 NVIDIA 驅動。
若使用 NVIDIA 的 CUDA/NVFBC 擷取或直接 GPU 記憶體 NVENC 路徑,核對固定版本的 CUDA 相容表:本次文件列出 CUDA 13.1.1、最低驅動 590.48.01。驅動較舊時先查明支援路徑,不把 nvidia-smi 正常當作相容性證明,也不自動升級驅動。
安裝 Sunshine
預設使用官方 DEB。確認目標有 curl、CA 憑證和 apt;缺少才安裝必要工具。
下方為本報告基準版本的可重現安裝區塊;執行前先確認沒有更新版已裝在主機上。
(
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 問題時按實際日誌查證。
圖形工作階段、服務與擷取
以 Ubuntu 桌面使用者啟動 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-pagerGNOME 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。官方 DEB 的安裝腳本本身會設定 cap_sys_admin,cap_sys_nice+p,與額外手動加權限不同。輸入故障先查套件 udev 規則;只有證據顯示必要才按官方文件修復權限並記錄變更。
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 快捷鍵的差異。
網路與 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、作業系統防火牆與服務位址。按現行官方相容連接埠表、實際監聽及自訂 base port 設定,只對必要來源新增最小規則。不得重寫整份 tailnet policy,也不要假設 UFW 規則能覆蓋所有 Tailscale netfilter 行為。
若要從 Mac 管理 Sunshine,優先用既有 SSH 的 localhost port forwarding;不要為了管理 UI 把 origin_web_ui_allowed 改成 wan。
調校、重連與重啟
先保存 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/救援通道;設定變更可回復。
必須交付
environment.md:實際環境與缺少條件,避免敏感 IP/帳號進入公開版。versions.md:版本、官方下載 URL、SHA-256、查證日期。setup-log.md:已執行步驟、改動檔案、服務狀態;禁止記錄密碼、金鑰、授權 token。validation.md:逐項 pass/fail/blocked/not-tested、實測值、測試日期與工作階段狀態。未測試的項目不得標為成功。rollback.md:只撤回本次變更;停止/停用此次服務、恢復設定與新增規則,不移除原已存在的軟體或既有 tailnet 設定。不降級到已知受影響版本。
可直接執行已授權的盤點、安裝及可回復修正;只有會中斷工作、變更核心登入/安全方式或需要使用者完成互動時才暫停,並說明具體原因。這份規格授權的是遠端桌面設定,不包含購買硬體、修改帳號權限或全面升級 OS。
官方與查證來源
Tailscale 連線類型:https://tailscale.com/docs/reference/connection-types
來源與查證邊界
本頁整理自完整來源報告,保留七項修正、七步設定、排錯與完整 Agent Action。查證日期為 2026-10-16(Asia/Taipei);固定版本、資產雜湊、服務名稱、配對與連接埠另對照官方資料。
版本以官方 release/API 為準,社群回報僅代表該回報環境。沒有在讀者的 GPU、網路、螢幕與 Mac 上進行實測,不能將範例門檻當作已取得的效能結果。
參考資料
- Moonlight macOS Enhanced
- Sunshine
- Moonlight
- GNOME Remote Desktop
- RustDesk
- OpenSSH
- VS Code Remote SSH
- Moonlight v6.2.0 release
- Tailscale macOS installation
- Original article published 2026-10-16
- Sunshine v2026.914.233613 release
- Sunshine installation and service setup
- Sunshine troubleshooting: Portal, input, encoding and networking
- Ubuntu Remote Desktop test plan
- Tailscale connection types and diagnostics
- Sunshine Linux security advisory GHSA-fp6g-27w5-489j
- Sunshine release API: Ubuntu 24.04 assets and SHA-256
- Moonlight Setup Guide: pairing and ports
- Homebrew Moonlight cask: version and macOS requirements
- Tailscale Linux installation
- Tailscale v1.104.1
- RustDesk v1.5.0 release
- RustDesk DRM/KMS discussion #15417
- Enhanced release API: v1.3.9-rc.5 snapshot
- Moonlight macOS mouse latency issue #1929
- Sunshine Vulkan artifacts issue #5020
- Sunshine Portal documentation PR #5938
- Ubuntu 26.04 LTS: GNOME remote desktop hardware acceleration
- Recent Sunshine commits
- Recent Moonlight commits
- Recent Enhanced commits
- Sunshine pinned CUDA compatibility and installation guide