Article

将 Mac mini 作为开发主机,通过 SMB 挂载 Home 目录,让 Ubuntu AI Server 与 Mac 共用同一套 Codex 配置、历史记录和开发环境。

2026/7/21#Ubuntu#macOS#SMB#Codex#Linux#家庭服务器

前言

随着家庭 AI Server 的逐渐完善,我发现越来越多的开发工作实际上是在两台机器之间切换:

  • Mac mini M4

    • 24×7 在线
    • 日常开发
    • Git
    • SSH
    • Codex CLI
    • 配置管理
  • Ubuntu AI Server

    • RTX 4070 Ti SUPER
    • ComfyUI
    • Ollama
    • Docker
    • CUDA
    • AI 推理

如果两台机器分别维护:

  • .codex
  • .ssh
  • Git 配置
  • 项目目录

很快就会出现历史不同步、配置漂移的问题。

因此决定把 Mac 作为开发主机(Source of Truth),Ubuntu 只负责计算。

为什么不用复制 .codex

最开始想到的是:

scp -r ~/.codex ai-server:~

虽然可行,但有几个问题:

  • 每次都要同步
  • 会话历史容易冲突
  • 配置可能覆盖
  • 新机器还要重新同步

实际上 Codex 的配置和历史都是本地文件,因此更好的方案是:

直接共享 Mac 的 .codex

Ubuntu 始终读取同一份数据。

最终架构

Mac mini(24×7)

/Users/kevin

├── .codex
├── .ssh
├── Projects
├── Documents
└── Downloads


          │ SMB


Ubuntu AI Server

/mnt/mac-home

以后 Ubuntu 实际访问的是:

/mnt/mac-home/.codex

而不是自己的:

~/.codex

真正做到:

  • 一份配置
  • 一份历史
  • 一份 Session

第一步:开启 macOS 文件共享

打开:

系统设置

通用

共享

文件共享

添加:

/Users/kevin

或者仅共享:

/Users/kevin/.codex

推荐直接共享整个 Home,以后还能共享:

  • Projects
  • .ssh
  • dotfiles
  • Downloads

同时确认:

Options...

开启:

☑ Share files and folders using SMB

并勾选自己的用户:

☑ kevin

第一次会要求输入 Mac 登录密码。

第二步:Ubuntu 挂载

创建目录:

sudo mkdir -p /mnt/mac-home

测试挂载:

sudo mount -t cifs \
    //192.168.1.2/kevin \
    /mnt/mac-home \
    -o username=kevin,uid=$(id -u),gid=$(id -g)

第一次我遇到了:

mount error(13): Permission denied

最后发现原因非常简单:

密码输错了。

因此以后遇到:

Permission denied

先不要怀疑权限,先检查:

  • 用户名
  • Share Name
  • SMB 是否开启
  • 密码是否正确

第三步:持久化挂载

不要把密码直接写进 fstab

先创建凭据文件:

mkdir -p ~/.smb
nano ~/.smb/mac-home

内容:

username=kevin
password=你的Mac登录密码

设置权限:

chmod 600 ~/.smb/mac-home

编辑:

sudo nano /etc/fstab

加入:

//192.168.1.2/kevin  /mnt/mac-home  cifs  credentials=/home/kevin/.smb/mac-home,uid=1000,gid=1000,iocharset=utf8,vers=3.0,nofail,x-systemd.automount,_netdev  0  0

测试:

sudo umount /mnt/mac-home 2>/dev/null || true
sudo mount -a
ls -la /mnt/mac-home

没有报错并且能够读取目录,就说明配置正确。

第四步:共享 Codex

先备份 Ubuntu 原来的配置:

mv ~/.codex ~/.codex.bak

创建软链接:

ln -s /mnt/mac-home/.codex ~/.codex

验证:

ls -ld ~/.codex

应该看到类似:

/home/kevin/.codex -> /mnt/mac-home/.codex

以后 Ubuntu 与 Mac 就共用:

  • Config
  • History
  • Session

推荐的目录规划

最终我决定统一所有网络共享目录:

/mnt

├── mac-home
├── mac-ssd
└── mac-nas

对应:

Mac

├── /Users/kevin
├── /Volumes/ssd-antz
└── /Volumes/nas-antz

这样的命名比:

/mnt/kevin-home

更直观,也方便以后增加更多共享。

注意事项

虽然共享同一份 .codex 很方便,但仍需注意以下问题:

  1. 不建议 Mac 和 Ubuntu 同时运行并写入同一个 Codex 会话。
  2. SMB 挂载异常或 Mac 休眠时,Ubuntu 端的 Codex 可能无法读取配置。
  3. 登录凭据在 macOS 与 Linux 上可能使用不同的系统存储机制;如果认证失效,应在 Ubuntu 上重新登录。
  4. 不建议把 .ssh 整个目录直接通过 SMB 共享后作为 Linux 的 SSH 配置目录使用,因为 SSH 对权限和文件系统语义要求较严格。
  5. Git 配置、Shell 配置更适合使用 dotfiles 仓库同步,而不是全部依赖网络挂载。

我的家庭 AI 架构

                 Mac mini(24×7)
                 ────────────────
                    Home
                   Projects
                   .codex
                    .ssh

        ┌──────────────┼──────────────┐
        │              │              │
      SMB            SMB            SMB
        │              │              │
        ▼              ▼              ▼

 Ubuntu AI      mac-ssd        mac-nas
   Server

 Docker
 ComfyUI
 Ollama
 CUDA
 RTX 4070 Ti SUPER

Mac 负责:

  • 开发
  • Git
  • 配置
  • SSH
  • Codex

Ubuntu 负责:

  • GPU
  • AI 推理
  • Docker
  • 长时间运行任务

职责清晰,维护成本也更低。

后续计划

目前已经统一了文件系统,接下来准备继续完善整个开发环境:

  • 使用同一套 Git 配置
  • 建立统一的 dotfiles 仓库
  • 统一常用 Shell 配置
  • 整理 Projects 目录的跨平台协作方式
  • 避免直接共享对权限敏感的 .ssh
  • 最终实现任何一台机器登录,都能快速恢复接近一致的开发环境

对于长期运行的家庭 AI Server 来说,这种模式比维护两套完全独立的配置更容易管理,也更适合后续扩展。