OpenClaw 主实例从桌面机迁移到树莓派:一次本地 AI 代理基础设施重构

本地 AI 代理最初往往只是一个“能跑起来”的工具:在桌面机上安装,接入模型,配置几个插件,再接入聊天渠道或浏览器能力。这个阶段的重点是验证可用性,而不是长期运行。 但当一个 AI 代理开始承担更多日常任务,例如消息通道响应、文件处理、浏览器辅助、系统状态检查、项目资料检索,它就不再只是一个临时工具,而会逐渐变成本地基础设施的一部分。此时,运行位置、可用性、状态目录、外部访问入口、权限边界和数据分工都会变得重要。 这次迁移的核心,就是把 OpenClaw 的主安装实例从一台桌面 Linux 主机迁移到一台树莓派上,让树莓派承担长期在线的主服务角色,而桌面机则退回为扩展资源主机。 迁移前的结构 迁移前,OpenClaw 主实例运行在一台日常使用的桌面 Linux 主机上。它同时承担多个角色: 这种结构在早期很方便。所有东西都在同一台机器上,路径简单,浏览器也直接可见,调试成本低。需要排查时,打开终端就能看到服务、配置和日志。 但随着 OpenClaw 逐渐变成一个长期使用的代理系统,这种结构的问题也越来越明显。 首先,桌面机不是理想的 24 小时在线主机。它可能重启、关机、休眠,也可能因为桌面环境、浏览器、图形会话或用户操作影响服务状态。 其次,桌面机上同时有用户日常使用的程序和 OpenClaw 的自动化任务。一旦 AI 代理具备操作浏览器、文件和系统命令的能力,就必须严格区分“代理可管理的资源”和“用户私人使用的资源”。 第三,桌面机上的 OpenClaw 历史安装路径、配置目录、浏览器 profile、systemd user service、shell alias、旧备份目录等内容逐渐混杂。继续在原地修补,会让整个系统越来越难判断边界。 因此,迁移的目标不是单纯“换一台机器运行”,而是重新划分职责。 迁移后的目标架构 迁移后的结构可以概括为: 也就是说,树莓派成为 OpenClaw 的主节点,桌面机只保留少量无法或不适合迁移的能力。 这种设计的好处是,主服务变得更加稳定。树莓派功耗低,适合常驻;桌面机可以继续作为高性能或图形资源节点,但不再承担 OpenClaw 主实例的核心状态。 为什么选择树莓派作为主节点 树莓派并不适合承载所有任务。它的存储容量、CPU 性能和 I/O 能力都有限,尤其不适合大型数据库、大型本地项目和图形浏览器长期高负载运行。 但它很适合承担以下角色: …

KDE Akonadi 登录阶段启动超时的排查与修复:一次由 kalendarac 引发的竞态问题

背景 某台 Arch Linux KDE Plasma 桌面系统在登录后检查用户级 systemd 服务状态时,发现曾经出现过 Akonadi 相关失败记录。Akonadi 是 KDE PIM 体系中的个人信息管理后端,常被 KMail、Kontact、KOrganizer、KAddressBook、日历提醒、联系人、邮件索引等组件使用。 问题的表面现象比较迷惑: 一开始能看到 Akonadi 相关失败;但随后执行: 又显示: 也就是说,systemd 认为某次 Akonadi 启动失败了,但 Akonadi 本身后来又确实运行起来了。 这类问题如果直接重建 Akonadi 数据库,很容易扩大风险。更合理的处理方式是先确认失败链路,再做最小可回退修复。 初始现象 用户级日志中可以看到类似记录: Akonadi 使用内置 MariaDB/MySQL 后端。日志中 mysqld 被 systemd 杀掉,说明失败并不是单纯的前端组件问题,而是 Akonadi 启动流程中包含的数据库进程被一并终止了。 系统级 unit 内容类似: 最初可疑点是 TimeoutSec=5sec。Akonadi 登录阶段启动时需要拉起 MariaDB、初始化数据库、注册 D-Bus …

Minecraft Forge 服务端优化记录:从 1GB Heap OOM 到稳定启动与正常停服

背景 一套 Minecraft 1.19.4 Forge 服务端运行在 Linux 主机上,并通过 systemd 管理。服务端使用多模组环境,世界存档体量约数 GB,包含主世界、下界、末地以及额外维度。此前服务端在运行过程中出现异常,停止服务时 systemd 报告 timeout,并最终对 Java 进程发送强制终止信号。 最初看起来像是服务器性能不足、保存世界过慢或 systemd 停止超时太短。但经过只读检查后,真正的主线问题被定位为:服务端实际 JVM heap 只有 1GB,Forge 多模组环境运行一段时间后发生 Java heap OOM,随后在保存世界时又撞上了 systemd 默认 90 秒停止超时。 初始现象 服务端停止时出现过如下现象: 这类日志容易让人第一时间怀疑是 systemd 停止流程本身有问题,或者服务器保存世界太慢。但如果只盯着停止阶段,会忽略更早发生的根因。 进一步检查崩溃报告和 latest.log 后,可以看到关键异常是: 同时崩溃报告中的 JVM Flags 显示: 这说明服务端最大堆内存只有 1GB。对于 Minecraft 1.19.4 Forge、多模组、多个维度和数 GB 世界存档来说,1GB …

Minecraft Forge 客户端性能优化记录:从高画质高负载调整到稳定低热

背景 一套 Minecraft 1.19.4 Forge 客户端运行在 Linux 桌面环境中,桌面为 KDE,显示设备为 27 英寸高分辨率屏幕。由于客户端配置曾经经过较随意的手动调整,实际运行时存在发热、卡顿、负载偏高的可能。与此同时,服务端也出现过停止超时和内存不足问题,因此有必要先把客户端侧的明显性能压力项梳理清楚。 优化目标并不是把画质压到最低,也不是追求极限帧率,而是在保留正常视觉体验的前提下,让客户端运行更加稳定、少卡顿、低发热,并尽量减少客户端对服务端区块加载压力的间接影响。 初始检查发现的问题 客户端配置中最明显的性能压力来自几个方向:原版图形档位、渲染距离、模拟距离、帧率上限、OptiFine 视觉增强项,以及 JourneyMap 的常驻地图显示层。 首先,原版图形档位处于较高状态。配置中 graphicsMode:2 对应的通常是 Fabulous 档位。Fabulous 会使用更重的渲染路径,对高分辨率屏幕和老款 GPU 更不友好。对于普通生存和模组游玩来说,Fabulous 带来的视觉提升并不总是值得持续负载增加。 其次,客户端的 renderDistance 和 simulationDistance 均为 10。这个数值不算极端,但在 Forge、多模组、高分辨率显示环境下,会明显增加客户端渲染、CPU、内存和区块处理压力。模拟距离还会影响周边区块和实体的活跃范围,在联机环境中也可能间接增加服务端压力。 第三,帧率限制几乎处于放开状态。配置中 enableVsync:false,同时 maxFps:260。对于 60Hz 或普通显示目标来说,这种设置会让 GPU 和 CPU 尽可能多地渲染帧,即使肉眼和显示器无法完整利用,也会带来额外发热、风扇噪音和帧时间波动。 第四,OptiFine 中存在多项视觉增强功能,例如 Connected Textures、Dynamic Lights、Custom Sky、Custom Entity Models、Custom …

在 Arch KDE 上配置系统级 Postfix 邮件通知出口:让 root 与普通用户脚本都能简单发信

背景 在一台 Arch KDE 桌面主机上,存在一个很实际的需求:当脚本、备份任务、系统维护任务或定时任务开始执行时,发送一封通知邮件,提示“任务已经开始,请不要关机”;当任务完成或失败时,再发送一封结果邮件。 目标不是在桌面主机上搭建完整邮件服务器,也不是让它接收外部邮件,而是让它具备一个稳定、统一、简单的“系统级发信出口”。 最终希望脚本中可以直接写: 任务完成时: 任务失败时: 无论脚本由普通用户执行,还是由 root 执行,都应能用同样方式发信。 已有经验:PVE/PBS 的系统级邮件出口 在已有服务器环境中,PVE 和 PBS 已经配置过邮件通知。它们通过本机 Postfix 将系统通知中继到外部 SMTP 服务,并使用专用账号作为发件人。备份任务、系统任务完成后都能正常发送通知邮件。 这类方案的特点是: 这种结构非常适合 PVE/PBS 这类服务器系统,因为系统任务天然由 root、systemd 或 cron 执行。如果桌面主机也希望 root 任务和普通用户任务都能统一发信,那么系统级 Postfix relay/null-client 方案比用户级 SMTP 客户端更合适。 为什么没有采用用户级 msmtp 方案 最初也可以考虑 msmtp + mailx 方案。它很轻量,适合普通用户脚本发信: 但当需求扩展为“root 任务也要发信”时,用户级方案会迅速变复杂: 这样会带来几个问题: 而实际需求只是希望以后脚本里能简单调用 mailx。因此,继续扩展用户级方案并不合适。 …

Arch Linux 上苹果硬件风扇控制与温度监控记录:从高温降频风险到 mbpfan 接管

摘要 一台运行 Arch Linux 的苹果硬件设备,在重任务后出现 CPU 温度接近高温上限的情况。排查发现,系统中已经加载 applesmc,并且存在 fan1_input、fan1_min、fan1_max 等 Apple SMC 风扇接口。这说明该设备的风扇控制并不适合优先使用通用 fancontrol,而更适合使用面向苹果硬件的 mbpfan。 最终处理方案是: 实施后,风扇不再长期停留在最低转速附近,而是可以随温度上升自动提高转速,温度控制状态明显改善。 一、问题背景 设备在重任务后曾出现 CPU 温度接近高温上限的情况。虽然温度随后下降,但该现象说明系统默认风扇策略可能偏保守,在 Linux 下没有及时把风扇转速拉高。 初始观察到的状态大致如下: 这种情况的风险在于: 因此,本次目标不是追求极限性能,而是让风扇更早介入,避免 CPU 在重任务下反复冲到高温边缘。 二、确认风扇控制接口 首先确认系统是否加载了苹果硬件相关模块: 如果输出中存在: 说明系统已经具备读取 Apple SMC 与 CPU 温度的基础条件。 然后确认风扇接口: 如果可以看到类似文件: 说明风扇是通过 Apple SMC 暴露出来的。 典型读数可能类似: 这些数值应以本机实际读取结果为准。 三、为什么选择 mbpfan 而不是 fancontrol fancontrol …

Arch Linux KDE Plasma 高 DPI 缩放排查:从 SDDM 登录界面文字过小到全局缩放统一

背景 某台 Arch Linux 桌面系统使用 KDE Plasma 6,显示会话为 X11,登录管理器为 SDDM,桌面缩放设置为 150%。系统使用 Breeze 主题,光标、图标、颜色主题也都保持 Breeze 系列,以保证视觉风格一致。 问题出现在开机后的 SDDM 登录界面:登录前的界面没有按照预期进行缩放,文字显得很小,但鼠标指针又显得偏大。进入 KDE 桌面之后,应用界面和字体整体看起来正常,但经过进一步观察发现,桌面里的鼠标指针反而偏小。也就是说,问题并不是单纯的“SDDM 没有缩放”,而是登录界面、桌面会话、光标大小、字体 DPI 之间没有完全统一。 本次排查的目标是: 一、现象描述 系统设置中,KDE Plasma 桌面缩放比例为 150%。进入桌面后,大部分 Qt/KDE 应用显示正常。 但是开机后的 SDDM 登录界面出现以下现象: 最初容易误判为 SDDM 完全没有继承 KDE 的 150% 缩放。但后续检查发现,问题更细:SDDM 的底层 X11 DPI 已经是 144,也就是 150%,只是 SDDM greeter 没有完整吃到 …

两台内部服务器 Postfix 发信配置整理记录:在不破坏中继功能的前提下统一身份与地址改写

背景 某内部环境中有两台 Debian 系服务器,分别承担虚拟化管理与备份服务。两台机器都不是实际的公网邮件服务器,也不直接对外投递邮件,而是作为本机系统邮件的提交端使用 Postfix。 整体结构如下: 其中: 代表真正负责对外收发和中继的邮件服务器。 两台内部主机上的 Postfix 只负责把本机系统邮件、告警邮件、root 邮件等提交给该邮件服务器。两台机器各自对应一个真实存在的邮件账户: 这两个账户在邮件系统中是独立账户,均可正常收发邮件。 原始状态 两台机器的对外发信功能已经长期正常运行,说明核心 SMTP 中继链路本身没有问题。 关键配置大致如下: 这些项目是邮件能否成功提交到外部邮件服务器的核心配置,因此整理过程中没有改动。 真正需要检查的是一些非核心但影响一致性和邮件头表现的项目: 发现的问题 检查后发现两台机器的核心中继配置一致,但 Postfix 自身身份和地址改写规则并不完全一致。 主要差异包括: 同时,系统层面的主机名解析也进行了确认: 整理后,两台机器的系统层面主机名保持简单结构: 这里的 host-a.lan、host-b.lan 只作为内部局域网身份使用,不等同于公网管理入口,也不等同于实际邮件服务器。 generic 是什么 generic 指的是 Postfix 的出站地址改写表,对应配置项是: 它不负责连接 SMTP 服务器,不负责 TLS,不负责 SASL 登录,也不负责端口配置。 它的作用是:在邮件交给外部邮件服务器之前,把本机生成的发件人地址改写成真实存在的邮箱账户。 例如: 在主机 A 上统一改写为: 在主机 B 上统一改写为: …

一次 KDE 用户级服务过早启动问题排查:OpenClaw、systemd 与 KWallet 的启动顺序

背景 在 Arch Linux + KDE Plasma 桌面环境中,OpenClaw Gateway 作为用户级 systemd 服务运行。为了避免在配置文件中保存明文密钥,Gateway 的认证信息通过 KDE Wallet 读取。这个设计本身是合理的:密钥交给桌面会话的钱包管理,服务启动时再通过本地 secret provider 取出。 问题出现在一次系统或应用更新之后。原本已经调整过的用户级 systemd 启动关系,被重新生成了一个 default.target.wants 下的链接,导致 OpenClaw Gateway 再次过早启动。由于启动时间早于 KDE 图形会话完全就绪,也早于 KWallet 通过 PAM 完成解锁,Gateway 无法读取钱包中的 secret,最终启动失败。 这个问题表面上像是 KWallet 崩溃、Qt 插件缺失,甚至 KDE 环境异常;但实际根因是:用户级 systemd 服务被错误地挂回了 default.target,启动顺序早于图形会话和钱包解锁。 现象 系统启动后,OpenClaw Gateway 没有稳定进入可用状态。日志中可以看到类似信息: 同时,KWallet 相关日志中还可能出现: …

将 Nextcloud Talk 接入 OpenClaw:一次自托管 AI 控制室的部署记录

OpenClaw 除了可以通过终端、Web UI、LINE、Telegram 等入口使用,也可以接入 Nextcloud Talk。相比依赖外部聊天平台,Nextcloud Talk 更适合成为自托管环境中的私人 AI 控制室:聊天入口、项目文件、任务协作和服务器工作流可以统一放在自己的 Nextcloud 体系中。 这次部署的目标,是在已经运行的 OpenClaw Gateway 基础上,新增一个 Nextcloud Talk 房间,让 Talk 中的机器人能够接收消息、转发给 OpenClaw,并把 OpenClaw 的回复写回 Talk 房间。 整个链路大致如下: 看起来只是“添加一个聊天入口”,实际排查中涉及 Nextcloud、Talk Bot、OpenClaw 通道、反代、防火墙、房间权限和回写 API 等多个环节。 一、Nextcloud Talk Bot 与普通 Webhook 应用不是一回事 Nextcloud 中有一些通用 webhook 相关应用,用于在文件上传、修改、删除等事件发生时通知外部系统。但 OpenClaw 接入 Nextcloud Talk 并不依赖这类通用 webhook 应用。 …