教學

遠端桌面操作教學

macOS × Ubuntu 24.04|Sunshine+Moonlight 實作指南

macOS 遠端操作 Ubuntu 24.04 的 Sunshine、Moonlight 與 Tailscale 實作教學,含最新查證、安裝指令、排錯與 Agent Action。

閱讀時間
20 分
更新日期
補充摘要與數據

從環境盤點、固定版本安裝到區網驗收,再加入 Tailscale 跨網路存取。保留完整 Agent Action、排錯與復原要求。

設定步驟
7
起始串流基準
1080p / 60 FPS
查證日期
2026-10-16

01目標與邊界

流程與適用範圍

本教學以 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

02來源文章查核

七項實作修正

來源報告比對了原始文章,以下修正影響安裝、配對及驗收方式。

項目查核結果操作方式
舊 DEB 檔名sunshine-ubuntu-24.04-amd64.deb 已不符合本次 release 的命名使用含版本、Ubuntu 版本與架構的固定資產,核對 SHA-256
PIN 方向Moonlight 顯示 PIN在 Sunshine 的 PIN 頁輸入該組數字
Ubuntu 24.04 內建 VNCUbuntu 內建 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 檢查實際路徑
自動啟動啟用服務不等於無人值守桌面分別驗收已登入、斷線重連及重開機未登入三種狀態

032026-10-16

版本與維護快照

發布日期採官方 UTC 日期,查證日期採 Asia/Taipei。

元件固定基準發布日期選用與限制
Sunshinev2026.914.2336132026-09-15官方 Ubuntu 24.04 amd64/arm64 DEB,含 Linux 安全修正
Moonlight PC/Qtv6.2.02026-10-04官方 macOS Universal;新增 M3 及更新 Mac 的 AV1 硬體解碼支援,兩端須支援所選 codec
Tailscalev1.104.12026-10-07GitHub 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,發行說明也明示預發行及架構重建,故只列為試用候選;最近五筆提交作者相同,不足以推論全專案只有一位維護者。

04串流機制

擷取、編碼與延遲

階段執行位置與功能
桌面擷取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 的分項統計也不是端到端量測。

05依工作選用

替代工具與選擇條件

工具適用情境先確認的限制
Sunshine+Moonlight單一 GPU 桌面、連續動態畫面需要可擷取的桌面與顯示輸出;不提供檔案同步或多使用者獨立桌面
GNOME Remote Desktop+RDP辦公、系統原生 Remote Login區分 Desktop Sharing 與 Remote Login,確認實際埠號;Mac 使用 RDP 用戶端
RustDesk遠端支援1.5.0 已包含 Wayland、輸入與登入畫面修正;登入畫面及套件相容性仍需按環境測試
OpenSSH+VS Code Remote SSHMac 編輯、Ubuntu 執行程式與工具不提供完整桌面

Tailscale 是網路連線層,不能替代遠端桌面工具。未做相同條件的量測前,不排列上述工具的效能名次。

06電腦、權限與復原路徑

前置需求

  • 未完成:

    Ubuntu 24.04 Desktop 能正常登入,單一桌面使用者具備必要安裝權限。

  • 未完成:

    主機有可用顯示輸出,第一次設定時有人可確認 Portal 授權。

  • 未完成:

    兩台電腦先位於同一區網,已取得 Ubuntu 的正確 IP。

  • 未完成:

    已記錄 Mac 型號、macOS 版本與 CPU 架構;Homebrew cask 6.2.0 要求 macOS 13 以上。

  • 未完成:

    Ubuntu 可使用 curl、有效 CA 憑證與 apt;缺少時只補必要工具。

  • 未完成:

    既有 Sunshine 設定與服務覆寫已備份;配對金鑰不得放進公開文件或 Git。

  • 未完成:

    有本機登入或既有 SSH 救援路徑;重啟前能保存使用中的工作。

07步驟 1 · 確認主機

Ubuntu 環境盤點

在 Ubuntu 圖形桌面的終端機執行,先接上並開啟螢幕。SSH 的工作階段類型不代表圖形桌面類型;若從 SSH 盤點,需用 loginctl 找出實際圖形工作階段。

bash
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,記錄 GPU 與驅動。Intel/AMD 可安裝並執行 vainfo:

bash
sudo apt install vainfo
vainfo

VAEntrypointEncSlice 或 VAEntrypointEncSliceLP 是編碼能力線索,最終仍須用 Sunshine 日誌與實際串流驗證。若缺少 NVIDIA 驅動,先檢查 Ubuntu「軟體與更新」的「額外驅動程式」,評估相容性與重啟安排。

08步驟 2 · Sunshine DEB

固定版本安裝

先用 dpkg-query -W sunshine 檢查既有版本;未安裝時該查詢可能找不到套件。若已有較新穩定版,停止使用下面的固定舊版區塊,改核對現有版本與官方文件。

以下區塊只適用 Ubuntu 24.04,依 amd64/arm64 選擇官方 DEB,校驗通過後才交給 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
)

安裝完成後記錄套件版本:

bash
dpkg-query -W sunshine

官方有對應 DEB 時優先使用原生套件。Flatpak、AppImage 的擷取與權限方式不同,不要混裝;官方編譯套件通常不需要另裝 CUDA Toolkit。

09步驟 3 · Sunshine 管理介面

使用者服務與桌面擷取

以 Ubuntu 桌面使用者執行,不使用 sudo shell 啟動長期服務:

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

在 Ubuntu 的瀏覽器開啟 https://localhost:47990,建立獨立管理帳密。預設憑證為自簽憑證,確認開啟的是本機 Sunshine 後再繼續。

GNOME Wayland 先觀察自動擷取選擇;需要時在 Web UI 指定 Portal,並在主機確認螢幕分享或 Remote Desktop 授權。編碼先保留自動選擇,從日誌確認實際後端;服務顯示 active 只代表程序存在。

若 Mac 已能透過 SSH 連入 Ubuntu,可在 Mac 建立以下通道。先替換帳號與 IP,保留終端機連線,再以 Mac 瀏覽器開啟同一個 localhost URL。

bash
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:47990:127.0.0.1:47990 ubuntu_user@UBUNTU_IP

Mac 的 localhost 原本指向 Mac,只有上述 SSH 通道才會把該連接埠轉送到 Ubuntu。無螢幕且無人可授權 Portal 時,需先決定 Remote Login、虛擬顯示或其他無螢幕方案。

10步驟 4 · Moonlight

Mac 安裝與配對

從官方 v6.2.0 release 下載 macOS Universal DMG,將 Moonlight.app 放入 Applications。已有 Homebrew 時可使用 cask,安裝前核對當前 macOS 要求與版本:

bash
brew install --cask moonlight
  1. 在 Moonlight 手動加入 Ubuntu 的區網 IP。

  2. Moonlight 顯示 PIN 後,到 Sunshine Web UI 的 PIN 頁輸入該組數字。

  3. 開啟 Desktop。若未列出,在 Sunshine Applications 建立不帶啟動命令的 Desktop 項目,以串流現有桌面。

  4. 檢查畫面、鍵盤、滑鼠、捲動、繁體中文輸入與音訊。

Mac 的 Command 與 Ubuntu 的 Ctrl/Super 不完全相同,需記錄實際快捷鍵與主機輸入法行為。

11步驟 5 · 單變因調校

串流效能基準

設定起始值
解析度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 時也需另測實際工作負載。

12步驟 6 · 選用網路層

Tailscale 跨網路連線

先完成區網驗收,再依需要加入 Tailscale。Ubuntu 使用官方安裝程式,先下載並閱讀:

bash
curl --fail --location https://tailscale.com/install.sh -o /tmp/tailscale-install.sh
less /tmp/tailscale-install.sh

檢查完畢後按 q 離開 less,再執行安裝與登入:

bash
sh /tmp/tailscale-install.sh
sudo tailscale up
tailscale version
tailscale ip -4

Mac 依官方 macOS 安裝指引操作。兩端加入同一個已授權 tailnet,登入、MFA 與系統網路擴充授權由使用者完成,並記錄兩端實際版本。

Moonlight 手動加入 Ubuntu 的 Tailscale IPv4。以下在 Ubuntu 檢查通往 Mac 的路徑,先替換對端名稱或 IP:

bash
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、服務監聽位址與主機防火牆。

13步驟 7 · 服務生命週期

自動啟動與重新登入

前述測試通過後,才啟用使用者服務自動啟動:

bash
systemctl --user enable app-dev.lizardbyte.app.Sunshine

依序測試斷線重連、重啟服務後重連、登出再登入。若需要主機重開機測試,先保存工作並確認本機登入或 SSH 救援路徑,不要同時另跑手動 Sunshine 程序。

使用者服務不會建立登入前的圖形桌面;loginctl enable-linger 也不能替代圖形登入。不要為了讓測試通過,自動啟用 autologin、停用鎖定畫面或修改 GRUB。

14依來源限制存取

Moonlight 相容連接埠與防火牆

功能協定與連接埠範圍
串流控制TCP 47984、47989、48010必要用戶端來源
串流資料UDP 47998、47999、48000、48002、48010必要用戶端來源
區網探索UDP 5353區網;手動填 IP 可省略探索
Sunshine Web UITCP 47990localhost 或既有 SSH 通道

以上是 Moonlight 相容連接埠清單,仍需檢查 Sunshine 的實際監聽與自訂 base port 設定;不表示所有 UDP 埠都會持續監聽。Tailscale 基準流程手動填 IP,不要求跨網路 mDNS。Web UI 不應直接開放給整個網路。

只有在 UFW 已啟用、且已確認它阻擋連線時,才使用以下範例。先查看現有規則,再把 MAC_LAN_IP 替換為 Mac 的實際區網 IP:

bash
sudo ufw status numbered
MAC_IP="MAC_LAN_IP"

完成替換後,新增僅允許該來源的規則:

bash
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 流量;復原時只撤回本次新增規則。

15症狀、證據與修正

排錯與權限限制

症狀先查證據修正方向
有聲音、沒有畫面圖形工作階段、螢幕、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

16工程驗收

完成檢查

以下是本教學的工程門檻,不是廠商效能保證。未測試的項目保留未勾選,交付紀錄寫明 pass、fail、blocked 或 not-tested。

  • 未完成:

    記錄 Ubuntu/Mac 版本、CPU 架構、GPU/驅動與圖形工作階段。

  • 未完成:

    區網配對成功,畫面、鍵盤、滑鼠、繁體中文輸入與音訊均已檢查。

  • 未完成:

    日誌確認硬體編碼;僅使用 software 時不通過目標效能驗收。

  • 未完成:

    1080p60 連續操作 10 分鐘,無黑畫面、無需重啟救援、無持續掉幀。

  • 未完成:

    動態測試的 FPS 接近設定值;網路掉幀以低於 1% 為目標,沒有計數器則記為未量測。

  • 未完成:

    斷線重連、服務重啟與重新登入各有獨立結果。

  • 未完成:

    跨網路若在範圍內,已記錄不同網路下的 direct/peer-relay/relay 及主觀觀察。

  • 未完成:

    沒有公網連接埠轉送、UPnP 或 Funnel;保留救援路徑且變更可回復。

17環境限定的證據

社群回報與試用條件

回報可用資訊不能推出的結論
Moonlight #1929,2026-07macOS 滑鼠延遲討論,包含 Enhanced 主觀改善與維護者對輸入、顯示路徑的回覆不能視為普遍效能基準;若試用,需用同硬體、網路與解析度對照
Sunshine #5020,2026-04 至 2026-08Vulkan 影像瑕疵包含 Ubuntu 24.04 回報stale 關閉不代表已修復;保留 NVENC/VAAPI 基準
RustDesk #15417 與 1.5.0DRM/KMS、無人值守、Wayland 與登入畫面改善仍需測試實際硬體、套件及登入狀態

來源報告未推薦專門維護此組合的官方 skill。以下 Agent Action 已包含盤點、執行、驗收與復原規格,不需先新增 MCP 或第三方 skill。

18可獨立交接的任務文件

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。

元件查證基準執行原則
Ubuntu24.04 Desktop保留現有 OS;不為串流升級發行版
Sunshinev2026.914.233613,2026-09-15 發布官方原生 DEB,按 amd64 / arm64 選檔
Moonlight PC / Qtv6.2.0,2026-10-04 發布官方 macOS Universal DMG
TailscaleGitHub 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 圖形使用者的終端機收集 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 正常當作相容性證明,也不自動升級驅動。

  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 問題時按實際日誌查證。

  1. 圖形工作階段、服務與擷取

    • 以 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。官方 DEB 的安裝腳本本身會設定 cap_sys_admin,cap_sys_nice+p,與額外手動加權限不同。輸入故障先查套件 udev 規則;只有證據顯示必要才按官方文件修復權限並記錄變更。

  1. 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 快捷鍵的差異。

  2. 網路與 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。

  3. 調校、重連與重啟

    • 先保存 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。

官方與查證來源

19官方文件與社群紀錄

來源與查證邊界

本頁整理自完整來源報告,保留七項修正、七步設定、排錯與完整 Agent Action。查證日期為 2026-10-16(Asia/Taipei);固定版本、資產雜湊、服務名稱、配對與連接埠另對照官方資料。

版本以官方 release/API 為準,社群回報僅代表該回報環境。沒有在讀者的 GPU、網路、螢幕與 Mac 上進行實測,不能將範例門檻當作已取得的效能結果。

參考資料