Mac mini M6 來了
只要我打開apple 官網看一下 mac mini ,他就會做一次調整,是什麼意思!!!
幾年前買的 MacBook Air M2 一直出現記憶體不足的問題,龍蝦出現後大家狂推 Mac mini,於是就起了要買一台的念頭,但遲遲沒有購買。第一次打開 Apple 官網看一下規格,隔天就因為記憶體問題漲價;前陣子又打開官網看看,沒多久就又宣佈要推出 Mac mini M6,這次就預購了。
解放我的 MacBook Air,把開發環境搬到 Mac mini
新買的 Mac mini 沒接螢幕,打算當成一直開著的工作機。於是這次搬家就從「沒有螢幕要怎麼操作它」開始,接著搬 Claude Code 的設定、四個公司專案和密鑰檔,最後刪掉 Air 上的專案,釋放 MacBook Air 的記憶體。以下記錄我與 Claude Code 的互動。
沒有螢幕,怎麼操作
我先問:「除了遠端桌面,還有什麼方式可以操作沒有螢幕的 Mac mini?」AI 列了幾種:SSH、檔案共享、VS Code Remote-SSH,出門要連回來則用 Tailscale。它也提到,mini 沒接螢幕時,螢幕共享的解析度可能被卡得很低,可以插一個 HDMI 假螢幕插頭。
SSH 是一種加密的遠端連線方式:在一台電腦上,用文字指令操作另一台電腦。
我選了 SSH,在 mini 的「系統設定 → 一般 → 共享」打開「遠端登入」。接著請 AI 查 mini 的狀態:SSH 已經開著,螢幕共享沒開,我自己去設定裡打開了。
接著要讓 Air 用金鑰登入 mini。金鑰產生好了,ssh-copy-id 卻一直失敗,原因是我在 Claude Code 裡用 ! 執行,這個模式沒辦法輸入密碼。AI 改提另一個做法:透過螢幕共享打開 mini 的終端機,把公鑰那一行直接貼進 authorized_keys,貼完就成功了。
後來 AI 發現,mini 設定成閒置 1 分鐘就睡眠,只是因為我開著螢幕共享才沒睡。一台要一直開著的機器不能這樣設定,我在 mini 上執行 sudo pmset -a sleep 0 disksleep 0 autorestart 1 把它關掉。
Claude Code 的設定要不要搬
我問 ~/.claude 要不要搬過去,又問能不能乾脆共享這個資料夾。
AI 建議不要整個共享:~/.claude 裡除了我寫的規則、skills、agents、hooks 和記憶,還有 history、sessions、cache 這些 Claude Code 執行時一直在寫的檔案,兩台同時開就會同時寫同一批檔案。它提的做法是把我寫的內容放進一個私人 git repo(dotfiles-claude),再用 symlink 接回 ~/.claude,執行期間的檔案讓每台自己保留。
我同意後,它在 Air 上建好 repo,寫了一支可以重複執行的 link.sh:原本的檔案先搬到備份資料夾,再接上 symlink。推上 GitHub 之前掃過一輪,沒有金鑰或 webhook 網址。在 mini 上執行同一支 link.sh,28 個 skill、11 個 agent 和各專案的記憶就都接上了。mini 自己的 ~/.claude.json 保留不動,因為裡面是它自己的登入狀態。
專案和密鑰
裝 gh 的時候我順口問:放密鑰的 .env 能不能直接傳過去?AI 說可以用 SSH 傳,傳輸有加密,而且只在家裡的區網裡走。不過 mini 上還沒有專案,要先把專案搬過去。它也建議只搬會在 mini 上開發的專案,密鑰放的地方越少越好。
搬的時候碰到一個限制:從 Air 用 SSH 連進 mini,讀不到 mini 的鑰匙圈(keychain),所以 gh 的登入在 SSH 裡用不了,私人 repo 也 clone 不下來。AI 改成直接把 Air 上的 .git 資料夾複製過去,再在 mini 上 checkout。這樣完全不經過 GitHub,沒推上去的本機分支也一起帶過去了,Air 上還沒 commit 的修改則不會混進來。之後再用 SSH 傳過去 4 個 .env/local.settings.json 和 Planner 的登入設定,並確認這些檔案都在 .gitignore 裡。
mini 上缺的工具分兩批裝:Node 和 gh 是下載官方檔案放進 ~/.local 底下,不需要管理員權限;az、func、sqlcmd 要靠 Homebrew,裝 Homebrew 時我在 mini 上輸入了一次密碼。az login 等瀏覽器等了一分鐘都沒反應,AI 建議改用 az login --use-device-code,我在 Air 上輸入代碼完成登入。最後從 mini 用 sqlcmd 連 Azure SQL,查詢成功。
刪掉 Air 上的專案,釋放出大約 5.2 GB
最後就是 Air 上的專案可以刪了嗎?AI 先查有哪些東西只存在 Air 上:所有 commit 和本機分支都已經跟著 .git 到了 mini,但有幾份還沒 commit 的新檔案沒有過去,我決定先把這些檔案複製過去再刪。
刪之前,AI 又查了有沒有程式還在用這些資料夾,結果比預期多:專案還開在另一個 Claude Code session 裡、Antigravity IDE 也開著專案的檔案,還有幾個已經跑了 40 到 168 天、一直沒關的開發伺服器,另外還有一個 154 天前某個 session 留下的上傳測試迴圈,每 5 秒重試一次。
AI 在這裡停下來,等我關掉那個 session 和 IDE,才去關開發伺服器,刪除四個資料夾,空出大約 5.2 GB。
連線設定好之後,安裝 tmux
要讓 Mac mini 一直工作、不因為 SSH 斷線而中斷,就需要安裝 tmux。
沒有 tmux 的情況下,用 SSH 連進 Mac mini 跑 Claude,這時候 MacBook 闔上、Wi-Fi 斷掉或視窗不小心關掉,SSH 連線就斷了,Mac mini 上正在跑的 Claude 也會跟著中斷,做到一半的工作就停了。
有了 tmux,Mac mini 上會開一個獨立的工作空間,Claude 在裡面跑;SSH 連線只是從外面看著這個空間。連線斷了,工作空間還在,Claude 也會繼續做事,重新連上後輸入 tmux a 就回到剛才的畫面。
我同意安裝之後,Claude 透過 SSH 直接幫我裝好,也在 ~/.ssh/config 加了 mini 別名,之後在 Air 的終端機就能連到 Mac mini 的獨立工作空間。
平常開工的流程:
ssh mini
tmux new -s work # 之後重新連上改用 tmux a
cd 專案 && claude
如果 claude 顯示沒登入就輸入 security unlock-keychain ,輸入密碼後再執行 cd 專案 && claude
但每次開工都要連線、開 tmux、切到專案資料夾,於是我問能不能包成 agent,Claude 認為不適合,因為這些步驟都發生在 Claude 啟動之前,agent 還沒有機會跑。它改寫了一個 shell 函式 work,放在 Air 的 .zshrc,開新的終端機視窗之後就能用:
work() {
local name="${1:-main}"
ssh -t mini "zsh -lic 'tmux ls >/dev/null 2>&1 || security unlock-keychain; cd ~/$1 || exit 1; exec tmux new -A -s $name'"
}
| 輸入 | 效果 |
|---|---|
| work | 連進 Mac mini,回到名為 main 的工作空間;沒有就新開一個 |
| work <專案> | 開一個名為 <專案> 的工作空間,直接進到 ~/<專案> 資料夾 |
| 連線斷掉後再輸入同一行 | 自動接回原本的畫面,不會重開 |
由於我的專案都放在 Mac mini 的家目錄下,所以只要 Air 的終端機在輸入 work <專案> 就會連進 Mac mini、切到 ~/<專案>,並開一個叫 <專案> 的 tmux 工作空間;如果已經開著,就直接接回去。進去後輸入 claude 就可以開始工作。要離開時先按 Ctrl+b,放開後再按 d,就能退出 tmux,Claude 會在背景繼續跑。
後記
目前這個方式運行得很順利!接著要研究的是如何讓 mini go big,連我睡覺的時候也持續工作,早上只需要檢查有沒有朝我設定的目標正確前進!
SSH 機制:
一次連線的五個步驟
Air(用戶端) mini(伺服器 sshd, port 22)
│ ① 建立連線 ─────────────────────────→ │
│ ② 協商加密金鑰 ←──────────────────→ │ 之後所有內容都加密
│ ③ 確認「你真的是 mini」← 出示主機金鑰 │
│ ④ 證明「我是 yuchang23」→ 密碼或金鑰 │
│ ⑤ 開一個 shell,執行指令 ←─────────→ │
① 是 Air 先跟 mini 的 port 22 建立 TCP 連線
② 協商加密金鑰:雙方用數學方法(Diffie-Hellman 金鑰交換)各自算出同一把臨時金鑰,這把金鑰本身從來不在網路上傳送。之後的密碼、指令、傳輸的 .env 內容全部都經過加密,區網裡有人偷聽也只看得到亂碼。
③ 確認對方身分:mini 會出示自己的「主機金鑰」。Air 第一次連線時會記進 ~/.ssh/known_hosts,這次看到的 Permanently added 'yuchang23s-mac-mini.local' 就是這一步。以後如果有別的機器冒充 mini,金鑰對不上,ssh 會跳出警告並拒絕連線。
④ 證明你是誰:有兩種方式。
- 密碼:直接輸入 mini 的登入密碼。這次 ssh-copy-id 失敗,就是因為 ! 模式沒辦法輸入密碼。
- 金鑰:
- ssh-keygen 在 Air 上產生一對金鑰:私鑰 ~/.ssh/id_ed25519 留在 Air,永遠不外傳;公鑰 id_ed25519.pub 可以公開。
- 你在 mini 上把公鑰貼進 ~/.ssh/authorized_keys,意思是「持有對應私鑰的人可以登入」。
- 連線時,mini 出一道題目,Air 用私鑰簽名回傳,mini 再用公鑰驗證簽名。過程中私鑰完全不會離開 Air。
⑤ 開始操作:驗證通過後,mini 會開一個 shell。