1. 项目概述:一个真正属于你的去中心化设备互联方案
如果你和我一样,对把个人数据、设备控制权交给某个云服务商感到不安,同时又厌倦了在不同设备间手动同步文件、管理远程服务的繁琐,那么今天聊的这个项目——FlyMode,可能会让你眼前一亮。它不是什么新潮的云服务,而是一个完全去中心化的桌面应用,核心思想就一句话:你的设备,你的数据,无需云端。
FlyMode 本质上是一个基于 Rust + Tauri 2 构建的本地应用,它利用 SSH 和 SFTP 这些久经考验的标准协议,在你的电脑、服务器、NAS 等设备之间直接建立加密通道。通过它,你可以实现跨设备的笔记同步、安全的点对点文件传输、远程管理 OpenClaw 节点,甚至自动化控制无线硬件。所有数据流只在你的设备间穿梭,不经过任何第三方服务器,自然也没有月费订阅、服务宕机或是隐私泄露的担忧。
我最初被它吸引,是因为需要在办公室的 Linux 工作站、家里的 MacBook 以及一台放在机房的备用服务器之间频繁切换。传个配置文件、同步几条临时笔记、检查一下服务状态,这些小事如果每次都靠 scp、手动记 IP、输密码,效率低还容易出错。FlyMode 把这些零散的需求整合进一个统一的、有图形界面的工具里,并且把“去中心化”和“隐私”做到了极致。接下来,我就结合自己深度使用和测试的经验,带你彻底拆解这个工具,从设计思路到实操细节,以及那些只有真正用起来才会遇到的“坑”。
2. 核心设计理念与架构解析
2.1 为什么选择“去中心化”作为基石?
在云服务无处不在的今天,为什么还要做一个本地优先、去中心化的工具?FlyMode 的设计者显然不是出于技术怀旧,而是针对几个切实的痛点:
数据主权与隐私的绝对控制:你的笔记、传输的文件列表、设备连接信息,全部以加密形式存储在你自己的硬盘上(~/.local/share/flymode/)。没有中间服务器意味着没有数据被扫描、分析或用于广告推荐的可能性。这对于处理敏感信息或单纯注重隐私的用户来说是刚需。
网络依赖与可用性:很多同步工具一旦断网就瘫痪了。FlyMode 在局域网(LAN)环境下可以完全离线工作,设备通过本地 IP 直接发现和通信。对于跨网络场景,它巧妙地集成了 Tailscale(一个基于 WireGuard 的零配置 VPN),将分布在不同物理位置的设备虚拟到同一个安全网络中,从而实现了“有网即通”,但又无需依赖某个特定的中心化服务。
成本与可持续性:没有服务器运维成本,所以它可以完全免费和开源。这也意味着只要你的设备还在运行,这个工具就永远可用,不必担心服务商突然倒闭、涨价或改变政策。
我的体会:这种设计带来的最大好处是“安心”。你清楚地知道数据的边界在哪里。但相应的,它也把一部分责任转移给了用户,比如你需要自己确保设备间的网络可达性、管理 SSH 密钥。这是一种 trade-off,用一点点前期的配置复杂度,换取长期的控制权和隐私保障。
2.2 技术栈选型背后的逻辑
FlyMode 的技术选型非常“现代”且务实,每一层都为了特定的目标服务:
后端核心 (Rust + Tauri 2):
- Rust:被选中的首要原因是其无与伦比的性能、内存安全性和强大的并发处理能力(通过 Tokio 运行时)。处理多个并发的 SSH 连接、SFTP 传输、后台同步任务,需要稳定且高效的系统级编程语言。Rust 的“零成本抽象”保证了功能丰富的同时,最终打包的二进制文件依然小巧高效。
- Tauri 2:这是一个构建小型、快速桌面应用的工具包。相比 Electron,Tauri 2 使用操作系统的原生 WebView(在 Linux 上是 WebKitGTK),这使得应用体积大幅减少(FlyMode 的安装包通常在几十MB级别),内存占用更低,启动更快。Tauri 提供了安全的 Rust 后端与前端 JavaScript 之间的 IPC(进程间通信)桥梁,这正是 FlyMode 前端调用底层系统功能(如执行 SSH 命令、访问文件系统)的关键。
前端界面 (Preact + TypeScript):
- Preact:可以理解为 React 的一个极简、高性能替代品,API 兼容但体积小得多(约 3KB)。对于 FlyMode 这种功能明确、UI 交互复杂度中等的桌面应用来说,Preact 在保持开发体验的同时,最大限度地减少了运行时开销。
- TypeScript:为大型前端项目提供静态类型检查,能在开发阶段捕获许多潜在错误,这对于需要与 Rust 后端进行复杂数据交互的项目至关重要,保证了 IPC 接口调用的类型安全。
数据与通信层:
- SQLite:用作笔记的存储引擎。它是一个嵌入式数据库,无需单独安装服务器,读写速度快,并且通过
sqliteRust 库可以轻松实现全文搜索(FTS5)。所有笔记数据都存放在单个notes.db文件中,便于备份和迁移。 - SSH2 & SFTP:通过
ssh2这个 Rust 库实现。这是整个 P2P 功能的基石。它不仅用于加密通信,还用于身份验证(密钥或密码)、建立安全的命令执行通道(PTY,用于终端和 OpenClaw 管理)以及文件传输(SFTP 子系统)。选择标准 SSH 协议的最大好处是兼容性极强,任何开启了 SSH 服务的设备理论上都可以接入。
网络发现辅助 (Tailscale):
- 这是一个“非强制但强烈推荐”的组件。Tailscale 基于 WireGuard,能自动为你的所有设备分配私有 IP 地址并组建加密网络。FlyMode 直接调用
tailscale status --json命令来获取对等设备列表,实现了跨互联网的零配置设备发现。你可以把它看作是 FlyMode 的“网络层增强插件”。
这样的技术组合,最终达成的效果是一个资源占用低、启动迅速、功能强大且高度可移植的本地应用。在我的一台老旧笔记本(4GB RAM)上运行,内存占用长期稳定在 100MB 左右,几乎感觉不到它的存在。
3. 详细功能拆解与实战应用
3.1 OpenClaw 远程管理:一站式节点控制台
OpenClaw 是一个终端用户界面(TUI)工具,用于管理某些网络服务或节点。如果你在多台机器上部署了 OpenClaw,传统方式需要你记住每台机器的 IP、用户名,然后逐个 SSH 进去操作。FlyMode 的 OpenClaw 集成功能就是为了消灭这种繁琐。
自动发现机制: FlyMode 会周期性地(默认 120 秒)通过 SSH 连接到所有已信任的设备,并检查是否有openclaw-gateway进程在运行。这个检查不是简单的ps aux | grep,而是通过 SSH 建立一个轻量级会话执行查询命令。一旦发现,该设备的卡片上就会出现一个醒目的>_终端按钮。
一键连接与终端体验: 点击>_按钮后,FlyMode 会执行一系列自动化操作:
- 建立 SSH PTY(伪终端)会话。
- 在远程设备上智能定位
openclaw可执行文件。它会依次尝试:检查$PATH环境变量、在常见安装目录(如/usr/local/bin,~/.cargo/bin)中查找,甚至追踪符号链接。 - 自动设置正确的终端环境变量(如
LANG=en_US.UTF-8),确保 TUI 渲染正常。 - 在新的标签页中启动
openclawTUI。
这个终端是基于xterm.js构建的,支持 256 色、GPU 加速渲染(WebGL)、实时调整窗口大小,甚至完美支持中文、日文、韩文等输入法(通过 fcitx5/iBus),复制粘贴(选中即复制,Ctrl+Shift+V 粘贴)也非常流畅。你完全可以把它当作一个功能完整的生产级终端来使用。
多标签页管理: 每个检测到 OpenClaw 的设备都会独立一个标签页。你可以在不同的节点间快速切换,就像在浏览器中切换网页一样。每个标签页的会话是独立的,切换不会导致连接断开或程序重启。
实操心得:
- 权限问题:如果远程机器上的
openclaw命令需要sudo权限才能运行,FlyMode 的自动连接可能会失败。解决方案是在远程机器上通过visudo为该用户配置无需密码的sudo权限来运行特定的openclaw命令,或者确保以具有足够权限的用户身份进行 SSH 连接。- 路径问题:虽然 FlyMode 会尽力查找,但如果你的
openclaw安装在一个非常规路径,最好在远程机器的用户环境变量(如~/.bashrc或~/.profile)中将其添加到PATH中,这是最可靠的方法。- 本地机器支持:FlyMode 也能检测并连接本地运行的 OpenClaw。如果本地没有配置 SSH 密钥,它会弹出一个密码输入框,该密码仅用于当前会话。
3.2 P2P 设备同步与管理:构建你的私有设备网络
这是 FlyMode 的核心,它让你所有的设备彼此认识并安全通信。
设备发现的三种途径:
- Tailscale 自动发现(推荐):这是最省心的方式。只要设备都在同一个 Tailscale 网络中,点击“Discover Tailscale Peers”,列表里就会自动出现它们。无需手动输入 IP。
- 手动添加:适用于稳定的局域网环境,或者你知道目标设备的固定 IP(可能是公网 IP 加端口转发)。需要填写设备名、IP 地址、SSH 端口(默认 22)和 SSH 用户名。
- TCP 配对协议:这是一个 FlyMode 自定义的轻量级协议,运行在 TCP 19131 端口上。当你在设备 A 上向设备 B 发起配对请求时,B 的 FlyMode 会弹窗提示,接受后双方即交换基本信息并出现在彼此的列表中。这适合初次在局域网内快速建立连接。
两级信任模型:
- 已配对 (Paired):设备仅出现在列表中,你可以看到它的在线/离线状态。此时还不能进行数据同步或文件传输。
- 已信任 (Trusted):在配对的基础上,你需要主动点击“信任”。只有互相信任的设备之间,才会开启笔记同步、文件传输和远程终端等全部功能。这是一个重要的安全边界,防止意外连接导致数据泄露。
连接类型与状态指示: 设备卡片会用图标清晰显示连接方式:🦎 代表通过 Tailscale,🏠 代表局域网直连,🌐 代表通过互联网直连。状态指示灯每 30 秒自动刷新:绿色在线、红色离线、灰色未知。这个实时状态监控让你对设备网络的健康状况一目了然。
3.3 跨设备便签同步:一个私有的、永不离线的笔记系统
FlyMode 内置的笔记系统远不止一个简单的文本编辑器,它是一个为多设备同步而生的完整解决方案。
丰富的笔记管理功能:
- 颜色与分类:提供 8 种便签纸颜色和 7 个内置分类(通用、工作、个人等),方便视觉区分和归类。
- 标签系统:支持自定义标签(如
#项目A、#待办),标签会显示在笔记卡片上,结合全文搜索,查找效率极高。 - 置顶与视图:重要笔记可以置顶。支持网格(卡片)和列表两种视图模式,一键切换。
- 软删除:删除笔记并非物理删除,而是标记。被删除的笔记会通过同步机制在其他设备上也“消失”,但你可以在本地数据库中找到记录并进行恢复,这避免了误操作的灾难性后果。
同步策略解析:Last-Write-Wins (LWW): 多设备同步最棘手的问题是冲突解决(当两个设备同时修改了同一笔记)。FlyMode 采用 LWW 策略,逻辑如下:
- 每条笔记都有一个
updated_at时间戳和一个基于内容计算的sync_hash(SHA-256)。 - 当同步引擎检测到冲突时,会简单比较时间戳,
updated_at更晚的版本胜出,覆盖旧版本。 sync_hash的作用是优化性能。如果时间戳更新但内容哈希值未变(例如,你在两个设备上打开了同一条笔记但都没修改),则不会触发实际的网络传输和数据库写入。- 同步是双向且自动的。你可以在设置中调整同步间隔(1分钟到1小时)。
导入与导出: 所有笔记可以导出为一个标准的 JSON 文件,用于备份或在完全不同的机器间迁移(无需通过 SSH 同步)。导入功能则可以轻松地从备份中恢复。
注意事项:
- 时钟同步:LWW 策略严重依赖设备间的时间同步。请确保你的所有设备都启用了 NTP(网络时间协议),否则可能出现“未来”的修改被“过去”的修改覆盖的诡异情况。
- 冲突处理:LWW 是一种简单有效的策略,但它意味着“后保存者赢”,可能会丢失先保存者的修改。对于非常重要的笔记,建议养成在单一设备上编辑的习惯,或者利用“软删除”和导出功能进行手动版本管理。
3.4 安全文件传输 (SFTP):加密的直连文件搬运工
基于 SSH 的 SFTP 协议是 FlyMode 文件传输的基础,这意味着传输过程本身就是加密的,无需额外配置 SSL 证书。
操作流程:
- 上传:在“传输”标签页,选择本地文件,然后通过一个内置的文件浏览器选择远程设备上的目标目录,点击上传即可。
- 下载:浏览远程设备的文件系统(支持目录导航),点击任意文件即可下载到本地指定位置。
- 远程文件浏览器:它不是一个完整的文件管理器,但足以让你浏览目录结构、查看文件名、大小和修改日期。点击
..可以返回上级目录。
传输队列与并发控制: FlyMode 支持最多 3 个并发传输任务。如果你一次性选择了多个文件,超出并发数的任务会自动进入队列等待。每个任务都有独立的进度条,显示百分比和实时传输速度。你可以随时取消任何一个进行中或排队中的任务。
状态流转: 每个文件传输都会经历Pending(等待) ->InProgress(传输中) ->Completed(完成)的状态。如果失败或取消,则状态变为Failed或Cancelled。
踩坑记录:
- 大文件传输:SFTP 协议本身对大文件支持良好,但传输过程中如果网络不稳定,FlyMode 目前版本(v0.3.1)可能不会自动断点续传。对于超大文件(如数GB的视频),建议使用
rsync命令或分卷压缩后再传输。- 权限问题:确保你用于 SSH 连接的用户对远程目标目录有写权限。否则传输会失败。
- 路径包含空格或特殊字符:虽然前端做了处理,但在极少数情况下,如果远程路径包含特殊字符,可能会导致 SFTP 会话错误。尽量使用英文、数字和下划线的目录名。
3.5 无线调度与快捷操作:自动化你的硬件开关
这个功能将 FlyMode 从一个单纯的同步工具,扩展成了一个轻量级的系统自动化助手。
调度规则: 你可以创建基于时间触发的自动化规则。每条规则包含:
- 目标:Wi-Fi、蓝牙、飞行模式或自定义命令。
- 动作:开启、关闭、切换或执行命令。
- 时间:开始时间。对于 Wi-Fi、蓝牙等,还可以设置一个结束时间,形成一个时间范围(例如,晚上 23:00 关闭 Wi-Fi,早上 07:00 开启)。
- 重复:选择在一周中的哪些天生效。
自定义命令的威力: 这是最灵活的部分。你可以输入任何能在终端中执行的命令。例如:
sudo systemctl restart nginx– 每天凌晨重启 Web 服务。pactl set-sink-volume @DEFAULT_SINK@ 50%– 每天上班时间自动调低音量。curl -X POST http://localhost:8080/api/backup– 触发一个本地的备份 API。
规则可以随时启用或禁用,也可以手动点击“立即执行”来触发,非常方便测试。
快捷操作: 除了调度,还有三个一键切换按钮(Wi-Fi、蓝牙、飞行模式)和一个命令运行器。命令运行器可以让你快速执行临时的 shell 命令并查看输出,相当于一个内置的简易终端。
实现原理与平台差异: FlyMode 通过调用系统命令来实现硬件控制:
- Linux (使用
nmcli和rfkill):这是最稳定的。nmcli是 NetworkManager 的命令行工具,rfkill用于管理无线设备的硬开关(飞行模式)。- macOS (使用
networksetup和blueutil):支持 Wi-Fi 和蓝牙,飞行模式支持仍在规划中。- Windows:相关功能仍在开发中。
重要安全提示:执行自定义命令,尤其是带
sudo的命令,存在风险。请确保你完全理解命令的含义,并且 FlyMode 应用本身是可信的。不建议在此处运行来源不明或具有破坏性的命令。
4. 从零开始:完整安装与配置指南
4.1 系统准备与依赖检查
在安装 FlyMode 之前,我们需要确保系统环境就绪。虽然一键安装脚本会处理大部分问题,但了解底层依赖有助于排查故障。
核心依赖:SSH 服务这是 FlyMode 所有 P2P 功能的生命线。必须在所有计划互联的设备上安装并启用 SSH 服务器。
# 在 Ubuntu/Debian 上 sudo apt update sudo apt install openssh-server sudo systemctl enable --now ssh # 启用并立即启动服务 # 在 Fedora/RHEL/CentOS 上 sudo dnf install openssh-server sudo systemctl enable --now sshd # 在 Arch/Manjaro 上 sudo pacman -S openssh sudo systemctl enable --now sshd # 在 macOS 上 # 前往“系统设置” -> “通用” -> “共享”,勾选“远程登录”。安装后,建议测试一下 SSH 本地连接是否正常:ssh localhost。如果成功,说明服务运行良好。
可选但强烈推荐:Tailscale对于设备不在同一个局域网的情况(比如家里电脑和公司电脑),Tailscale 是完美搭档。它基于 WireGuard,配置极其简单。
# 在大多数 Linux 发行版和 macOS 上 curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up按照提示在网页上登录你的账户(支持 Google、GitHub 等),两台设备使用同一账户登录后,它们就能在虚拟的私有网络中互相发现和访问。
防火墙配置如果你的系统启用了防火墙(如ufw或firewalld),需要放行 SSH(默认 22)和 FlyMode 配对端口(默认 19131)。
# 使用 ufw (常见于 Ubuntu) sudo ufw allow 22/tcp sudo ufw allow 19131/tcp sudo ufw reload # 使用 firewalld (常见于 Fedora/RHEL) sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-port=19131/tcp sudo firewall-cmd --reload注意:如果所有设备都通过 Tailscale 连接,由于 Tailscale 创建了一个虚拟网络接口并通常有独立的规则,可能不需要在主机防火墙上额外配置这些端口。但为了兼容性(比如局域网直连模式),配置上更稳妥。
4.2 FlyMode 本体安装的三种方式
方式一:一键安装脚本(推荐给大多数用户)这是最快捷、最无痛的方式。该脚本会自动检测系统架构,下载对应的 AppImage 包,并放置到~/.local/bin/目录下(该目录通常已在用户的PATH环境变量中)。
curl -fsSL https://raw.githubusercontent.com/ken1413/flymode/main/install.sh | bash执行后,你就可以直接在终端输入flymode启动应用。脚本还会尝试为你安装并启用 SSH 服务器。
如果你希望安装为系统级的.deb包(方便所有用户使用),可以:
curl -fsSL https://raw.githubusercontent.com/ken1413/flymode/main/install.sh | bash -s -- --deb方式二:使用预编译的发布包如果你更喜欢手动控制,可以直接从 GitHub Releases 页面下载对应你发行版的包。
- .deb (Debian/Ubuntu):
sudo dpkg -i flymode_*.deb - .rpm (Fedora/RHEL):
sudo rpm -i flymode_*.rpm - .AppImage (通用):下载后,赋予执行权限
chmod +x FlyMode-*.AppImage,然后双击或通过命令行运行。
方式三:从源码构建(适合开发者或追求最新版)这需要你的系统已安装 Rust 和 Node.js 开发环境。
# 使用项目提供的自动化环境准备脚本(推荐) curl -fsSL https://raw.githubusercontent.com/ken1413/flymode/main/setup.sh | bash # 或者手动构建 git clone https://github.com/ken1413/flymode.git cd flymode cd src-ui && npm install # 安装前端依赖 cd .. cargo tauri build --release # 构建发布版本 # 构建产物位于 target/release/flymode手动构建需要安装一些系统开发库,如 GTK3、WebKitGTK 等,具体可以参考项目 README 中的详细列表。
4.3 设备互联与信任建立全流程
假设我们有两台机器:一台是家里的台式机(Home-PC),一台是办公室的笔记本(Office-Laptop)。我们要让它们通过 FlyMode 互联。
步骤 1:在两台机器上分别安装并启动 FlyMode确保两台机器都完成了 4.1 和 4.2 的步骤,并且 FlyMode 可以正常启动。
步骤 2:建立 SSH 密钥互信(最佳实践)使用密码进行 SSH 连接虽然可以,但每次同步或传输都可能需要输入密码,体验不佳。配置 SSH 密钥对是实现免密登录的关键。
在Home-PC上操作:
# 如果还没有 SSH 密钥,生成一个(推荐 ed25519,更安全更快) ssh-keygen -t ed25519 -C "flymode@home-pc" # 一路回车,使用默认路径 (~/.ssh/id_ed25519) 和空密码。 # 将公钥复制到 Office-Laptop ssh-copy-id your_username@office_laptop_ip # 这里需要输入一次 Office-Laptop 的登录密码。在Office-Laptop上操作:
# 同样生成密钥(如果还没有) ssh-keygen -t ed25519 -C "flymode@office-laptop" # 将公钥复制到 Home-PC ssh-copy-id your_username@home_pc_ip完成以上操作后,从 Home-PCssh your_username@office_laptop_ip以及从 Office-Laptopssh your_username@home_pc_ip都应该可以无需密码直接登录。
步骤 3:在 FlyMode 中添加并配对设备这里以使用 Tailscale 为例(假设两台机器都已加入同一个 Tailscale 网络)。
- 在Home-PC的 FlyMode 中,进入“设备”标签页。
- 点击“发现 Tailscale 对等设备”。稍等片刻,你应该能看到 “Office-Laptop” 出现在列表中,连接类型显示为 🦎 Tailscale。
- 点击该设备卡片上的“配对”按钮。
- 此时,在Office-Laptop的 FlyMode 界面上,会弹出一个通知,显示 “Home-PC 想要配对”。点击“接受”。
- 现在,两台机器的设备列表中,对方的状态应该从“未知”变为“在线”(绿色)。
步骤 4:配置 SSH 凭证并建立信任配对只是交换了设备信息(名称、IP)。要实际进行数据操作,必须配置 SSH 登录方式。
在Home-PC的 FlyMode 设备列表中,点击 “Office-Laptop” 卡片上的“编辑”按钮。
在弹窗中,确认 SSH 用户(即你在 Office-Laptop 上登录的用户名)。
在“认证”部分,选择“SSH 密钥路径”。路径通常为
~/.ssh/id_ed25519(如果你按上述步骤生成)。如果你设置了密钥密码,也需要在这里输入。点击“保存”。
关键一步:点击“信任”按钮。这意味着你授权 Home-PC 访问 Office-Laptop 的数据。
在Office-Laptop上,对 Home-PC 重复步骤 1-5,配置 Home-PC 的 SSH 密钥路径并点击“信任”。
至此,双向信任关系建立完成。现在,你可以在“笔记”标签页创建一条笔记,点击“立即同步”,稍等片刻,这条笔记就会出现在 Office-Laptop 的 FlyMode 中。同样,文件传输功能也应该可以正常使用了。
5. 高级配置、问题排查与维护心得
5.1 配置文件详解与自定义
FlyMode 的所有配置都存储在用户目录下,清晰且易于手动调整。
主配置文件:
~/.config/flymode/config.json这里存储了应用级别的设置,如窗口位置、主题、同步间隔、默认笔记颜色等。你可以直接编辑这个 JSON 文件,但更安全的方式是在应用内通过设置界面修改。P2P 与设备配置:
~/.config/flymode/p2p.json这是核心配置文件,包含了所有已配对/信任的设备信息、TCP 配对端口设置等。{ "pairing_port": 19131, "devices": [ { "id": "device-unique-id", "name": "Office-Laptop", "host": "100.xx.xx.xx", // Tailscale IP 或局域网 IP "port": 22, "user": "your_username", "auth_method": "key", // 或 "password" "key_path": "/home/you/.ssh/id_ed25519", "trusted": true, "last_seen": "2024-05-27T10:30:00Z" } ] }警告:手动修改此文件需谨慎,错误的格式可能导致设备列表无法加载。建议修改前先备份。
笔记数据库:
~/.local/share/flymode/notes.dbSQLite 数据库文件。你可以使用sqlite3命令行工具查看或备份它,但不建议直接修改,以免破坏数据一致性。同步工作目录:
~/.local/share/flymode/sync/用于临时存放同步元数据和冲突副本。通常无需手动干预。
5.2 常见问题与解决方案速查表
以下是我在长期使用中遇到的一些典型问题及其解决方法。
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 设备状态始终为“离线”或“未知” | 1. 网络不通。 2. SSH 服务未运行或端口被阻。 3. SSH 认证失败。 | 1.测试网络:在终端ping <对方IP>。2.测试 SSH: ssh <user>@<ip>看能否连接。如果失败,检查sudo systemctl status ssh(d)和防火墙规则。3.检查认证:确认 FlyMode 中配置的 SSH 用户、密钥路径或密码正确。尝试用配置的密钥手动 SSH 连接一次。 |
| 笔记无法同步 | 1. 设备未互相信任。 2. 同步服务未启动。 3. 数据库文件权限问题。 | 1. 确保两台设备的卡片上都显示了“已信任”。 2. 检查 FlyMode 设置中的“同步间隔”是否已启用(非“手动”)。 3. 检查 ~/.local/share/flymode/目录的权限,确保当前用户有读写权。 |
| 文件传输失败或卡住 | 1. 远程目录无写权限。 2. 磁盘空间不足。 3. 网络不稳定导致 SFTP 会话超时。 | 1. 尝试在远程机器上手动创建目标目录并检查权限。 2. 检查 df -h。3. 对于大文件,尝试分批次传输,或使用更稳定的网络环境。 |
| OpenClaw 终端按钮不出现 | 1. OpenClaw 未在远程运行。 2. SSH 用户权限不足,无法检测进程。 3. openclaw命令不在默认 PATH。 | 1. 通过 SSH 登录远程机器,运行pgrep -a openclaw确认进程存在。2. 尝试在 FlyMode 的 SSH 配置中使用具有更高权限的用户,或配置 sudo免密。3. 在远程用户的 ~/.bashrc中添加export PATH=$PATH:/path/to/openclaw。 |
| Tailscale 设备无法发现 | 1. Tailscale 未运行或未登录。 2. tailscale命令不在 PATH。3. FlyMode 无权限执行 tailscale status。 | 1. 运行tailscale status确认设备在线且在同一网络。2. 确认 which tailscale有输出。可能需要将 Tailscale 安装目录加入 PATH。3. 通常不需要特殊权限,但确保 FlyMode 是从能访问用户环境变量的终端启动的。 |
| 应用启动崩溃或白屏 | 1. 系统依赖库缺失或版本不兼容。 2. 配置文件损坏。 3. 与现有桌面环境或组件冲突。 | 1. 尝试从源码构建,或根据发行版安装完整的libwebkit2gtk等依赖。2. 临时重命名 ~/.config/flymode目录,让应用生成新配置。3. 尝试在终端中运行 flymode,查看具体的错误输出。 |
5.3 性能调优与使用建议
- 同步间隔设置:如果你频繁在多个设备间编辑笔记,可以将同步间隔设为 1 或 5 分钟,获得近乎实时的体验。如果只是偶尔同步,设为 30 分钟或 1 小时可以减少不必要的网络检查和资源占用。
- SSH 连接复用:FlyMode 底层使用的
ssh2库支持连接复用。这意味着多次操作(如连续传输多个文件)可能会复用同一个 SSH 连接,从而提升速度。如果遇到连接问题,可以尝试在设备设置中“断开连接”,然后重新操作,以建立新的会话。 - 资源监控:FlyMode 本身很轻量,但如果你同时开启了多个远程终端标签页(尤其是运行重型任务的 OpenClaw TUI),可能会占用一定的内存和 CPU。可以通过系统监控工具观察。
- 备份策略:定期备份
~/.local/share/flymode/notes.db文件。虽然笔记支持 JSON 导出,但直接备份数据库更完整。你可以写一个简单的 cron 任务来定期复制这个文件。
5.4 安全最佳实践
- 始终使用 SSH 密钥认证:避免使用密码,密钥认证更安全且方便。为 FlyMode 单独生成一对密钥也是好习惯。
- 保护你的 SSH 私钥:私钥文件(如
id_ed25519)的权限应设置为600(仅所有者可读可写)。 - 谨慎使用“信任”:只信任你完全控制的设备。一旦信任,该设备就能访问你本地 FlyMode 存储的所有笔记(通过同步)和文件系统(通过 SFTP)。
- 利用 Tailscale 的访问控制:Tailscale 提供了更细粒度的 ACL(访问控制列表)功能。你可以在 Tailscale 管理后台设置规则,限制某些设备只能访问特定的端口(如只允许访问 22 端口),增加一层安全防护。
- 定期审查设备列表:移除不再使用或不再信任的设备。
FlyMode 代表了一种软件设计思路的回归与演进:将控制权和数据所有权彻底交还给用户。它没有炫酷的 AI 功能,也没有庞大的生态,但它精准地解决了一组特定问题——安全、私密、去中心化的设备互联与数据同步。经过一段时间的深度使用,它已经成为了我数字工作流中一个安静而可靠的基石。无论是快速在手机(通过 Tailscale 连回家中服务器)和电脑间同步一段代码片段,还是远程管理散落在各处的服务节点,它都提供了一种优雅且令人安心的解决方案。如果你也崇尚 self-hosted 和隐私优先,那么花点时间配置一下 FlyMode,很可能会给你带来持久的效率提升和掌控感。