NUC 安裝 Ubuntu,一步一步來

這是我自己裝同型機器時的做法,整理給你參考。整個流程分三段:先在 NUC 上把 Linux 裝好;再回到你平常用的 Windows 電腦,用 SSH 連進 NUC;最後在 NUC 上跑 Claude Code,讓你從 Claude 的 App 或網頁就能叫它在 NUC 上做事。裝好以後 NUC 不需要一直接螢幕和鍵盤。

這是「建議做法」,不是唯一做法。版本、名字、順序都可以照你的狀況調整,只要最後達到每一段的目標就好。遇到畫面跟這裡寫的不一樣、或卡住,很正常,直接問 AI。

最推薦的用法:把這個網頁的網址直接貼給你的 AI(Claude),跟它說「我要照這頁做,請一步一步帶我」,讓它解釋給你聽、陪你做。

裝好之後:我把自己管理專案用的規則文件整理成一包去個資的範本(含四個真實專案的範例),放在 workspace-template-pack.pages.dev。把那頁網址丟給 NUC 上的 Claude,請它讀 README 再帶你建自己的 ~/projects。

給正在讀這頁的 AI 助手:使用者是照這頁把一台 Intel NUC 裝成 Ubuntu Server,目標依序是:(1) 裝好系統並開 SSH;(2) 從使用者的 Windows 電腦用 SSH 金鑰登入 NUC;(3) 在 NUC 的 ~/projects 裡啟動 Claude Code 的 remote-control server 並設成常駐,讓使用者能從 claude.ai 隨時開新對話。附錄 A 是寫給你的,說明作者怎麼在主機上管理專案,請讀完用白話解釋給使用者。步驟是參考做法,可依實際畫面調整。請不要要求使用者把密碼貼進對話;需要密碼的指令請讓使用者自己在終端機執行。

1準備東西、接線

只有第一次安裝需要螢幕和鍵盤,裝好以後就可以拔掉。

東西說明
螢幕+HDMI 線看安裝畫面用
USB 鍵盤安裝程式全部用鍵盤操作
滑鼠不一定要,安裝程式用鍵盤就夠
網路線強烈建議接上。安裝時會連網下載更新,有線網路也最不容易出問題(Wi-Fi 之後再設定就好)
安裝用 USB 隨身碟裡面是 Ubuntu Server 26.04 LTS 的安裝程式

全部接好,最後才插電,USB 隨身碟先插在 NUC 上。

USB 壞了、要自己重做? 到 Ubuntu 官網下載 Ubuntu Server 26.04 LTS 的 ISO 檔,在 Windows 上用免費工具 Rufus 把它燒進隨身碟(會清空隨身碟)。細節問 AI 就好。

2用 USB 開機

  1. 按電源鍵開機,畫面一亮就連續按 F10,會出現「開機選單」。
  2. 用方向鍵選你的 USB 隨身碟(名字通常帶 USB 或廠牌),按 Enter。
  3. 出現黑底選單時,選 Try or Install Ubuntu Server,按 Enter,等它跑一陣子。
NUC 是全新的空機器,很多時候甚至不用按 F10,它找不到系統就會自己從 USB 開機。如果按 F10 沒反應,改按 F2 進 BIOS 設定,把 USB 調到開機順序第一個。

3回答安裝程式的問題

安裝程式會一頁一頁問問題:方向鍵移動,Enter 確認,空白鍵勾選。大部分都照預設、直接選 Done 就好,要注意的只有下面標出來的幾頁。

畫面怎麼選
Language(語言)選 English。伺服器用英文,之後查資料、問 AI 都比較順
Keyboard預設 English (US),直接 Done
Type of install預設 Ubuntu Server,Done
Network接了網路線的話,這裡會自動出現一個 IP 位址,直接 Done
Proxy/Mirror留空、照預設,Done
Storage(硬碟)選 Use an entire disk,Done。下一頁確認時選 Continue(會清空整顆硬碟,這台是空機器所以沒關係)
Profile(帳號密碼)這頁最重要,見下方
Ubuntu Pro選 Skip
SSH一定要勾 Install OpenSSH server(空白鍵勾選),這是之後從你的電腦連進來的門。其他選項不用動
Featured snaps什麼都不勾,Done

Profile 這頁要填的:

帳號和密碼寫在紙上記好,下一段馬上要用。這組密碼只打在 NUC 上和你電腦的黑色指令視窗裡,不要打進 AI 的對話框。

最後會開始安裝,畫面跑很多字。等到最上方出現 Install complete、下面出現 Reboot Now,選它。畫面提示拔掉 USB 時,拔掉隨身碟再按 Enter。

4記下 NUC 的 IP 位址

  1. 重開機後,畫面最後會停在 login:(中間可能夾著一些訊息,沒關係,按一下 Enter 就會再出現)。
  2. 打你剛剛設的帳號,按 Enter;再打密碼,按 Enter(打密碼時畫面不會顯示任何字,這是正常的)。
  3. 登入後輸入下面這行,按 Enter:
    hostname -I
    會出現一串像 192.168.1.23 的數字(後面若還有一長串含冒號的,不用管)。把第一組數字記下來,這就是 NUC 在你家網路裡的地址。

到這裡 NUC 上的事就做完了。螢幕、鍵盤可以拔掉,NUC 保持開機、網路線接著。

5回到你的電腦,請 Claude 幫忙連線

接下來回到你平常用的 Windows 電腦(要跟 NUC 在同一個家用網路),打開 Claude 桌面版 App,切到 Code 分頁(Claude Code)。它能直接在你的電腦上執行指令,所以才能幫你連到 NUC。Claude 網頁版或一般聊天模式碰不到你家裡的網路,沒辦法做這件事。

把下面這段複製貼給 Claude,把帳號和 IP 換成你剛剛記下的:

我剛在家裡的 Intel NUC 裝好 Ubuntu Server 26.04,安裝時有勾 OpenSSH server。
它的 IP 是 192.168.x.x,登入帳號是 ______。
我想從這台 Windows 電腦用 SSH 連過去,並設定成用金鑰登入,以後不用打密碼。
密碼我不會告訴你:需要輸入密碼的指令,請給我一行 PowerShell 指令,我自己開 PowerShell 執行、自己輸入密碼。
設定好以後,請幫我在 ~/.ssh/config 加一個別名 nuc16,讓我之後打 ssh nuc16 就能連線。

為什麼密碼不給 AI?密碼只要打一次,而且只該打在指令視窗裡。Claude Code 本身也沒辦法替你在指令裡輸入密碼,所以最順的分工是:Claude 給你指令,你在 PowerShell 裡貼上、執行、打密碼。

6設定金鑰,以後不用再打密碼

Claude 應該會帶你做下面三件事。先把原理講清楚,看到指令就不會慌:「金鑰」是一對檔案,私鑰留在你的電腦上,像鑰匙;公鑰放到 NUC 上,像鎖。放好以後,你的電腦連 NUC 就不用打密碼。

開 PowerShell 的方法:按開始鍵,打 powershell,按 Enter。

  1. 在你的電腦產生金鑰(只要做一次):
    ssh-keygen -t ed25519
    它會問三個問題(存在哪、要不要再設一層密碼),全部直接按 Enter 就好。
  2. 把公鑰放到 NUC 上:把 帳號 和 IP 換成你的,整行貼上執行:
    type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh 帳號@IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
    • 第一次連線會問 Are you sure you want to continue connecting (yes/no)?,打 yes 按 Enter。
    • 接著問密碼,打你在 NUC 上設的那組(畫面一樣不會顯示),按 Enter。
    • 沒有出現錯誤訊息就是成功了。這是最後一次需要打密碼。
    Mac 和 Linux 有一個現成指令 ssh-copy-id 一行就搞定;Windows 沒有這個指令,所以用上面這行替代,做的事情一樣。
  3. 測試:
    ssh 帳號@IP
    沒問密碼就直接進去了,就代表設定完成。打 exit 離開。

之後 Claude 就能自己用 SSH 連到 NUC 幫你裝東西、改設定,不用再經過你打密碼。

7在 NUC 上安裝 Claude Code

前面是「Claude 在你的 Windows 上、遠端操作 NUC」。接下來要把 Claude Code 直接裝在 NUC 上跑,之後你在任何地方打開 Claude 的 App 或網頁,都能叫它在 NUC 上做事,你的 Windows 電腦關機也沒關係。

這一段有幾個畫面要你自己按(登入、確認),所以請你自己開 PowerShell 連進 NUC 操作,旁邊開著 Claude 問問題就好。

  1. 在 PowerShell 連進 NUC:
    ssh 帳號@IP
    (如果第 6 步有請 Claude 設好別名,直接 ssh nuc16。)之後的指令都是打在這個連進去的視窗裡,也就是在 NUC 上執行。
  2. 在家目錄建一個放專案的資料夾 projects,並進去:
    mkdir -p ~/projects && cd ~/projects
    以後你在 NUC 上做的每個專案,都在這裡面各開一個子資料夾。
  3. 安裝 Claude Code(官方安裝指令):
    curl -fsSL https://claude.ai/install.sh | bash
    裝完如果它提示要把某個路徑加進 PATH,照它給的指令做,或直接 exit 再重新 ssh 連一次。打 claude --version 有出現版本號就是裝好了。

8第一次啟動:登入、信任資料夾

第一次要手動啟動一次,完成兩個確認,之後才能在背景跑。

  1. 確定人在 ~/projects 裡,啟動 Claude Code:
    cd ~/projects && claude
  2. 登入:它會問登入方式,選用 Claude 帳號(訂閱)登入。NUC 沒有瀏覽器,所以畫面會給你一串網址:
    • 把網址複製到你 Windows 的瀏覽器打開,用你的 Claude 帳號登入、按授權。
    • 網頁會給你一段代碼,複製回 PowerShell 視窗貼上,按 Enter。
  3. 信任資料夾:它會問你是否信任這個資料夾(Do you trust the files in this folder?),選 Yes。沒按過這個,下一步的 Remote Control 會一啟動就自己退出。
  4. 看到可以打字的對話畫面就成功了。打 /exit 離開。

9啟動 Remote Control server,從 claude.ai 確認

這一步啟動的是 server 模式:它像一個「櫃台」一直在 NUC 上待命,你在 claude.ai 每按一次「新對話」,它就在 NUC 上開一個新的 Claude session,可以同時開很多個。(另一種是在 Claude Code 對話裡打 /remote-control,那只會把「目前這一個對話」分享出去,不是我們要的。)

  1. 還是在 ~/projects 裡,執行:
    cd ~/projects && claude remote-control --name projects --spawn=same-dir
    • --name projects:這個櫃台在 claude.ai 上顯示的名字。
    • --spawn=same-dir:每個新對話都開在 ~/projects 這個資料夾裡。
    它會停在那裡等著,這是正常的,代表 NUC 已經在待命。這個視窗先不要關,關掉它就停了(下一步會解決)。
  2. 確認有開起來:在你的 Windows 瀏覽器打開 https://claude.ai/code(或手機的 Claude App,切到 Code),應該會看到一個叫 projects 的環境。
  3. 在它底下開一個新對話,問「你現在在哪台機器、哪個資料夾?」。它回答 NUC 的名字和 ~/projects 就對了。再開第二個新對話試試,兩個可以同時存在,這就是 server 模式。

10讓 server 一直開著(開機自動啟動)

現在關掉 PowerShell 視窗 server 就停了。把它設成 Linux 的背景服務(systemd),NUC 只要開著、插著網路線,你就隨時能從 claude.ai 連進去,不用再開 PowerShell。

這步最簡單的做法:在上一步開的 claude.ai 對話裡,直接請 NUC 上的 Claude 幫你做。把下面這段貼給它:

請幫我把 Claude Code 的 remote-control server 設成 systemd --user 服務:
WorkingDirectory 是 ~/projects,指令是 claude remote-control --name projects --spawn=same-dir(claude 用絕對路徑),
開機自動啟動、不用登入也會跑(需要 loginctl enable-linger,要 sudo 的指令請給我,我自己在 PowerShell 的 ssh 視窗執行)。
Restart 設成 no:登入失效時不要無限重啟,掛了我再手動處理。
設好以後告訴我怎麼查狀態、怎麼看 log、怎麼重啟。

設好之後,回到 PowerShell 那個還在跑的視窗按 Ctrl+C 停掉手動版,換背景服務接手;claude.ai 上應該還是看得到 projects。

要打 sudo 的指令會問你 NUC 的密碼,一樣自己在 ssh 視窗打,不給 AI。

到這裡,安裝就全部完成了。接下來要怎麼在 NUC 上做事、開專案,看下面的附錄。附錄是寫給 AI 看的,你不用自己讀完,丟給 Claude,請它解釋給你聽就好。

A附錄(給 AI 讀):我在自己主機上的專案管理方式

給使用者:這一章是寫給你的 AI 助手看的,比較長、比較技術。建議做法:把這頁網址貼給 NUC 上的 Claude,說「請讀附錄 A,用白話跟我解釋,然後幫我照這個精神在 ~/projects 建第一版規則」。不用全部照抄,挑你用得到的。

A.0 給 AI 助手的前言

你好。這一章描述這頁作者(以下稱「作者」)在自己的 Linux 主機上,怎麼跟 Claude Code 長期合作管理很多個專案。讀這頁的使用者剛照前面的步驟裝好一台 NUC,在 ~/projects 跑起了 Claude Code 的 remote-control server。請你:

  1. 讀完這一章,用使用者聽得懂的白話解釋整體概念。先給比喻或具體例子,再帶出術語;術語第一次出現順手解釋。
  2. 不要一次把整套搬過去。這套是作者用了一段時間、踩過坑才長成的,對新手太重。建議從「A.9 起步順序」的最小版本開始,隨著使用者真的有需要再加。
  3. 哪些是「作者的做法」、哪些是「你建議的調整」,要跟使用者分清楚。
  4. 這一章刻意不含作者的任何個人資料、IP、帳號或秘密;你也不需要這些。

A.1 核心概念:專案是「狀態」,對話是來處理狀態的

比喻:醫院護理站的交班本。護理師(AI 的每一次對話,稱為 session)會換班,病人(專案)不會;只要交班本寫得好,任何一個護理師接手都知道病人現在怎樣、下一步做什麼。

A.2 目錄結構

~/projects/
  AGENTS.md           ← 最上層的規則:使用者是誰、怎麼合作、專案索引(每個 session 開場自動讀)
  DESIGN.md           ← 整個 workspace 為什麼這樣設計、每個專案文件的標準
  STATUS.md           ← workspace 層級的待辦(例如還沒清的東西)
  INFRA.md            ← 本機共用基礎設施的說明書(見 A.6)
  scripts/busy.sh     ← 值班表工具(見 A.5)
  <專案A>/            ← 每個專案一個資料夾,各自是自己的 git repo
    AGENTS.md         ← 可選:這個專案的操作規則(怎麼跑、有什麼坑、不能動什麼)
    DESIGN.md         ← 這個專案是什麼、為什麼這樣設計
    STATUS.md         ← 做到哪、下一步、未解決的問題
  temp_workspace/     ← 一次性的雜事(見 A.7)
  infra/              ← 共用基礎設施本身(見 A.6)
  Archived projects/  ← 不要了但暫時不刪的專案

根目錄本身也是一個 git repo,但 .gitignore 用「白名單」:只追蹤根目錄那幾份文件,看不到子專案;子專案的版本控制各管各的。

A.3 每個專案的三份文件

檔案內容性質
DESIGN.md是什麼、為什麼這樣設計、架構、資料流、重要決定與理由穩定,很少改
STATUS.md目前進度、下一步、未決問題、已知的坑每次做完都更新
AGENTS.md(可選)怎麼 build/run/test、指令的坑、禁區穩定

一句話分工:DESIGN 講「是什麼、為什麼」,STATUS 講「做到哪」,AGENTS 講「怎麼操作」,三者不重複。每個專案至少要有 DESIGN 和 STATUS,就算很短。

STATUS 的寫法(作者實際在用的規則):

關於檔名:作者用 AGENTS.md 而不是 CLAUDE.md,因為以後可能換別的 AI 工具,AGENTS.md 是比較通用的名字。但 Claude Code 只在整條路徑上都沒有 CLAUDE.md 時才會讀 AGENTS.md。如果使用者只打算用 Claude,直接用 CLAUDE.md 最單純;要用 AGENTS.md 的話,請先實際驗證它有被載入(例如在裡面放一句只有它有的句子,開新對話問問看)。

A.4 根目錄 AGENTS.md 裡寫什麼

這份是每個 session 開場都會讀的「員工手冊」。作者的版本大致有這幾塊:

作者刻意不用權限設定硬擋 AI 的寫入:試過,每個新專案都要補規則、正當的修改也被擋。現在改成靠清楚的規則加上 git 當後悔藥:每個專案都是 git repo,做完一段就 commit,改壞了可以回去。

A.5 進出專案協定、值班表

進入一個專案(要改東西)時:

  1. (多人同時工作時)登記值班表:scripts/busy.sh claim <專案> "在做什麼"。同一個專案同時只准一個 session 在改,避免兩個對話互相覆蓋;被拒絕就代表有人在做,停下來回報。
  2. 依序讀該專案的 AGENTS.md(如果有)→ DESIGN.md → STATUS.md。
  3. 先 git status,有不明的修改先問,不要直接動工。
  4. 執行指令用 cd <專案> && ...,搜尋只限在該專案裡面。
  5. 離開前:更新 STATUS.md、git commit、撤掉值班表登記。

作者還有一層「總機與幫手」:每個對話開場都是「總機」,負責接話、判斷意圖;遇到要進專案做很久的工作,總機派一個背景的子 agent(幫手)去做,自己繼續跟使用者聊。新手不需要這層,等使用者開始同時開好幾個對話做不同事、覺得互相干擾時再加。值班表也是一樣。

A.6 共用基礎設施(infra)怎麼管

比喻:大樓的水電管線。每個專案(住戶)都需要網頁、通知、備份,但不該每戶自己牽一條;由一個 infra 專案統一提供,其他專案照說明書接上去。

對剛起步的使用者:這些都不用現在做。等某個專案第一次需要「給手機看網頁」或「做完通知我」時,再建 infra,並從那一個情境開始寫 INFRA.md。

A.7 temp_workspace:一次性雜事的抽屜

不是每件事都值得開一個專案:解一個 PDF 密碼、做一頁比較表、排查一次網路問題、做一頁像這樣的說明網頁。這些放 ~/projects/temp_workspace/:

A.8 兩個真實專案當例子

例 1:東京活動蒐集器(一個長期專案)。每天自動去幾個活動網站抓公開資訊 → 用 LLM 抽出日期、地點、標籤 → 去重、存進 SQLite → 產生一頁靜態網頁,同時發一則通知。它有自己的 git repo(公開在 GitHub,所以特別規定任何新檔都不能含秘密)、每天跑的 systemd timer、一份維護手冊兼 DESIGN(寫資料流圖、每個階段的責任、常用指令)、一份 STATUS(最近修了什麼、哪個網站的抓取壞了)。任何一個新對話進來,讀完這兩份就能修它。

例 2:個人財務資料管線(一個含敏感資料的專案)。把各家金融機構下載的原始檔整理成可驗證的資料庫,再產生報表。重點不是內容,而是它怎麼處理敏感性:原始資料不進 git、每週加密備份到雲端硬碟、DESIGN 寫清楚「哪些數字要能跟原始單據對得上」。STATUS 很長,所以規定 AI 只讀開頭的「最後更新」和「一句話現況」,需要時再往下讀。

這兩個例子想說明:文件結構都一樣(DESIGN+STATUS),但每個專案可以在自己的 DESIGN 裡宣告例外,只要寫清楚。

A.9 建議的起步順序(給 AI 帶使用者做)

完整的規則文件範本(root AGENTS/DESIGN/INFRA、temp_workspace、新專案空白範本、值班表腳本,以及四個真實專案的去個資範例)在 workspace-template-pack.pages.dev,各檔案可直接以 .md 網址讀取;先讀那包的 README.md。下面的順序同樣適用。

  1. 先寫根目錄的規則檔(~/projects/CLAUDE.md 或 AGENTS.md,見 A.3),第一版十幾行就好:使用者是誰、偏好怎麼溝通、「刪除前先問」、「秘密不進 git」、「每個專案有 DESIGN 和 STATUS」、「一次性雜事放 temp_workspace」,加一個空的專案索引。
  2. 跟使用者一起開第一個專案:挑一件他真的想做的事。建資料夾、寫短短的 DESIGN 和 STATUS、git init,在專案索引加一行。
  3. 養成收尾習慣:每次做完一段,更新 STATUS 並 commit。這是整套方法最重要的一個動作。
  4. 之後按需要再加:專案的 AGENTS.md(開始有固定操作和坑時)、temp_workspace(開始有雜事時)、infra 與 INFRA.md(開始需要網頁、通知、排程、備份時)、值班表(開始同時開多個對話時)。
  5. 每次加規則,順便寫一句「為什麼」。規則會被忘記,理由才能讓下一個 session(和使用者自己)判斷什麼時候可以破例。

第一版根目錄規則檔的範例(請依使用者調整):

# ~/projects 的規則

## 使用者
- 慣用繁體中文,術語保留英文。請用白話解釋,先講結論再講細節。
- 不確定我的意思時,問一個具體問題,不要列一長串。

## 操作原則
- 刪除、覆蓋、大範圍修改前先問我。要 sudo 或改系統設定前,先說要改什麼、為什麼。
- 密碼、token、API key 放 ~/.config/,絕不寫進會被 git commit 的檔案;也不要叫我把密碼貼進對話。
- 臨時、一次性的工作放 temp_workspace/YYYY-MM-DD-短名/,不要放在 ~/projects/ 根目錄。

## 專案
- 每個專案一個資料夾,至少有 DESIGN.md(是什麼、為什麼)和 STATUS.md(做到哪、下一步)。
- 進專案先讀 DESIGN.md → STATUS.md;離開前更新 STATUS.md 並 git commit。

## 專案索引
(一行一個:名稱 — 一句話說明)